-
Notifications
You must be signed in to change notification settings - Fork 591
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(types): support ns timestamp #19827
base: main
Are you sure you want to change the base?
Conversation
sorry, mis clicked update branch |
cc @xiangjinwu PTAL❤️ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Could you also include the testing SQLs you have tried?
- Is any caller of
to_protobuf
/from_protobuf
assuming thatTimestamp
would be fixed 64-bit? This assumption is no longer true.
) | ||
} | ||
let dt = s | ||
.parse::<jiff::civil::DateTime>() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we need to introduce yet another dependency in addition to chrono
and speedate
?
@@ -495,18 +491,47 @@ impl Timestamp { | |||
} | |||
|
|||
pub fn from_protobuf(cur: &mut Cursor<&[u8]>) -> ArrayResult<Timestamp> { | |||
let micros = cur | |||
let secs = cur |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: secs_or_usecs
fn add_timestamp_namo_format_state(value: i64) -> i64 { | ||
value ^ (0b01 << 62) | ||
} | ||
|
||
fn has_timestamp_namo_format_state(value: i64) -> bool { | ||
let state = (value >> 62) & 0b11; | ||
state == 0b10 || state == 0b01 | ||
} | ||
|
||
fn remove_timestamp_namo_format_state(value: i64) -> i64 { | ||
value ^ (0b01 << 62) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Encapsulate as a new type:
/// document about old and new format, including the meaning of highest 2 bits, and the corresponding accepted ranges.
enum FirstI64 {
V0{ usecs: i64 }
V1{ secs: i64 }
}
impl From<i64> for FirstI64 {
// check and remove the tagging bits
}
impl From<FirstI64> for i64 {
// add the tagging bits
}
@@ -495,7 +495,7 @@ impl HummockVersion { | |||
.clone_from(&group_construct.table_ids); | |||
self.levels.insert(*compaction_group_id, new_levels); | |||
let member_table_ids = if group_construct.version | |||
>= CompatibilityVersion::NoMemberTableIds as _ | |||
>= CompatibilityVersion::NoMemberTableIds as i32 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
avoid unrelated change
I hereby agree to the terms of the RisingWave Labs, Inc. Contributor License Agreement.
What's changed and what's your intention?
our timestamp only support ms, But our internal implementation is capable of ns, it's just that we automatically convert it to ms when we read it in, and this pr can read ns to support ns.
Checklist
Documentation
Release note