Skip to content

Commit edc531d

Browse files
chore: release main (#88)
* chore: release main * chore: sync Cargo.lock with bumped workspace versions * chore: NUMERIC value bugs in MCP query and Node bindings Patch release addressing NUMERIC value issues in MCP query results and Node bindings, including sign loss and decoding errors. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent d504a71 commit edc531d

8 files changed

Lines changed: 25 additions & 15 deletions

File tree

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.3.0"
2+
".": "0.3.1"
33
}

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# Changelog
22

3+
## [0.3.1](https://github.com/tableau/hyper-api-rust/compare/v0.3.0...v0.3.1) (2026-05-29)
4+
5+
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.
6+
7+
### Bug Fixes
8+
9+
* **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))
10+
* **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).
11+
* **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).
12+
313
## [0.3.0](https://github.com/tableau/hyper-api-rust/compare/v0.2.3...v0.3.0) (2026-05-29)
414

515
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.

Cargo.lock

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ members = [
1212
]
1313

1414
[workspace.package]
15-
version = "0.3.0"
15+
version = "0.3.1"
1616
edition = "2021"
1717
rust-version = "1.81"
1818
license = "MIT OR Apache-2.0"

hyperdb-api-core/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ serde_json = { workspace = true }
6565

6666
# Salesforce OAuth authentication (optional, via standalone crate)
6767
# x-release-please-start-version
68-
hyperdb-api-salesforce = { path = "../hyperdb-api-salesforce", version = "=0.3.0", optional = true }
68+
hyperdb-api-salesforce = { path = "../hyperdb-api-salesforce", version = "=0.3.1", optional = true }
6969
# x-release-please-end
7070

7171
# Arrow parsing for catalog operations (optional, used by authenticated_client)

hyperdb-api/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ autobenches = false
1414

1515
[dependencies]
1616
# x-release-please-start-version
17-
hyperdb-api-core = { path = "../hyperdb-api-core", version = "=0.3.0" }
18-
hyperdb-api-derive = { path = "../hyperdb-api-derive", version = "=0.3.0" }
17+
hyperdb-api-core = { path = "../hyperdb-api-core", version = "=0.3.1" }
18+
hyperdb-api-derive = { path = "../hyperdb-api-derive", version = "=0.3.1" }
1919
# x-release-please-end
2020
bytes = { workspace = true }
2121
thiserror = { workspace = true }

hyperdb-mcp/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ path = "src/main.rs"
2121

2222
[dependencies]
2323
# x-release-please-start-version
24-
hyperdb-api = { path = "../hyperdb-api", version = "=0.3.0" }
24+
hyperdb-api = { path = "../hyperdb-api", version = "=0.3.1" }
2525
# x-release-please-end
2626
rmcp = { version = "1.7", features = ["server", "transport-io"] }
2727
tokio = { version = "1", features = ["rt-multi-thread", "macros", "io-std", "signal", "time"] }

version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.3.0
1+
0.3.1

0 commit comments

Comments
 (0)