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
39 changes: 0 additions & 39 deletions .changeset/identifier-and-semantic-floors.md

This file was deleted.

12 changes: 12 additions & 0 deletions packages/browser-extension/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@ All notable changes to the browser extension are documented here. Versions match
`manifest.json`. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.3.1] - 2026-08-14

### Fixed
- Questions about structure no longer invent a database name. Without being told which database it
is connected to, the model wrote `table_schema = 'your_database_name'` and returned nothing, which
reads as an empty database rather than an error.
- `AVG(SUM(x))` is repaired instead of run. Nested aggregates are invalid in every engine.
- An apostrophe inside a value, as in `'O'Brien'`, produced only "could not parse", so the model
returned the same statement until it ran out of attempts. It is now told to double the quote.
- Per-table row counts work again. A `UNION ALL` across tables was blocked as a hallucinated column,
because each branch's columns were judged against every branch's tables.

## [0.3.0] - 2026-08-09

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion packages/browser-extension/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"manifest_version": 3,
"name": "AskSQL",
"short_name": "AskSQL",
"version": "0.3.0",
"version": "0.3.1",
"description": "Ask your database questions in plain language. Read-only by design, zero telemetry. Query files in-browser or your AskSQL server.",
"minimum_chrome_version": "116",
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk17oLrOl3oNPAgteUmUQDhUJJo+lxrQDt7baBBxmyQ3w3nE1g7IOZVGtq6q+gItzvs8aJAe+dHKanZynRWJfeK8zqCiBNDzyMqnRpAMOOtvKlJJOTqe9N9Lj/RJgxRgfylPnYJoPNXMAPd2y4ceeJX6yj0GpTPiS9AIfTO6p6WXB9YGWl5gdwjhGuYEAB+S7vD+M8yaCCn8C1b2+ne0yboTf/3nUyh6XysrAPafNCMlUbU1qBjAQGNJgXdsbRtWfaIbKorKhN4tWgsc3SsXZBdIxXsz/oL3EMzspjWjTEIrf/n5p1q3kNJ+SQ40SunWXdjDY4q/LnPnGmQFCUona7wIDAQAB",
Expand Down
2 changes: 1 addition & 1 deletion packages/browser-extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "asksql-browser-extension",
"private": true,
"type": "module",
"version": "0.3.0",
"version": "0.3.1",
"description": "AskSQL for Chromium browsers (Edge + Chrome): zero-backend DuckDB-WASM file chat and @asksql/server sidecar mode in a Manifest V3 side panel.",
"scripts": {
"fetch-duckdb-extensions": "node scripts/fetch-duckdb-extensions.mjs",
Expand Down
40 changes: 40 additions & 0 deletions packages/core/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,45 @@
# @asksql/core

## 0.6.3

### Patch Changes

- 8582dc9: Quote the identifiers a database would not read back as itself. A mixed-case Postgres schema failed
every query, because an unquoted name folds to lower case and resolves to nothing; Oracle folds the
other way, and MySQL on Linux compares table names case-sensitively. Table and column names are now
quoted from the catalog before the query is validated. A name that is already correct is left
untouched, so MySQL output is unchanged, and a name spelled two ways across the catalog is skipped
rather than guessed. A table named like a parser keyword, such as `order` or `Nulls`, also works now:
the bare form could not be parsed at all and the question failed after three attempts.

Reserved words now come from each database itself, through `pg_get_keywords()`,
`information_schema.KEYWORDS`, `V$RESERVED_WORDS` and `duckdb_keywords()`, rather than one shared list
that applied MySQL's rules to Postgres and missed most of MySQL's own: MySQL reserves 262 words where
the shared list had about a hundred. Regenerate with `node tools/generate-sql-keywords.mjs`.

Quoting knows where a word is syntax rather than a name, so `CAST(x AS DATE)` and
`EXTRACT(MONTH FROM d)` are left alone, and a CTE is still recognised once its name is quoted.

When a database rejects a name, the corrected query is derived from the catalog rather than from a
second model call, and the table repair names the closest match it already knew.

Tell the model which database and schema it is connected to. Without that it wrote
`table_schema = 'your_database_name'` against `information_schema` and returned nothing at all, which
reads as an empty database rather than an error. Structure questions also get a correct catalog query
for the engine to build on.

Say what is actually wrong when a statement will not parse. An apostrophe inside a value, as in
`'O'Brien'`, only produced "could not parse", so the model returned the same statement until it ran
out of attempts; it is now told to double the quote.

Reject `AVG(SUM(x))` before it reaches the database. Nested aggregates are invalid everywhere, so the
query is repaired rather than run and failed.

Fix two false alarms. A `UNION ALL` of per-table counts was blocked as a hallucinated column, because
each branch's columns were judged against every branch's tables; per-table row counts now work. Index
columns arrived already quoted from introspection and were quoted a second time, so every prompt
carried `"""ColumnName"""`.

## 0.6.2

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@asksql/core",
"version": "0.6.2",
"version": "0.6.3",
"description": "AskSQL engine: schema catalog, AST SQL guard, prompt pipeline, LLM orchestration. Zero database drivers.",
"type": "module",
"main": "./dist/index.js",
Expand Down