MCPcopy Create free account
hub / github.com/apache/paimon-rust / write_decimal_var_len

Method write_decimal_var_len

crates/paimon/src/spec/binary_row.rs:510–532  ·  view source on GitHub ↗

Write a non-compact Decimal (precision > 18) as big-endian two's complement bytes (8-byte aligned).

(&mut self, pos: usize, unscaled: i128)

Source from the content-addressed store, hash-verified

508
509 /// Write a non-compact Decimal (precision > 18) as big-endian two's complement bytes (8-byte aligned).
510 pub fn write_decimal_var_len(&mut self, pos: usize, unscaled: i128) {
511 let be_bytes = unscaled.to_be_bytes();
512 let mut start = 0;
513 while start < 15 {
514 let b = be_bytes[start];
515 let next = be_bytes[start + 1];
516 if (b == 0x00 && next & 0x80 == 0) || (b == 0xFF && next & 0x80 != 0) {
517 start += 1;
518 } else {
519 break;
520 }
521 }
522 let minimal = &be_bytes[start..];
523
524 let var_offset = self.data.len();
525 self.data.extend_from_slice(minimal);
526 let padding = (8 - (minimal.len() % 8)) % 8;
527 self.data.extend(std::iter::repeat_n(0u8, padding));
528 let len = minimal.len();
529 let encoded = ((var_offset as u64) << 32) | (len as u64);
530 let offset = self.field_offset(pos);
531 self.data[offset..offset + 8].copy_from_slice(&encoded.to_le_bytes());
532 }
533
534 /// Write a compact Timestamp (precision <= 3) as epoch millis.
535 pub fn write_timestamp_compact(&mut self, pos: usize, epoch_millis: i64) {

Callers 3

write_datumMethod · 0.80
write_typed_valueFunction · 0.80
test_get_decimal_var_lenFunction · 0.80

Calls 2

lenMethod · 0.45
field_offsetMethod · 0.45

Tested by

no test coverage detected