Decode the column with `name` out of the provided `data`.
(
&self,
data: &'a tiberius::Row,
name: &'a str,
column: &'a SqlColumnType,
arena: &'a RowArena,
)
| 715 | impl 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)), |
no test coverage detected