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

Method write_datum

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

Write a Datum value at the given position, dispatching by type.

(&mut self, pos: usize, datum: &Datum, data_type: &DataType)

Source from the content-addressed store, hash-verified

564
565 /// Write a Datum value at the given position, dispatching by type.
566 pub fn write_datum(&mut self, pos: usize, datum: &Datum, data_type: &DataType) {
567 match datum {
568 Datum::Bool(v) => self.write_boolean(pos, *v),
569 Datum::TinyInt(v) => self.write_byte(pos, *v),
570 Datum::SmallInt(v) => self.write_short(pos, *v),
571 Datum::Int(v) | Datum::Date(v) | Datum::Time(v) => self.write_int(pos, *v),
572 Datum::Long(v) => self.write_long(pos, *v),
573 Datum::Float(v) => self.write_float(pos, *v),
574 Datum::Double(v) => self.write_double(pos, *v),
575 Datum::Timestamp { millis, nanos } => {
576 let precision = match data_type {
577 DataType::Timestamp(ts) => ts.precision(),
578 _ => 3,
579 };
580 if precision <= 3 {
581 self.write_timestamp_compact(pos, *millis);
582 } else {
583 self.write_timestamp_non_compact(pos, *millis, *nanos);
584 }
585 }
586 Datum::LocalZonedTimestamp { millis, nanos } => {
587 let precision = match data_type {
588 DataType::LocalZonedTimestamp(ts) => ts.precision(),
589 _ => 3,
590 };
591 if precision <= 3 {
592 self.write_timestamp_compact(pos, *millis);
593 } else {
594 self.write_timestamp_non_compact(pos, *millis, *nanos);
595 }
596 }
597 Datum::Decimal {
598 unscaled,
599 precision,
600 ..
601 } => {
602 if *precision <= 18 {
603 self.write_decimal_compact(pos, *unscaled as i64);
604 } else {
605 self.write_decimal_var_len(pos, *unscaled);
606 }
607 }
608 Datum::String(s) => {
609 if s.len() <= 7 {
610 self.write_string_inline(pos, s);
611 } else {
612 self.write_string(pos, s);
613 }
614 }
615 Datum::Bytes(b) => {
616 if b.len() <= 7 {
617 self.write_binary_inline(pos, b);
618 } else {
619 self.write_binary(pos, b);
620 }
621 }
622 }
623 }

Callers 14

from_predicateMethod · 0.80
test_from_partition_setFunction · 0.80
from_arrowMethod · 0.80
from_datumsMethod · 0.80
datums_to_binary_rowFunction · 0.80

Calls 15

write_byteMethod · 0.80
write_shortMethod · 0.80
write_floatMethod · 0.80
write_doubleMethod · 0.80
precisionMethod · 0.80
write_decimal_var_lenMethod · 0.80
write_string_inlineMethod · 0.80
write_binary_inlineMethod · 0.80
write_binaryMethod · 0.80
write_booleanMethod · 0.45
write_intMethod · 0.45

Tested by

no test coverage detected