Skip to content

Commit

Permalink
Add support for decoding all numeric types as either f32 or f64 in mssql
Browse files Browse the repository at this point in the history
  • Loading branch information
lovasoa committed Nov 2, 2024
1 parent 8f30800 commit bbb69eb
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 37 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## 0.6.33

- Add support for decoding all numeric types as either f32 or f64 in mssql.

## 0.6.32
- Make `AnyTypeInfoKind` public

Expand Down
46 changes: 23 additions & 23 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ members = [

[package]
name = "sqlx-oldapi"
version = "0.6.32"
version = "0.6.33"
license = "MIT OR Apache-2.0"
readme = "README.md"
repository = "https://github.com/lovasoa/sqlx"
Expand Down Expand Up @@ -125,8 +125,8 @@ bstr = ["sqlx-core/bstr"]
git2 = ["sqlx-core/git2"]

[dependencies]
sqlx-core = { package = "sqlx-core-oldapi", version = "0.6.32", path = "sqlx-core", default-features = false }
sqlx-macros = { package = "sqlx-macros-oldapi", version = "0.6.32", path = "sqlx-macros", default-features = false, optional = true }
sqlx-core = { package = "sqlx-core-oldapi", version = "0.6.33", path = "sqlx-core", default-features = false }
sqlx-macros = { package = "sqlx-macros-oldapi", version = "0.6.33", path = "sqlx-macros", default-features = false, optional = true }

[dev-dependencies]
anyhow = "1.0.52"
Expand Down
2 changes: 1 addition & 1 deletion examples/postgres/axum-social-with-tests/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ edition = "2021"
[dependencies]
# Primary crates
axum = { version = "0.5.13", features = ["macros"] }
sqlx = { package = "sqlx-oldapi", version = "0.6.32", path = "../../../", features = ["runtime-tokio-rustls", "postgres", "time", "uuid"] }
sqlx = { package = "sqlx-oldapi", version = "0.6.33", path = "../../../", features = ["runtime-tokio-rustls", "postgres", "time", "uuid"] }
tokio = { version = "1.20.1", features = ["rt-multi-thread", "macros"] }

# Important secondary crates
Expand Down
2 changes: 1 addition & 1 deletion sqlx-cli/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "sqlx-cli"
version = "0.6.32"
version = "0.6.33"
description = "Command-line utility for SQLx, the Rust SQL toolkit."
edition = "2021"
readme = "README.md"
Expand Down
4 changes: 2 additions & 2 deletions sqlx-core/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "sqlx-core-oldapi"
version = "0.6.32"
version = "0.6.33"
repository = "https://github.com/lovasoa/sqlx"
description = "Core of SQLx, the rust SQL toolkit. Not intended to be used directly."
license = "MIT OR Apache-2.0"
Expand Down Expand Up @@ -101,7 +101,7 @@ offline = ["serde", "either/serde"]
paste = "1.0.6"
ahash = "0.8.3"
atoi = "2.0.0"
sqlx-rt = { path = "../sqlx-rt", version = "0.6.32", package = "sqlx-rt-oldapi" }
sqlx-rt = { path = "../sqlx-rt", version = "0.6.33", package = "sqlx-rt-oldapi" }
base64 = { version = "0.22", default-features = false, optional = true, features = ["std"] }
bigdecimal_ = { version = "0.4.1", optional = true, package = "bigdecimal" }
rust_decimal = { version = "1.19.0", optional = true }
Expand Down
6 changes: 5 additions & 1 deletion sqlx-core/src/mssql/types/float.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ impl Encode<'_, Mssql> for f32 {

impl Decode<'_, Mssql> for f32 {
fn decode(value: MssqlValueRef<'_>) -> Result<Self, BoxDynError> {
Ok(LittleEndian::read_f32(value.as_bytes()?))
let as_f64 = <f64 as Decode<'_, Mssql>>::decode(value)?;
Ok(as_f64 as f32)
}
}

Expand Down Expand Up @@ -67,6 +68,9 @@ impl Decode<'_, Mssql> for f64 {
DataType::Float | DataType::FloatN if size == 8 => {
Ok(LittleEndian::read_f64(value.as_bytes()?))
}
DataType::Float | DataType::FloatN if size == 4 => {
Ok(f64::from(LittleEndian::read_f32(value.as_bytes()?)))
}
DataType::Numeric | DataType::NumericN | DataType::Decimal | DataType::DecimalN => {
decode_numeric(value.as_bytes()?, precision, scale)
}
Expand Down
6 changes: 3 additions & 3 deletions sqlx-macros/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "sqlx-macros-oldapi"
version = "0.6.32"
version = "0.6.33"
repository = "https://github.com/lovasoa/sqlx"
description = "Macros for SQLx, the rust SQL toolkit. Not intended to be used directly."
license = "MIT OR Apache-2.0"
Expand Down Expand Up @@ -75,8 +75,8 @@ heck = { version = "0.5" }
either = "1.6.1"
once_cell = "1.9.0"
proc-macro2 = { version = "1.0.36", default-features = false }
sqlx-core = { package = "sqlx-core-oldapi", version = "0.6.32", default-features = false, features = ["any"], path = "../sqlx-core" }
sqlx-rt = { version = "0.6.32", default-features = false, path = "../sqlx-rt", package = "sqlx-rt-oldapi" }
sqlx-core = { package = "sqlx-core-oldapi", version = "0.6.33", default-features = false, features = ["any"], path = "../sqlx-core" }
sqlx-rt = { version = "0.6.33", default-features = false, path = "../sqlx-rt", package = "sqlx-rt-oldapi" }
serde = { version = "1.0.132", features = ["derive"], optional = true }
serde_json = { version = "1.0.73", optional = true }
sha2 = { version = "0.10.0", optional = true }
Expand Down
2 changes: 1 addition & 1 deletion sqlx-rt/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "sqlx-rt-oldapi"
version = "0.6.32"
version = "0.6.33"
repository = "https://github.com/launchbadge/sqlx"
license = "MIT OR Apache-2.0"
description = "Runtime abstraction used by SQLx, the Rust SQL toolkit. Not intended to be used directly."
Expand Down
6 changes: 4 additions & 2 deletions tests/mssql/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,14 @@ test_type!(i64(Mssql, "CAST(32324324432 AS BIGINT)" == 32324324432_i64));

test_type!(f32(
Mssql,
"CAST(3.14159265358979323846264338327950288 AS REAL)" == f32::consts::PI
"CAST(3.14159265358979323846264338327950288 AS REAL)" == f32::consts::PI,
"CAST(0.5 AS DECIMAL(3,2))" == 0.5_f32,
));

test_type!(f64(
Mssql,
"CAST(939399419.1225182 AS FLOAT)" == 939399419.1225182_f64
"CAST(939399419.1225182 AS FLOAT)" == 939399419.1225182_f64,
"CAST(9.75 AS REAL)" == 9.75_f64,
));

test_type!(numeric<f64>(Mssql,
Expand Down

0 comments on commit bbb69eb

Please sign in to comment.