From 3eae57f39203b757ee9489f7447f11f4ac20605d Mon Sep 17 00:00:00 2001 From: "Stefan R. Steiner" Date: Thu, 28 May 2026 17:03:28 -0700 Subject: [PATCH 1/3] chore: release main --- .release-please-manifest.json | 2 +- CHANGELOG.md | 11 +++++++++++ Cargo.toml | 2 +- hyperdb-api-core/Cargo.toml | 2 +- hyperdb-api/Cargo.toml | 4 ++-- hyperdb-mcp/Cargo.toml | 2 +- version.txt | 2 +- 7 files changed, 18 insertions(+), 7 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 0451499..0ee8c01 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.2.3" + ".": "0.3.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 1382dd6..1a98e6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## [0.3.0](https://github.com/tableau/hyper-api-rust/compare/v0.2.3...v0.3.0) (2026-05-29) + + +### ⚠ BREAKING CHANGES + +* v0.3.0 reshapes the public hyperdb_api::Error enum into a flat canonical structure (no Box cause channel, no kind() method, no Other catch-all variant), and its constructor surface (Error::new and Error::with_cause are deleted in favor of domain-specific snake_case constructors). It also changes the FromRow trait signature from fn from_row(row: &Row) to fn from_row(row: RowAccessor<'_>), deletes the blanket 1/2/3/4-tuple FromRow impls, deprecates Connection::begin_transaction/commit/rollback (use the RAII guard at Connection::transaction() instead), introduces a new Error::InvalidOperation variant, and changes Error::Cancelled and Error::Closed from tuple to struct variants carrying structured sqlstate. Every variant has a snake_case constructor; the FromRow derive lives in a re-exported hyperdb-api-derive crate. See MIGRATING-0.3.md for migration recipes. + +### Features + +* stabilize v0.3.0 public API bundle ([#77](https://github.com/tableau/hyper-api-rust/issues/77)) ([ac39b2c](https://github.com/tableau/hyper-api-rust/commit/ac39b2cc0ef77ecfbe3abcff965c985635e10fdf)) + ## [0.2.3](https://github.com/tableau/hyper-api-rust/compare/v0.2.2...v0.2.3) (2026-05-27) diff --git a/Cargo.toml b/Cargo.toml index 0762c64..4003aab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ members = [ ] [workspace.package] -version = "0.2.3" +version = "0.3.0" 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 94eaf9b..6db6ba2 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.2.3", optional = true } +hyperdb-api-salesforce = { path = "../hyperdb-api-salesforce", version = "=0.3.0", 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 cd8f86d..e2ad79c 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.2.3" } -hyperdb-api-derive = { path = "../hyperdb-api-derive", version = "=0.2.3" } +hyperdb-api-core = { path = "../hyperdb-api-core", version = "=0.3.0" } +hyperdb-api-derive = { path = "../hyperdb-api-derive", version = "=0.3.0" } # x-release-please-end bytes = { workspace = true } thiserror = { workspace = true } diff --git a/hyperdb-mcp/Cargo.toml b/hyperdb-mcp/Cargo.toml index 26ebe13..484f183 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.2.3" } +hyperdb-api = { path = "../hyperdb-api", version = "=0.3.0" } # 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 7179039..0d91a54 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.2.3 +0.3.0 From 09b23f35cb602e207a36683d92ac1e52e63649ff Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 29 May 2026 00:03:46 +0000 Subject: [PATCH 2/3] chore: sync Cargo.lock with bumped workspace versions --- Cargo.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c47d2d9..d35abf8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1811,7 +1811,7 @@ dependencies = [ [[package]] name = "hyperdb-api" -version = "0.2.3" +version = "0.3.0" dependencies = [ "arrow", "bytes", @@ -1833,7 +1833,7 @@ dependencies = [ [[package]] name = "hyperdb-api-core" -version = "0.2.3" +version = "0.3.0" dependencies = [ "arrow", "base64", @@ -1873,7 +1873,7 @@ dependencies = [ [[package]] name = "hyperdb-api-derive" -version = "0.2.3" +version = "0.3.0" dependencies = [ "proc-macro2", "quote", @@ -1882,7 +1882,7 @@ dependencies = [ [[package]] name = "hyperdb-api-node" -version = "0.2.3" +version = "0.3.0" dependencies = [ "hyperdb-api", "napi", @@ -1894,7 +1894,7 @@ dependencies = [ [[package]] name = "hyperdb-api-salesforce" -version = "0.2.3" +version = "0.3.0" dependencies = [ "arrow", "base64", @@ -1915,7 +1915,7 @@ dependencies = [ [[package]] name = "hyperdb-bootstrap" -version = "0.2.3" +version = "0.3.0" dependencies = [ "anyhow", "clap", @@ -1933,7 +1933,7 @@ dependencies = [ [[package]] name = "hyperdb-mcp" -version = "0.2.3" +version = "0.3.0" dependencies = [ "arrow", "base64", @@ -3780,7 +3780,7 @@ dependencies = [ [[package]] name = "sea-query-hyperdb" -version = "0.2.3" +version = "0.3.0" dependencies = [ "sea-query", ] From e9d89e06089d5c1fa71b6be71e8ddbcd5244dafc Mon Sep 17 00:00:00 2001 From: "Stefan R. Steiner" Date: Thu, 28 May 2026 17:18:48 -0700 Subject: [PATCH 3/3] Update changelog for v0.3.0 release This release aggregates breaking and additive API changes across four PRs. See MIGRATING-0.3.md for migration recipes. --- CHANGELOG.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a98e6a..9966846 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,15 +2,26 @@ ## [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. ### ⚠ BREAKING CHANGES -* v0.3.0 reshapes the public hyperdb_api::Error enum into a flat canonical structure (no Box cause channel, no kind() method, no Other catch-all variant), and its constructor surface (Error::new and Error::with_cause are deleted in favor of domain-specific snake_case constructors). It also changes the FromRow trait signature from fn from_row(row: &Row) to fn from_row(row: RowAccessor<'_>), deletes the blanket 1/2/3/4-tuple FromRow impls, deprecates Connection::begin_transaction/commit/rollback (use the RAII guard at Connection::transaction() instead), introduces a new Error::InvalidOperation variant, and changes Error::Cancelled and Error::Closed from tuple to struct variants carrying structured sqlstate. Every variant has a snake_case constructor; the FromRow derive lives in a re-exported hyperdb-api-derive crate. See MIGRATING-0.3.md for migration recipes. +* **Flat `Error` enum.** The public `hyperdb_api::Error` is now a flat canonical structure per the [Microsoft Pragmatic Rust Guidelines](https://microsoft.github.io/rust-guidelines/) — no `Box` 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](https://github.com/tableau/hyper-api-rust/issues/70), [#71](https://github.com/tableau/hyper-api-rust/pull/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](https://github.com/tableau/hyper-api-rust/issues/69), [#73](https://github.com/tableau/hyper-api-rust/pull/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](https://github.com/tableau/hyper-api-rust/issues/61), [#62](https://github.com/tableau/hyper-api-rust/issues/62), [#74](https://github.com/tableau/hyper-api-rust/pull/74)) +* **Structured SQLSTATE on `Cancelled` / `Closed` / `Connection`.** `Error::Cancelled` and `Error::Closed` change from tuple to struct variants carrying `sqlstate: Option`. `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](https://github.com/tableau/hyper-api-rust/pull/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](https://github.com/tableau/hyper-api-rust/pull/74)) +* `RowAccessor` accessors: `get` / `get_opt` (name-based) and `position` / `position_opt` (index-based) ([#74](https://github.com/tableau/hyper-api-rust/pull/74)) +* Ergonomic snake_case constructors workspace-wide for every error variant — `&str`, `String`, `format!(...)` accepted without `.to_string()` ceremony ([#71](https://github.com/tableau/hyper-api-rust/pull/71)) +* Typed `io::Error` sources preserved on `HyperProcess` lifecycle errors ([#76](https://github.com/tableau/hyper-api-rust/pull/76)) * stabilize v0.3.0 public API bundle ([#77](https://github.com/tableau/hyper-api-rust/issues/77)) ([ac39b2c](https://github.com/tableau/hyper-api-rust/commit/ac39b2cc0ef77ecfbe3abcff965c985635e10fdf)) +### Deferred + +* Internal `client::Error` flatten — deferred to v0.3.x as [#75](https://github.com/tableau/hyper-api-rust/issues/75) (internal type, zero external consumers; scope grew on second look). ## [0.2.3](https://github.com/tableau/hyper-api-rust/compare/v0.2.2...v0.2.3) (2026-05-27)