Write a Datum value at the given position, dispatching by type.
(&mut self, pos: usize, datum: &Datum, data_type: &DataType)
| 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 | } |
no test coverage detected