Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions .github/workflows/packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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}"
Expand All @@ -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")
Expand Down
18 changes: 9 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```
Expand All @@ -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
```
Expand Down
30 changes: 15 additions & 15 deletions docs/release-notes.md
Original file line number Diff line number Diff line change
@@ -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 <path>` 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 <engine> --jar <path>` installs the jar you obtained: it checks that the jar really carries the engine's driver class, stores it in `<data-dir>/drivers/<engine>/`, and every later command loads it. `sqlx driver list` shows where each engine's driver comes from and `sqlx driver remove --type <engine>` 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 <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 <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
4 changes: 2 additions & 2 deletions integrations/claude/plugins/sqlx/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -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"
},
Expand Down
4 changes: 2 additions & 2 deletions integrations/claude/plugins/sqlx/runtime.json
Original file line number Diff line number Diff line change
@@ -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
}
4 changes: 2 additions & 2 deletions integrations/codex/plugins/sqlx/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -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"
},
Expand Down
4 changes: 2 additions & 2 deletions integrations/codex/plugins/sqlx/runtime.json
Original file line number Diff line number Diff line change
@@ -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
}
2 changes: 1 addition & 1 deletion integrations/dsh/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion integrations/pi/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion java/jdbc/pom.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ai.ottermind.sqlx</groupId><artifactId>sqlx-jdbc</artifactId><version>0.1.16</version>
<groupId>ai.ottermind.sqlx</groupId><artifactId>sqlx-jdbc</artifactId><version>0.1.17</version>
<properties><maven.compiler.release>17</maven.compiler.release><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>
<dependencies>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.18.6</version></dependency>
Expand Down
2 changes: 1 addition & 1 deletion packages/npm-installer/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion scripts/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion scripts/package-shared.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion scripts/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -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():
Expand Down
2 changes: 1 addition & 1 deletion tests/updates.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading