diff --git a/sqlx-core/src/mssql/types/int.rs b/sqlx-core/src/mssql/types/int.rs index ae20995627..61077dbc5a 100644 --- a/sqlx-core/src/mssql/types/int.rs +++ b/sqlx-core/src/mssql/types/int.rs @@ -30,7 +30,7 @@ impl Encode<'_, Mssql> for i8 { impl Decode<'_, Mssql> for i8 { fn decode(value: MssqlValueRef<'_>) -> Result { let i64_val = >::decode(value)?; - convert_integer::(i64_val) + Ok(convert_integer::(i64_val)? as Self) } } @@ -58,7 +58,7 @@ impl Encode<'_, Mssql> for i16 { impl Decode<'_, Mssql> for i16 { fn decode(value: MssqlValueRef<'_>) -> Result { let i64_val = >::decode(value)?; - convert_integer::(i64_val) + Ok(convert_integer::(i64_val)? as Self) } } @@ -83,7 +83,7 @@ impl Encode<'_, Mssql> for i32 { impl Decode<'_, Mssql> for i32 { fn decode(value: MssqlValueRef<'_>) -> Result { let i64_val = >::decode(value)?; - convert_integer::(i64_val) + Ok(convert_integer::(i64_val)? as Self) } } @@ -172,7 +172,7 @@ fn decode_numeric(bytes: &[u8], _precision: u8, mut scale: u8) -> Result(i64_val: i64) -> Result +pub(super) fn convert_integer(i64_val: i64) -> Result where T: TryFrom, T::Error: std::error::Error + Send + Sync + 'static, diff --git a/sqlx-core/src/mssql/types/uint.rs b/sqlx-core/src/mssql/types/uint.rs index 858a0fb5ce..14aa044ea4 100644 --- a/sqlx-core/src/mssql/types/uint.rs +++ b/sqlx-core/src/mssql/types/uint.rs @@ -43,18 +43,15 @@ impl Type for u16 { impl Encode<'_, Mssql> for u16 { fn encode_by_ref(&self, buf: &mut Vec) -> IsNull { - let v = i16::try_from(*self).unwrap_or_else(|_e| { - log::warn!("cannot encode {self} as a signed mssql smallint"); - i16::MAX - }); + let v = *self as i16; >::encode_by_ref(&v, buf) } } impl Decode<'_, Mssql> for u16 { fn decode(value: MssqlValueRef<'_>) -> Result { - let v = >::decode(value)?; - Ok(u16::try_from(v)?) + let i64_val = >::decode(value)?; + super::int::convert_integer::(i64_val) } } @@ -70,18 +67,15 @@ impl Type for u32 { impl Encode<'_, Mssql> for u32 { fn encode_by_ref(&self, buf: &mut Vec) -> IsNull { - let v = i32::try_from(*self).unwrap_or_else(|_e| { - log::warn!("cannot encode {self} as a signed mssql int"); - i32::MAX - }); + let v = *self as i32; >::encode_by_ref(&v, buf) } } impl Decode<'_, Mssql> for u32 { fn decode(value: MssqlValueRef<'_>) -> Result { - let v = >::decode(value)?; - Ok(u32::try_from(v)?) + let i64_val = >::decode(value)?; + super::int::convert_integer::(i64_val) } } @@ -97,10 +91,7 @@ impl Type for u64 { impl Encode<'_, Mssql> for u64 { fn encode_by_ref(&self, buf: &mut Vec) -> IsNull { - let v = i64::try_from(*self).unwrap_or_else(|_e| { - log::warn!("cannot encode {self} as a signed mssql bigint"); - i64::MAX - }); + let v = *self as i64; >::encode_by_ref(&v, buf) } }