diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 0ee8c01..816df2d 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.3.0" + ".": "0.3.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 9966846..cc2d818 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [0.3.1](https://github.com/tableau/hyper-api-rust/compare/v0.3.0...v0.3.1) (2026-05-29) + +Patch release that fixes two related but distinct bugs surfaced by [#84](https://github.com/tableau/hyper-api-rust/issues/84) — wrong NUMERIC values in MCP query results and Node bindings. + +### Bug Fixes + +* **Core: `Numeric::Display` no longer drops the sign for sub-unit negatives.** Values in the open interval `(-1, 0)` previously rendered without the minus sign — `Numeric::new(-5000, 4).to_string()` returned `"0.5000"` instead of `"-0.5000"`. The Display impl now computes the sign explicitly and formats the magnitude via `unsigned_abs()`, which also removes a latent `i128::MIN` overflow panic. This silently flipped the sign of any correlation, 0-1 index, or regression residual that crossed the stringify path — including the MCP `query` tool's JSON serialization. ([#84](https://github.com/tableau/hyper-api-rust/issues/84), [#86](https://github.com/tableau/hyper-api-rust/pull/86)) +* **Node bindings: `NUMERIC` columns no longer decode as garbage / NaN.** `extract_row` and the columnar fast path were calling `row.get_f64()` for `SqlType::Numeric` columns, which reinterpreted the unscaled-integer bytes as IEEE-754 doubles. Every NUMERIC cell was wrong, regardless of sign. The bindings now use schema-aware `row.get_numeric()`, which honors the column scale and dispatches on wire form. `getString` returns the exact decimal text (preserving scale and sign), `getFloat64` returns the lossy-but-correct double, `getInt32`/`getInt64` return the truncated integer, and the columnar `getFloat64Column` returns correct `f64` values. Related to [#84](https://github.com/tableau/hyper-api-rust/issues/84). +* **Node bindings: `getBigInt` now preserves precision on `NUMERIC(p, 0)` columns.** Previously `getBigInt` returned `null` for any NUMERIC cell. It now preserves the full 128-bit unscaled value for integer-shaped numerics — use it instead of `getInt64` for NUMERIC integer values above `Number.MAX_SAFE_INTEGER`. On `NUMERIC(p, scale>0)` columns it returns `null` (use `getString` for exact text or `getFloat64` for a lossy value). Related to [#84](https://github.com/tableau/hyper-api-rust/issues/84). + ## [0.3.0](https://github.com/tableau/hyper-api-rust/compare/v0.2.3...v0.3.0) (2026-05-29) This release aggregates a coordinated set of breaking and additive API changes that landed across four PRs during the v0.3.0 bundle window. See [MIGRATING-0.3.md](./MIGRATING-0.3.md) for complete migration recipes covering every change. diff --git a/Cargo.lock b/Cargo.lock index d35abf8..54fd1aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1811,7 +1811,7 @@ dependencies = [ [[package]] name = "hyperdb-api" -version = "0.3.0" +version = "0.3.1" dependencies = [ "arrow", "bytes", @@ -1833,7 +1833,7 @@ dependencies = [ [[package]] name = "hyperdb-api-core" -version = "0.3.0" +version = "0.3.1" dependencies = [ "arrow", "base64", @@ -1873,7 +1873,7 @@ dependencies = [ [[package]] name = "hyperdb-api-derive" -version = "0.3.0" +version = "0.3.1" dependencies = [ "proc-macro2", "quote", @@ -1882,7 +1882,7 @@ dependencies = [ [[package]] name = "hyperdb-api-node" -version = "0.3.0" +version = "0.3.1" dependencies = [ "hyperdb-api", "napi", @@ -1894,7 +1894,7 @@ dependencies = [ [[package]] name = "hyperdb-api-salesforce" -version = "0.3.0" +version = "0.3.1" dependencies = [ "arrow", "base64", @@ -1915,7 +1915,7 @@ dependencies = [ [[package]] name = "hyperdb-bootstrap" -version = "0.3.0" +version = "0.3.1" dependencies = [ "anyhow", "clap", @@ -1933,7 +1933,7 @@ dependencies = [ [[package]] name = "hyperdb-mcp" -version = "0.3.0" +version = "0.3.1" dependencies = [ "arrow", "base64", @@ -3780,7 +3780,7 @@ dependencies = [ [[package]] name = "sea-query-hyperdb" -version = "0.3.0" +version = "0.3.1" dependencies = [ "sea-query", ] diff --git a/Cargo.toml b/Cargo.toml index 4003aab..7c818d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ members = [ ] [workspace.package] -version = "0.3.0" +version = "0.3.1" edition = "2021" rust-version = "1.81" license = "MIT OR Apache-2.0" diff --git a/hyperdb-api-core/Cargo.toml b/hyperdb-api-core/Cargo.toml index 6db6ba2..9187f41 100644 --- a/hyperdb-api-core/Cargo.toml +++ b/hyperdb-api-core/Cargo.toml @@ -65,7 +65,7 @@ serde_json = { workspace = true } # Salesforce OAuth authentication (optional, via standalone crate) # x-release-please-start-version -hyperdb-api-salesforce = { path = "../hyperdb-api-salesforce", version = "=0.3.0", optional = true } +hyperdb-api-salesforce = { path = "../hyperdb-api-salesforce", version = "=0.3.1", optional = true } # x-release-please-end # Arrow parsing for catalog operations (optional, used by authenticated_client) diff --git a/hyperdb-api/Cargo.toml b/hyperdb-api/Cargo.toml index e2ad79c..9305ebd 100644 --- a/hyperdb-api/Cargo.toml +++ b/hyperdb-api/Cargo.toml @@ -14,8 +14,8 @@ autobenches = false [dependencies] # x-release-please-start-version -hyperdb-api-core = { path = "../hyperdb-api-core", version = "=0.3.0" } -hyperdb-api-derive = { path = "../hyperdb-api-derive", version = "=0.3.0" } +hyperdb-api-core = { path = "../hyperdb-api-core", version = "=0.3.1" } +hyperdb-api-derive = { path = "../hyperdb-api-derive", version = "=0.3.1" } # x-release-please-end bytes = { workspace = true } thiserror = { workspace = true } diff --git a/hyperdb-mcp/Cargo.toml b/hyperdb-mcp/Cargo.toml index 484f183..0189004 100644 --- a/hyperdb-mcp/Cargo.toml +++ b/hyperdb-mcp/Cargo.toml @@ -21,7 +21,7 @@ path = "src/main.rs" [dependencies] # x-release-please-start-version -hyperdb-api = { path = "../hyperdb-api", version = "=0.3.0" } +hyperdb-api = { path = "../hyperdb-api", version = "=0.3.1" } # x-release-please-end rmcp = { version = "1.7", features = ["server", "transport-io"] } tokio = { version = "1", features = ["rt-multi-thread", "macros", "io-std", "signal", "time"] } diff --git a/version.txt b/version.txt index 0d91a54..9e11b32 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.3.0 +0.3.1