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.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
git fetch --force origin refs/tags/v0.1.18:refs/tags/v0.1.18
test "$(git rev-parse 'v0.1.18^{commit}')" = "$GITHUB_SHA"
test "$(git describe --tags --exact-match HEAD)" = v0.1.18
test "$(git cat-file -t refs/tags/v0.1.18)" = tag
gh release create v0.1.18 --draft --verify-tag --title 'SQLX 0.1.18' --notes-file docs/release-notes.md dist/*.zip dist/manifest.json dist/SHA256SUMS dist/release-version.txt
gh release edit v0.1.18 --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.17
test "$GITHUB_REF_NAME" = v0.1.18
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.17
test "$GITHUB_REF_NAME" = v0.1.18
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.17"
version = "0.1.18"
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.17.jar target/release/sqlx-jdbc.jar
cp java/jdbc/target/sqlx-jdbc-0.1.18.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.17.jar target/release/sqlx-jdbc.jar
Copy-Item java/jdbc/target/sqlx-jdbc-0.1.18.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
25 changes: 7 additions & 18 deletions docs/release-notes.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,15 @@
SQLX 0.1.17 connects to eight more databases, four of them with a driver you install once from the vendor.
SQLX 0.1.18 checks for updates after every invocation and follows the desktop schedule while doing it.

## New engines
## Update checks

- 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.
- 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.
- The opportunistic check no longer requires an interactive terminal. Piped and agent invocations schedule it too; it runs detached with its streams closed, so a caller sees no extra output and never waits for the network. The cached "update available" notice on standard error still appears only in an interactive session.
- Checks follow the repeating schedule the desktop applications use: 30 minutes after the first check, then 1, 2, 4 and 6 hours, and then from 30 minutes again. The round is stored with the check record, so it survives between invocations; a failed check retries after 15 minutes, and an updated CLI starts the schedule over.
- A `CI` environment variable skips the check, so build machines do not run it. `SQLX_NO_UPDATE_CHECK=1` still disables opportunistic checks everywhere; explicit update commands are unaffected.

## 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.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.
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.18 Skill is published with a `>=0.1.18, <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.16...v0.1.17
**Full Changelog**: https://github.com/OtterMind/sqlx/compare/v0.1.17...v0.1.18
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.17+) 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.18+) through the plugin launcher.",
"version": "0.1.18",
"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.17",
"cli_min_version": "0.1.17",
"plugin_version": "0.1.18",
"cli_min_version": "0.1.18",
"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.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.",
"version": "0.1.18",
"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.18+) 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.17",
"cli_min_version": "0.1.17",
"plugin_version": "0.1.18",
"cli_min_version": "0.1.18",
"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.17",
"version": "0.1.18",
"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.17",
"version": "0.1.18",
"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.17</version>
<groupId>ai.ottermind.sqlx</groupId><artifactId>sqlx-jdbc</artifactId><version>0.1.18</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.17",
"version": "0.1.18",
"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.17'
DEFAULT_VERSION='0.1.18'
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.17');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.18');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.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()
p=argparse.ArgumentParser();p.add_argument('--platform',required=True);p.add_argument('--version',default='0.1.18');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.17"
CURRENT = "0.1.18"
NEXT = "0.1.99"
SUFFIX = ".exe" if os.name == "nt" else ""
NAME = "sqlx" + SUFFIX
Expand Down
Loading