Skip to content

Releases: tableau/hyper-api-rust

v0.3.1

29 May 06:06
edc531d

Choose a tag to compare

What's Changed

Patch release that fixes two related but distinct bugs surfaced by #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, #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.
  • 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.

Full Changelog: v0.3.0...v0.3.1

What's Changed

Full Changelog: v0.3.0...v0.3.1

v0.3.0

29 May 00:43
a086806

Choose a tag to compare

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 for complete migration recipes covering every change.

⚠ BREAKING CHANGES

  • Flat Error enum. The public hyperdb_api::Error is now a flat canonical structure per the Microsoft Pragmatic Rust Guidelines — no Box<dyn StdError> cause channel, no kind() method, no Other catch-all variant. Error::new and Error::with_cause are deleted in favor of domain-specific snake_case constructors (Error::connection, Error::server, Error::conversion, etc.). The ErrorKind re-export from hyperdb_api is removed. (#70, #71)
  • Transaction API consolidation. Connection::begin_transaction / commit / rollback (and the async equivalents) are deprecated and #[doc(hidden)]. Use the RAII guard at Connection::transaction() / AsyncConnection::transaction() instead. (#69, #73)
  • FromRow modernization. FromRow::from_row(&Row) becomes FromRow::from_row(RowAccessor<'_>). The blanket 1/2/3/4-tuple FromRow impls are deleted — define a struct with #[derive(FromRow)] instead. New RowAccessor carries a per-query cached column-name → index lookup; new Row::get_by_name for one-off named access. (#61, #62, #74)
  • Structured SQLSTATE on Cancelled / Closed / Connection. Error::Cancelled and Error::Closed change from tuple to struct variants carrying sqlstate: Option<String>. Error::Connection gains the same field. Error::sqlstate() now returns Some(...) for these variants when the server provided a code (previously Server-only). New Error::InvalidOperation variant separates caller-API misuse from library invariant violations. (#76)

Features

  • #[derive(FromRow)] proc-macro with #[hyperdb(rename = "...")] and #[hyperdb(index = N)] attributes, lives in the new re-exported hyperdb-api-derive crate (#74)
  • RowAccessor accessors: get / get_opt (name-based) and position / position_opt (index-based) (#74)
  • Ergonomic snake_case constructors workspace-wide for every error variant — &str, String, format!(...) accepted without .to_string() ceremony (#71)
  • Typed io::Error sources preserved on HyperProcess lifecycle errors (#76)
  • stabilize v0.3.0 public API bundle (#77) (ac39b2c)

Deferred

  • Internal client::Error flatten — deferred to v0.3.x as #75 (internal type, zero external consumers; scope grew on second look).

What's Changed

Full Changelog: v0.2.3...v0.3.0

v0.2.3

27 May 08:43
e93d08d

Choose a tag to compare

What's Changed

Full Changelog: v0.2.2...v0.2.3

What's Changed

Full Changelog: v0.2.2...v0.2.3

v0.2.2

27 May 07:51
5da5af4

Choose a tag to compare

What's Changed

Full Changelog: v0.2.1...v0.2.2

v0.2.1

26 May 23:58
b57f0c3

Choose a tag to compare

What's Changed

Full Changelog: v0.2.0...v0.2.1

What's Changed

Full Changelog: v0.2.0...v0.2.1

v0.1.3

18 May 22:15
Immutable release. Only release title and notes can be modified.
a617f5b

Choose a tag to compare

0.1.3 (2026-05-18)

Bug Fixes

  • v0.1.2 release — bump versions and add safety net (#17) (bae4536)

What's Changed

Full Changelog: v0.1.2...v0.1.3

v0.1.2

18 May 10:40
Immutable release. Only release title and notes can be modified.
a3a14bb

Choose a tag to compare

0.1.2 (2026-05-18)

Bug Fixes

  • ci: include README.md in hyperdb-mcp npm package (c8ccc22)
  • ci: include README.md in hyperdb-mcp npm package (#12) (b1ddb33)
  • ci: prevent npm-publish chmod step from failing on missing binaries (2708ee4)
  • ci: prevent npm-publish chmod step from failing on missing binaries (#11) (bc9bee5)
  • ci: remove brew rust on macOS before installing toolchain (b331607)
  • ci: remove brew-rust uninstall steps that delete cargo/rustc on new image (af798f1)
  • ci: restructure release-please config for workspace version inheritance (d5ad018)
  • ci: restructure release-please config for workspace version inheritance (#13) (fd18a8b)
  • ci: use simple release-type to avoid Cargo workspace member walking (3884162)
  • ci: use simple release-type to avoid Cargo workspace member walking (#14) (42f0524)

v0.1.1

13 May 10:02
v0.1.1
cac0de0

Choose a tag to compare

Full Changelog: v0.1.0...v0.1.1