MCPcopy Create free account
hub / github.com/MaterializeInc/materialize / decode

Method decode

src/sql-server-util/src/desc.rs:717–977  ·  view source on GitHub ↗

Decode the column with `name` out of the provided `data`.

(
        &self,
        data: &'a tiberius::Row,
        name: &'a str,
        column: &'a SqlColumnType,
        arena: &'a RowArena,
    )

Source from the content-addressed store, hash-verified

715impl SqlServerColumnDecodeType {
716 /// Decode the column with `name` out of the provided `data`.
717 pub fn decode<'a>(
718 &self,
719 data: &'a tiberius::Row,
720 name: &'a str,
721 column: &'a SqlColumnType,
722 arena: &'a RowArena,
723 ) -> Result<Datum<'a>, SqlServerDecodeError> {
724 let maybe_datum = match (&column.scalar_type, self) {
725 (SqlScalarType::Bool, SqlServerColumnDecodeType::Bool) => data
726 .try_get(name)
727 .map_err(|_| SqlServerDecodeError::invalid_column(name, "bool"))?
728 .map(|val: bool| if val { Datum::True } else { Datum::False }),
729 (SqlScalarType::Int16, SqlServerColumnDecodeType::U8) => data
730 .try_get(name)
731 .map_err(|_| SqlServerDecodeError::invalid_column(name, "u8"))?
732 .map(|val: u8| Datum::Int16(i16::cast_from(val))),
733 (SqlScalarType::Int16, SqlServerColumnDecodeType::I16) => data
734 .try_get(name)
735 .map_err(|_| SqlServerDecodeError::invalid_column(name, "i16"))?
736 .map(Datum::Int16),
737 (SqlScalarType::Int32, SqlServerColumnDecodeType::I32) => data
738 .try_get(name)
739 .map_err(|_| SqlServerDecodeError::invalid_column(name, "i32"))?
740 .map(Datum::Int32),
741 (SqlScalarType::Int64, SqlServerColumnDecodeType::I64) => data
742 .try_get(name)
743 .map_err(|_| SqlServerDecodeError::invalid_column(name, "i64"))?
744 .map(Datum::Int64),
745 (SqlScalarType::Float32, SqlServerColumnDecodeType::F32) => data
746 .try_get(name)
747 .map_err(|_| SqlServerDecodeError::invalid_column(name, "f32"))?
748 .map(|val: f32| Datum::Float32(ordered_float::OrderedFloat(val))),
749 (SqlScalarType::Float64, SqlServerColumnDecodeType::F64) => data
750 .try_get(name)
751 .map_err(|_| SqlServerDecodeError::invalid_column(name, "f64"))?
752 .map(|val: f64| Datum::Float64(ordered_float::OrderedFloat(val))),
753 (SqlScalarType::String, SqlServerColumnDecodeType::String) => data
754 .try_get(name)
755 .map_err(|_| SqlServerDecodeError::invalid_column(name, "string"))?
756 .map(Datum::String),
757 (SqlScalarType::Char { length }, SqlServerColumnDecodeType::String) => data
758 .try_get(name)
759 .map_err(|_| SqlServerDecodeError::invalid_column(name, "char"))?
760 .map(|val: &str| match length {
761 Some(expected) => {
762 let found_chars = val.chars().count();
763 let expct_chars = usize::cast_from(expected.into_u32());
764 if found_chars != expct_chars {
765 Err(SqlServerDecodeError::invalid_char(
766 name,
767 expct_chars,
768 found_chars,
769 ))
770 } else {
771 Ok(Datum::String(val))
772 }
773 }
774 None => Ok(Datum::String(val)),

Callers 2

smoketest_decoderFunction · 0.45
testcaseFunction · 0.45

Calls 15

StringClass · 0.85
TimestampTzClass · 0.85
round_to_precisionMethod · 0.80
make_datumMethod · 0.80
packerMethod · 0.80
expectMethod · 0.80
data_col_updatedMethod · 0.80
NumericClass · 0.50
DateClass · 0.50
TimeClass · 0.50
TimestampClass · 0.50

Tested by

no test coverage detected