From 2e638668cfc7ec949bd03ab39396c9ad2d6234f6 Mon Sep 17 00:00:00 2001 From: zgq Date: Thu, 24 Sep 2026 17:19:41 +0800 Subject: [PATCH] Prepare SQLX v0.1.17 release Eight engines, the driver command and the JDBC worker fixes are on main, so the release number moves everywhere it is read: the workspace, the JDBC module, the packagers, the npm packages, the plugin runtimes and manifests, the release workflow guards and the update tests. The release notes describe the new engines, the driver a user provides, the worker behaviour changes and how to upgrade. The Skill ships with a >=0.1.17, <0.2.0 CLI requirement. --- .github/workflows/packages.yml | 16 +++++----- Cargo.lock | 18 +++++------ Cargo.toml | 2 +- README.md | 4 +-- docs/release-notes.md | 30 +++++++++---------- .../plugins/sqlx/.claude-plugin/plugin.json | 4 +-- integrations/claude/plugins/sqlx/runtime.json | 4 +-- .../plugins/sqlx/.codex-plugin/plugin.json | 4 +-- integrations/codex/plugins/sqlx/runtime.json | 4 +-- integrations/dsh/package.json | 2 +- integrations/pi/package.json | 2 +- java/jdbc/pom.xml | 2 +- packages/npm-installer/package.json | 2 +- scripts/manifest.py | 2 +- scripts/package-shared.py | 2 +- scripts/package.py | 2 +- tests/updates.py | 2 +- 17 files changed, 51 insertions(+), 51 deletions(-) diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml index 63e7356..326a11e 100644 --- a/.github/workflows/packages.yml +++ b/.github/workflows/packages.yml @@ -122,12 +122,12 @@ jobs: done test "$passed" -gt 0 # checkout's shallow SHA fetch creates a local lightweight tag; retrieve the actual tag object. - git fetch --force origin refs/tags/v0.1.16:refs/tags/v0.1.16 - test "$(git rev-parse 'v0.1.16^{commit}')" = "$GITHUB_SHA" - test "$(git describe --tags --exact-match HEAD)" = v0.1.16 - test "$(git cat-file -t refs/tags/v0.1.16)" = tag - gh release create v0.1.16 --draft --verify-tag --title 'SQLX 0.1.16' --notes-file docs/release-notes.md dist/*.zip dist/manifest.json dist/SHA256SUMS dist/release-version.txt - gh release edit v0.1.16 --draft=false --latest + git fetch --force origin refs/tags/v0.1.17:refs/tags/v0.1.17 + test "$(git rev-parse 'v0.1.17^{commit}')" = "$GITHUB_SHA" + test "$(git describe --tags --exact-match HEAD)" = v0.1.17 + test "$(git cat-file -t refs/tags/v0.1.17)" = tag + gh release create v0.1.17 --draft --verify-tag --title 'SQLX 0.1.17' --notes-file docs/release-notes.md dist/*.zip dist/manifest.json dist/SHA256SUMS dist/release-version.txt + gh release edit v0.1.17 --draft=false --latest npm: needs: [assemble] if: github.event_name == 'push' || inputs.publish @@ -143,7 +143,7 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} run: | - test "$GITHUB_REF_NAME" = v0.1.16 + test "$GITHUB_REF_NAME" = v0.1.17 name=$(node -p 'require("./package.json").name') version=$(node -p 'require("./package.json").version') test "$version" = "${GITHUB_REF_NAME#v}" @@ -157,7 +157,7 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} run: | - test "$GITHUB_REF_NAME" = v0.1.16 + test "$GITHUB_REF_NAME" = v0.1.17 for package in dsh pi; do name=$(node -p "require('./${package}/package.json').name") version=$(node -p "require('./${package}/package.json').version") diff --git a/Cargo.lock b/Cargo.lock index d75db07..d97880c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2420,7 +2420,7 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "ottermind-sqlx" -version = "0.1.16" +version = "0.1.17" dependencies = [ "aes-gcm", "anyhow", @@ -3375,7 +3375,7 @@ dependencies = [ [[package]] name = "sqlx-driver-duckdb" -version = "0.1.16" +version = "0.1.17" dependencies = [ "anyhow", "base64 0.22.1", @@ -3386,7 +3386,7 @@ dependencies = [ [[package]] name = "sqlx-driver-mongodb" -version = "0.1.16" +version = "0.1.17" dependencies = [ "anyhow", "base64 0.22.1", @@ -3398,7 +3398,7 @@ dependencies = [ [[package]] name = "sqlx-driver-mysql" -version = "0.1.16" +version = "0.1.17" dependencies = [ "anyhow", "base64 0.22.1", @@ -3410,7 +3410,7 @@ dependencies = [ [[package]] name = "sqlx-driver-postgres" -version = "0.1.16" +version = "0.1.17" dependencies = [ "anyhow", "base64 0.22.1", @@ -3428,7 +3428,7 @@ dependencies = [ [[package]] name = "sqlx-driver-redis" -version = "0.1.16" +version = "0.1.17" dependencies = [ "anyhow", "base64 0.22.1", @@ -3440,7 +3440,7 @@ dependencies = [ [[package]] name = "sqlx-driver-sqlite" -version = "0.1.16" +version = "0.1.17" dependencies = [ "anyhow", "base64 0.22.1", @@ -3451,7 +3451,7 @@ dependencies = [ [[package]] name = "sqlx-protocol" -version = "0.1.16" +version = "0.1.17" dependencies = [ "anyhow", "serde", @@ -3460,7 +3460,7 @@ dependencies = [ [[package]] name = "sqlx-ui" -version = "0.1.16" +version = "0.1.17" dependencies = [ "anyhow", "axum", diff --git a/Cargo.toml b/Cargo.toml index a729d2f..09c0753 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "2" members = ["crates/protocol", "crates/cli", "crates/ui", "drivers/mysql", "drivers/postgres", "drivers/redis", "drivers/mongodb", "drivers/sqlite", "drivers/duckdb"] [workspace.package] -version = "0.1.16" +version = "0.1.17" edition = "2021" rust-version = "1.95" license-file = "LICENSE" diff --git a/README.md b/README.md index e44f2ed..7208767 100644 --- a/README.md +++ b/README.md @@ -397,7 +397,7 @@ For Oracle and SQL Server, build the JDBC worker and place its driver JARs along ```sh mvn -B -f java/jdbc/pom.xml package -cp java/jdbc/target/sqlx-jdbc-0.1.16.jar target/release/sqlx-jdbc.jar +cp java/jdbc/target/sqlx-jdbc-0.1.17.jar target/release/sqlx-jdbc.jar curl -fL https://repo.maven.apache.org/maven2/com/oracle/database/jdbc/ojdbc11/23.6.0.24.10/ojdbc11-23.6.0.24.10.jar -o target/release/ojdbc.jar curl -fL https://repo.maven.apache.org/maven2/com/microsoft/sqlserver/mssql-jdbc/12.10.1.jre11/mssql-jdbc-12.10.1.jre11.jar -o target/release/mssql-jdbc.jar ``` @@ -406,7 +406,7 @@ On Windows PowerShell: ```powershell mvn -B -f java/jdbc/pom.xml package -Copy-Item java/jdbc/target/sqlx-jdbc-0.1.16.jar target/release/sqlx-jdbc.jar +Copy-Item java/jdbc/target/sqlx-jdbc-0.1.17.jar target/release/sqlx-jdbc.jar Invoke-WebRequest 'https://repo.maven.apache.org/maven2/com/oracle/database/jdbc/ojdbc11/23.6.0.24.10/ojdbc11-23.6.0.24.10.jar' -OutFile target/release/ojdbc.jar Invoke-WebRequest 'https://repo.maven.apache.org/maven2/com/microsoft/sqlserver/mssql-jdbc/12.10.1.jre11/mssql-jdbc-12.10.1.jre11.jar' -OutFile target/release/mssql-jdbc.jar ``` diff --git a/docs/release-notes.md b/docs/release-notes.md index 9fe1bbd..95d9ce4 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -1,26 +1,26 @@ -SQLX 0.1.16 imports saved connections from another tool in one call, and keeps every credential off the command line. +SQLX 0.1.17 connects to eight more databases, four of them with a driver you install once from the vendor. -## New +## New engines -- `sqlx datasource import` reads a versioned JSON document from `--stdin` or `--file ` and stores every connection in one write. Entries merge by name: an unknown name is added, a known name is updated in place and keeps its datasource ID, and nothing is ever removed. -- Each entry is validated on its own, so an engine SQLX does not speak, or a connection missing the fields its engine needs, is reported in `skipped` with a reason instead of failing the whole document. Every entry carries the same connection object `--connection-stdin` accepts. -- `--dry-run` validates and reports without storing anything, and `--strict` refuses the entire document when any entry is invalid, so a scripted migration never half-applies. Catalogues arrive on standard input, or from a file for callers that cannot pipe. -- `examples/import-connections.json` is a runnable starting point — PostgreSQL, MySQL and a local SQLite file — and a contract test imports it on every build, so the document format cannot drift unnoticed. -- The Skill gained a bulk-import recipe in `references/connections.md`, for agents that are handed a connection list instead of entering connections one by one. +- Presto, Hive, Apache Kylin and XuguDB join the engines whose driver ships with the release. Their JDBC components download like Oracle's or SQL Server's, and each one carries what its driver needs: Presto and Kylin their own dependencies, Hive its standalone driver and logging binding. +- IBM Db2, IBM Informix, SUNDB and GBase 8s connect with a driver their vendor does not allow SQLX to redistribute. `sqlx driver add --type --jar ` installs the jar you obtained: it checks that the jar really carries the engine's driver class, stores it in `/drivers//`, and every later command loads it. `sqlx driver list` shows where each engine's driver comes from and `sqlx driver remove --type ` takes it back. Running a statement without a driver fails before anything is downloaded and names the command to run. +- A jar you provide is loaded before the released one it replaces, so a newer vendor driver works for any engine without waiting for a release. + +## New in the JDBC worker + +- A driver that does not implement `isValid` or `getMoreResults` no longer turns a working statement into an error: GBase 8s reports both as a plain `SQLException`, and only a driver that says the method is unsupported ends the call early. +- A driver that prints to standard output while answering a query no longer corrupts the event stream, which is how Kylin's Avatica client behaved; the CLI reports such a line on standard error, with credentials redacted, and keeps reading. +- The Informix-derived engines receive their server instance and client locale in the URL, and the Kylin component carries the JAXB runtime that Java 11 removed from the JDK. ## Availability -- The DeepSeek Harness and Pi packages are published on npm: `dsh plugin --profile add @ottermind/sqlx-dsh` and `pi install npm:@ottermind/sqlx-pi`. Both install the `sqlx` CLI themselves when it is missing, so adding the plugin is the only setup step. -- The Codex and Claude Code plugins install from the `plugins` branch: `codex plugin marketplace add OtterMind/sqlx@plugins` and `claude plugin marketplace add OtterMind/sqlx@plugins`, then add `sqlx@ottermind`. +- The DeepSeek Harness and Pi packages are published on npm: `dsh plugin --profile add @ottermind/sqlx-dsh` and `pi install npm:@ottermind/sqlx-pi`. Both install the `sqlx` CLI themselves when it is missing. +- The Codex and Claude Code plugins install from the `plugins` branch: `codex plugin marketplace add OtterMind/sqlx@plugins` and `claude plugin marketplace add OtterMind/sqlx@plugins`, then add `sqlx@ottermind`. Their task description now names the new engines. ## Upgrading From SQLX 0.1.2 or later, run `sqlx update check`, `sqlx update install`, and `sqlx update status`. Versions 0.1.0 and 0.1.1 need the [README installer](https://github.com/OtterMind/sqlx#install-the-cli) first. -CLI updates preserve running UI services and the selected plugin, saved datasources and stored results; downloaded components are cached per version and reused, so an upgrade only fetches components that changed. Update managed Skills separately with `sqlx skill update`. The 0.1.16 Skill still requires CLI 0.1.15 or newer, and only the bulk import needs 0.1.16. - -The Skill's approval rule constrains the Agent workflow only. SQLX itself still executes the supplied command unchanged, and an explicit result refresh still reruns the complete original batch, including any writes. - -Prebuilt packages are available for macOS ARM64/x64, Linux ARM64/x64, and Windows x64. macOS executables are Developer ID signed and notarized. See LICENSE and NOTICE for license conditions. +CLI updates preserve running UI services and the selected plugin, saved datasources and stored results; downloaded components are cached per version and reused, so an upgrade only fetches components that changed. Update managed Skills separately with `sqlx skill update`. The 0.1.17 Skill is published with a `>=0.1.17, <0.2.0` CLI requirement, so update the CLI before the Skill; an older Skill keeps working with the older CLI it was installed with. -**Full Changelog**: https://github.com/OtterMind/sqlx/compare/v0.1.15...v0.1.16 +**Full Changelog**: https://github.com/OtterMind/sqlx/compare/v0.1.16...v0.1.17 diff --git a/integrations/claude/plugins/sqlx/.claude-plugin/plugin.json b/integrations/claude/plugins/sqlx/.claude-plugin/plugin.json index 650c180..12ece90 100644 --- a/integrations/claude/plugins/sqlx/.claude-plugin/plugin.json +++ b/integrations/claude/plugins/sqlx/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "sqlx", - "description": "List saved OtterMind SQLX datasources, test connections, run SQL against MySQL, MariaDB, TiDB, GreatSQL, OceanBase, PostgreSQL, CockroachDB, YugabyteDB, openGauss, Oracle, SQL Server, ClickHouse, Trino, StarRocks, Apache Doris, TDengine, Dameng, KingbaseES, Presto, Hive, Apache Kylin, XuguDB, Db2, Informix, SUNDB and GBase 8s, run Redis commands and MongoDB command documents, and open local result pages. Credentials stay in the SQLX data directory. Requires the sqlx CLI (0.1.16+) through the plugin launcher.", - "version": "0.1.16", + "description": "List saved OtterMind SQLX datasources, test connections, run SQL against MySQL, MariaDB, TiDB, GreatSQL, OceanBase, PostgreSQL, CockroachDB, YugabyteDB, openGauss, Oracle, SQL Server, ClickHouse, Trino, StarRocks, Apache Doris, TDengine, Dameng, KingbaseES, Presto, Hive, Apache Kylin, XuguDB, Db2, Informix, SUNDB and GBase 8s, run Redis commands and MongoDB command documents, and open local result pages. Credentials stay in the SQLX data directory. Requires the sqlx CLI (0.1.17+) through the plugin launcher.", + "version": "0.1.17", "author": { "name": "OtterMind" }, diff --git a/integrations/claude/plugins/sqlx/runtime.json b/integrations/claude/plugins/sqlx/runtime.json index d1d1254..6dcac3d 100644 --- a/integrations/claude/plugins/sqlx/runtime.json +++ b/integrations/claude/plugins/sqlx/runtime.json @@ -1,5 +1,5 @@ { - "plugin_version": "0.1.16", - "cli_min_version": "0.1.16", + "plugin_version": "0.1.17", + "cli_min_version": "0.1.17", "mcp_protocol": 1 } diff --git a/integrations/codex/plugins/sqlx/.codex-plugin/plugin.json b/integrations/codex/plugins/sqlx/.codex-plugin/plugin.json index 6a30836..edd3510 100644 --- a/integrations/codex/plugins/sqlx/.codex-plugin/plugin.json +++ b/integrations/codex/plugins/sqlx/.codex-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "sqlx", - "version": "0.1.16", - "description": "List saved OtterMind SQLX datasources, test connections, run SQL against MySQL, MariaDB, TiDB, GreatSQL, OceanBase, PostgreSQL, CockroachDB, YugabyteDB, openGauss, Oracle, SQL Server, ClickHouse, Trino, StarRocks, Apache Doris, TDengine, Dameng, KingbaseES, Presto, Hive, Apache Kylin, XuguDB, Db2, Informix, SUNDB and GBase 8s, run Redis commands and MongoDB command documents, and open local result pages. Credentials stay in the SQLX data directory. Requires the sqlx CLI (0.1.16+) through the plugin launcher.", + "version": "0.1.17", + "description": "List saved OtterMind SQLX datasources, test connections, run SQL against MySQL, MariaDB, TiDB, GreatSQL, OceanBase, PostgreSQL, CockroachDB, YugabyteDB, openGauss, Oracle, SQL Server, ClickHouse, Trino, StarRocks, Apache Doris, TDengine, Dameng, KingbaseES, Presto, Hive, Apache Kylin, XuguDB, Db2, Informix, SUNDB and GBase 8s, run Redis commands and MongoDB command documents, and open local result pages. Credentials stay in the SQLX data directory. Requires the sqlx CLI (0.1.17+) through the plugin launcher.", "author": { "name": "OtterMind" }, diff --git a/integrations/codex/plugins/sqlx/runtime.json b/integrations/codex/plugins/sqlx/runtime.json index d1d1254..6dcac3d 100644 --- a/integrations/codex/plugins/sqlx/runtime.json +++ b/integrations/codex/plugins/sqlx/runtime.json @@ -1,5 +1,5 @@ { - "plugin_version": "0.1.16", - "cli_min_version": "0.1.16", + "plugin_version": "0.1.17", + "cli_min_version": "0.1.17", "mcp_protocol": 1 } diff --git a/integrations/dsh/package.json b/integrations/dsh/package.json index 197aee1..0b0dcb1 100644 --- a/integrations/dsh/package.json +++ b/integrations/dsh/package.json @@ -1,6 +1,6 @@ { "name": "@ottermind/sqlx-dsh", - "version": "0.1.16", + "version": "0.1.17", "description": "OtterMind SQLX tools for DeepSeek Harness: list datasources, test connections, execute SQL and open local result pages.", "type": "module", "main": "lib/index.js", diff --git a/integrations/pi/package.json b/integrations/pi/package.json index e9ad5d3..7b276de 100644 --- a/integrations/pi/package.json +++ b/integrations/pi/package.json @@ -1,6 +1,6 @@ { "name": "@ottermind/sqlx-pi", - "version": "0.1.16", + "version": "0.1.17", "description": "OtterMind SQLX tools for the Pi coding agent: list datasources, test connections, execute SQL and open local result pages.", "keywords": [ "pi-package", diff --git a/java/jdbc/pom.xml b/java/jdbc/pom.xml index 270a5c6..86148ae 100644 --- a/java/jdbc/pom.xml +++ b/java/jdbc/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - ai.ottermind.sqlxsqlx-jdbc0.1.16 + ai.ottermind.sqlxsqlx-jdbc0.1.17 17UTF-8 com.fasterxml.jackson.corejackson-databind2.18.6 diff --git a/packages/npm-installer/package.json b/packages/npm-installer/package.json index 54f5ec3..21f4853 100644 --- a/packages/npm-installer/package.json +++ b/packages/npm-installer/package.json @@ -1,6 +1,6 @@ { "name": "@ottermind/sqlx", - "version": "0.1.16", + "version": "0.1.17", "description": "Install or update the SQLX database CLI and its agent Skill.", "license": "LicenseRef-Chat2DB", "homepage": "https://github.com/OtterMind/sqlx#readme", diff --git a/scripts/manifest.py b/scripts/manifest.py index 539cc31..35c258e 100644 --- a/scripts/manifest.py +++ b/scripts/manifest.py @@ -10,7 +10,7 @@ def load_shared(): return module package_shared=load_shared() PLATFORMS=['macos-arm64','macos-x64','windows-x64','linux-arm64','linux-x64'] -DEFAULT_VERSION='0.1.16' +DEFAULT_VERSION='0.1.17' def required_components(): """Exactly the components the packaging scripts emit: per-platform plus once-for-all.""" per_platform=set(package.PLATFORM_KINDS)|set(package_shared.PLATFORM_KINDS) diff --git a/scripts/package-shared.py b/scripts/package-shared.py index a465168..dc4fdd7 100644 --- a/scripts/package-shared.py +++ b/scripts/package-shared.py @@ -68,7 +68,7 @@ def get(url): if attempt==2:raise time.sleep(attempt+1) def main(): - p=argparse.ArgumentParser();p.add_argument('--version',default='0.1.16');p.add_argument('--output',type=Path,default=ROOT/'dist');a=p.parse_args();a.output.mkdir(parents=True,exist_ok=True) + p=argparse.ArgumentParser();p.add_argument('--version',default='0.1.17');p.add_argument('--output',type=Path,default=ROOT/'dist');a=p.parse_args();a.output.mkdir(parents=True,exist_ok=True) records={};base=f'https://github.com/OtterMind/sqlx/releases/download/v{a.version}/' def add(name,entries,entrypoint,version=None): # Every component must be declared above, so the release manifest gate stays in sync diff --git a/scripts/package.py b/scripts/package.py index 2eded60..f44f7a2 100644 --- a/scripts/package.py +++ b/scripts/package.py @@ -11,7 +11,7 @@ def archive(output,files): for source,name in files:z.write(source,name) return hashlib.sha256(output.read_bytes()).hexdigest() def main(): - p=argparse.ArgumentParser();p.add_argument('--platform',required=True);p.add_argument('--version',default='0.1.16');p.add_argument('--bin-dir',type=Path,default=ROOT/'target/release');p.add_argument('--output',type=Path,default=ROOT/'dist');a=p.parse_args() + p=argparse.ArgumentParser();p.add_argument('--platform',required=True);p.add_argument('--version',default='0.1.17');p.add_argument('--bin-dir',type=Path,default=ROOT/'target/release');p.add_argument('--output',type=Path,default=ROOT/'dist');a=p.parse_args() a.output.mkdir(parents=True,exist_ok=True);records={} suffix='.exe' if a.platform.startswith('windows-') else '' for kind,binary in BINARIES.items(): diff --git a/tests/updates.py b/tests/updates.py index 5da0b87..04a8a18 100644 --- a/tests/updates.py +++ b/tests/updates.py @@ -14,7 +14,7 @@ import zipfile ROOT = Path(__file__).resolve().parents[1] -CURRENT = "0.1.16" +CURRENT = "0.1.17" NEXT = "0.1.99" SUFFIX = ".exe" if os.name == "nt" else "" NAME = "sqlx" + SUFFIX