Skip to content

Releases: ajitpratap0/GoSQLX

v1.15.0: Tree API, ClickHouse 100%, Oracle Gaps, Correctness Sweep

Choose a tag to compare

@github-actions github-actions released this 14 Oct 12:32
31b5b1c

Tagged at 31b5b1c (2026-07-30). The tag points at the last commit of the v1.15.0 scope, so its date precedes the release being published (2026-10-14).

Covers everything merged between v1.14.0 and the October 2026 performance audit: the high-level Tree API, ClickHouse at 83/83 of the QA corpus, Oracle gaps, and two architect-review correctness sprints (#517, #518). Exported signatures are unchanged apart from additions; read Behavior changes before upgrading.

Behavior changes

  • Linter rules inspect nested queries: 14 built-in rules moved to ast.Walk and 6 more were reinforced, so violations inside subqueries and CTEs are now reported. Expect more findings on nested SQL. (#517)
  • Structured parser errors: 37 fmt.Errorf sites in the parser now return structured *errors.Error values with position and code, and context cancellation returns ctx.Err() directly so errors.Is(err, context.Canceled) works. *errors.Error.WithX methods now copy instead of mutating the receiver. Legacy Parse-family functions wrap the ErrSyntax/ErrTokenize/ErrTimeout/ErrUnsupportedDialect sentinels. (#517, #518)
  • parser.ValidateBytes("") returns an error, matching gosqlx.Validate(""). Snowflake stub statements (USE, COPY INTO, PUT, GET, LIST, REMOVE, CREATE STAGE/STREAM/TASK/PIPE/...) are now *ast.UnsupportedStatement instead of *ast.DescribeStatement. (#511)

Added

  • High-level Tree API in pkg/gosqlx: ParseTree(ctx, sql, opts...) returns an opaque *Tree with typed walkers (WalkSelects, WalkInserts, WalkUpdates, WalkDeletes, WalkCreateTables, WalkJoins, WalkCTEs, WalkFunctionCalls, WalkIdentifiers, WalkBinaryExpressions, generic WalkBy[T]), Tree.Rewrite and Tree.Clone. FormatTree/FormatAST format without re-parsing. Functional options WithDialect, WithStrict, WithTimeout, WithRecovery and WithMaxBytes replace the combinatorial ParseWith* helpers, which remain. ParseReader/ParseReaderMultiple read from an io.Reader, bounded by WithMaxBytes; errors.Is(err, gosqlx.ErrTooLarge) matches when the limit is exceeded. (#517, #518)
  • Dialect-aware gosqlx.SplitStatements(sql, dialect): splits a script on top-level ;, honouring PostgreSQL dollar quoting and E-strings, nested block comments, MySQL backticks and SQL Server brackets. (#518)
  • One-call gosqlx.Lint, gosqlx.Analyze and error helpers: Lint(sql) runs all 30 built-in rules, Analyze(sql) reports basic optimization hints and query complexity, and ErrorCode, ErrorLocation and ErrorHint unwrap structured error details through fmt.Errorf wrapping. (#512)
  • pkg/sql/dialect: typed Dialect and a Capabilities struct with feature flags, exposed through Parser.DialectTyped(), Parser.Capabilities() and Parser.Is<Dialect>() helpers. (#517, #518)
  • .gosqlx.yml linter configuration (pkg/linter/config): YAML loader with rule enable/disable, severity overrides and ignore globs. (#517)
  • keywords.Conflicts(): reports keyword registrations that collide across dialects; 11 silent conflicts were resolved. (#517)
  • ast.UnsupportedStatement and AST.HasUnsupportedStatements(): parse-only Snowflake stubs are now their own node type, and the formatter emits -- UNSUPPORTED: <raw SQL> for them instead of corrupt SQL. (#511)
  • EXTRACT(field FROM expr) parses. (#511)
  • ClickHouse at 83/83 of the QA corpus: ARRAY JOIN / LEFT ARRAY JOIN (new ArrayJoinClause), scalar CTEs (WITH <expr> AS <name>), CREATE MATERIALIZED VIEW with ENGINE/TO, CREATE TABLE ... AS <source> ENGINE = ..., numeric SAMPLE arguments with OFFSET, and LIMIT offset, count. (#513)
  • Named WINDOW clause (SQL:2003): WINDOW w AS (PARTITION BY a ORDER BY b). (#513)
  • Oracle compatibility: ROWNUM/ROWID/LEVEL/SYSDATE pseudo-columns with implicit aliases, PIVOT/UNPIVOT IN lists with AS aliases, and backslashes treated literally in string literals outside MySQL/PostgreSQL. (#513)
  • SQL() for PragmaStatement, ShowStatement, DescribeStatement and ReplaceStatement. (#513)
  • ast.PoolLeakCount(): counts work-queue entries dropped while releasing expressions. (#517)

Changed

  • Deprecations: pkg/sql/monitor is deprecated in favour of pkg/metrics. The legacy parser APIs Parse([]token.Token), ParseFromModelTokensWithPositions and ConversionResult.PositionMapping are scheduled for removal in v2.0. (#511)
  • pkg/sql/ast source split: ast.go and pool.go were split into statement, expression, clause and release files. No declarations changed. (#518)

Fixed

  • Pool leaks: PutSelectStatement released only some pooled fields, large IN lists overflowed the PutExpression work queue, and subqueries inside IN/EXISTS/ANY/ALL/array constructors were never released. (#517, #518)
  • Children() coverage: 14 AST node types returned no children despite holding nodes, so Walk/Inspect skipped them. (#517)
  • LSP: statement dispatch uses a type switch instead of %T string matching, and documentSymbol returns real ranges instead of line 0 to EOF. (#517)
  • Oracle and ClickHouse parsing: CONNECT BY / IS NULL is no longer misread as a CTE, SETTINGS and numeric SAMPLE are no longer consumed as table aliases, and the SQL Server OUTPUT clause on INSERT parses in every dialect. (#513)
  • gosqlx.ParseBytes passes bytes straight to the tokenizer, and seven previously skipped extraction cases (CASE, CAST, IN, BETWEEN, EXTRACT, recursive CTEs) are fixed. (#511)

Security

  • Metrics error counters are bounded: error statistics were keyed by err.Error(), an unbounded map that could exhaust memory. They are now counted per error code. (#517)
  • Trivy findings: golang.org/x/crypto raised to v0.54.0 and brace-expansion pinned to ^5.0.8 in the VS Code extension. (#528)

Internal

  • CI: performance-regression and fuzz-regression jobs, codecov.yml thresholds, and the bodyclose/noctx linters (#512); a CI gate against new p.dialect == comparisons (#518); race tests run through task test:race with a separate CGO task test:cbinding job (#513, #517).
  • Website: site revamp, light-mode fixes and animations (#514, #515, #516).
  • Docs: version and rule-count sweep (#510); integrations bumped to v1.14.0 (#509).
Commit list (GoReleaser)

GoSQLX v1.15.0

High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.

Changelog

New Features

  • 70f891e feat(website): Motion animation system + interactive polish (#516)
  • 463ea0a feat(website): comprehensive website revamp — performance, design, UX, new pages (#514)
  • e3bb644 feat: comprehensive project review — API, docs, and CI improvements (#512)
  • b36550f feat: v1.15.0 dialect gaps — Oracle, ClickHouse 100%, WINDOW, AST roundtrip (#513)

Bug Fixes

  • 8f449f0 fix(ast): replace DescribeStatement stubs with UnsupportedStatement, fix extraction gaps (#511)
  • 3f7f2d8 fix(docs): sweep stale version refs, add blog descriptions, update VSCode CHANGELOG (#510)
  • 2830c1c fix(security): resolve new Trivy Repository Scan CVEs
  • b46c4e7 fix(website): comprehensive light mode CSS fixes for Tailwind v4 (#515)
  • dc44163 fix: architect-review sprint 2 — all 5 sprints in one PR (#518)
  • d5a5fff fix: architect-review sprint — 11 correctness & DX defects in one sweep (#517)

Other

  • 31b5b1c Merge pull request #528 from ajitpratap0/fix/trivy-repo-scan-new-cves
  • e6a47df chore(integrations): bump to GoSQLX v1.14.0 (#509)

Documentation

Full Changelog: v1.14.0...v1.15.0

v1.14.0

Choose a tag to compare

@github-actions github-actions released this 11 Apr 19:21
be25753

GoSQLX v1.14.0

High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.

Changelog

New Features

  • a721a16 feat(advisor): add OPT-009 through OPT-020 optimization advisor rules (#453) (#464)
  • 699ae20 feat(ci): Sentry → GitHub Issues automation (#438)
  • a7ce3aa feat(ci): add OpenSSF Scorecard security analysis workflow (#443)
  • e7b4895 feat(dialect): add MariaDB + Snowflake to playground, fix WASM dialectMap, unify config validation (#432)
  • 7321908 feat(dialect): add MariaDB SQL dialect with SEQUENCE, temporal tables, and CONNECT BY (#431)
  • 7110956 feat(fingerprint): add SQL query fingerprinting and normalization (#444) (#463)
  • 43ccdf5 feat(integrations): add OpenTelemetry and GORM sub-modules (#451 #452)
  • be53bcd feat(linter): expand linter from 10 to 30 rules — safety, performance, naming (#445)
  • 88599d5 feat(p3): CLI watch registration, pool stats API, JSON function parsing (#458 #459 #460)
  • a37ed1c feat(parser): ClickHouse CODEC(...) column option (#482) (#497)
  • 132a13e feat(parser): ClickHouse ORDER BY ... WITH FILL (#482) (#493)
  • b263a1d feat(parser): ClickHouse SETTINGS, TTL, and INSERT FORMAT tail clauses (#482) (#489)
  • d065a28 feat(parser): ClickHouse WITH TOTALS, LIMIT BY, ANY/ALL JOIN, DEFAULT as identifier (#482) (#503)
  • 4e39433 feat(parser): ClickHouse nested column types and engine clauses (#482) (#488)
  • 1fd384b feat(parser): ClickHouse parametric aggregates (#482) (#487)
  • f58d935 feat(parser): LIKE ANY/ALL and ILIKE ANY/ALL for Snowflake (#483) (#500)
  • d72b4d8 feat(parser): MINUS as EXCEPT synonym in Snowflake/Oracle (#483) (#494)
  • 6318d7d feat(parser): QUALIFY clause for Snowflake/BigQuery (#483) (#490)
  • 387cca8 feat(parser): Snowflake @stage references in FROM (#483) (#505)
  • 7cf8e2f feat(parser): Snowflake COPY INTO / PUT / GET / LIST stubs (#483) (#499)
  • 30ee35d feat(parser): Snowflake CREATE STAGE/STREAM/TASK/PIPE/... stubs (#483) (#498)
  • f480288 feat(parser): Snowflake LATERAL FLATTEN and named arguments (#483) (#492)
  • 627e712 feat(parser): Snowflake MATCH_RECOGNIZE clause (#483) (#506)
  • fcfae2e feat(parser): Snowflake MINUS fix, CLUSTER BY, COPY GRANTS, CTAS (#483) (#504)
  • 9450045 feat(parser): Snowflake SAMPLE/TABLESAMPLE clause (#483) (#501)
  • 60101ec feat(parser): Snowflake USE and DESCRIBE object-kind prefixes (#483) (#491)
  • 144e3ca feat(parser): Snowflake VARIANT colon-path expressions (#483) (#496)
  • 4421fe3 feat(parser): Snowflake time-travel AT/BEFORE/CHANGES (#483) (#495)
  • 926afe4 feat(parser): TRY_CAST + IGNORE/RESPECT NULLS for Snowflake (#483) (#486)
  • 4d96d5c feat(parser): add DDL formatter, CONNECT BY, and SAMPLE clause (#450 #454 #455) (#472)
  • daea668 feat(parser): add SQL Server PIVOT/UNPIVOT clause parsing (#477)
  • 57ee598 feat(parser): support ClickHouse bare-bracket array literals (#482) (#485)
  • b4d2225 feat(schema): live DB schema introspection for Postgres, MySQL, SQLite (#448)
  • f0720d5 feat(transform): DML Transform API — SET clause and RETURNING clause (#446)
  • 96137ab feat(transform): dialect-aware SQL formatting (#479) (#507)
  • 42b44aa feat(transpiler): SQL dialect transpilation API (#449)
  • 9562968 feat(website): Phase 1 marketing — star button, social share, playground CTA, WCAG, RSS (#425)

Bug Fixes

  • 384a825 fix(ci): allow modernc.org/libc NOASSERTION license in dependency review
  • c40ea17 fix(ci): remove auto-commit WASM step — blocked by branch protection on main (#424)
  • 08b0236 fix(ci): skip testcontainers on Windows, add trivyignore for unfixable CVEs, handle glama-sync gracefully
  • 670dd7e fix(deps): upgrade opentelemetry SDK to v1.43.0 (CVE-2026-39883) (#502)
  • c50661f fix(parser): allow TABLE/PARTITION/TABLES as identifiers in ClickHouse (#480) (#481)
  • 6d5182c fix(parser): support ILIKE and PIVOT/UNPIVOT in Snowflake dialect (#484)
  • cec5acc fix(playground): move useState/useCallback above early returns to fix React error #310 (#429)
  • 04f5210 fix(wasm): commit gosqlx.wasm to git to fix production playground 404 (#423)
  • 08836bd fix(website): Vercel Analytics, Speed Insights, and CSP fixes (#433)
  • 5d54c3f fix(website): comprehensive audit fixes for UX, accessibility, security, and correctness (#440)
  • ba4e21d fix(website): mobile responsiveness improvements (#441)
  • 155da55 fix(website): suppress Sentry hydration and pushState noise (#434 #437)
  • 791b4a6 fix: resolve Sentry hydration mismatch and suppress extension noise (#439)

Other

  • be25753 chore(release): prepare v1.14.0 (#508)
  • 9dbab8e fix(vscode-extension): bump version to 1.13.0 (#422)
  • dd92a2f test(cbinding): harden C binding coverage 18% to 93% (#447)

Documentation

Full Changelog: v1.13.0...v1.14.0

v1.13.0

Choose a tag to compare

@ajitpratap0 ajitpratap0 released this 19 Mar 20:24
6c7e8d6

What's New

ClickHouse SQL Dialect — Parse ClickHouse SQL including PREWHERE, FINAL, GLOBAL IN/NOT IN, and 30+ ClickHouse-specific keywords and data types.

LSP Semantic Tokens — textDocument/semanticTokens/full with 6-type legend (keyword, identifier, number, string, operator, comment).

LSP Diagnostic Debouncing — 300ms debounce prevents excessive re-parsing on rapid typing.

Parser API Consolidation — ParseFromModelTokens is now canonical; ParseFromModelTokensWithPositions is deprecated.

See CHANGELOG.md for the full list of changes.

v1.12.1

Choose a tag to compare

@github-actions github-actions released this 15 Mar 18:18
41b2ff3

GoSQLX v1.12.1

High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.

Changelog

Bug Fixes

  • 2b4bc8a fix(website): mobile, performance, and design audit fixes (#383)

Performance

  • 78070af perf(website): fix CLS 0.382 -> target <0.1 (#384)
  • b9b0bb3 perf(website): self-host fonts + lazy AnalyzeTab for mobile 90+ (#385)

Documentation

Full Changelog: v1.12.0...v1.12.1

v1.12.0

Choose a tag to compare

@github-actions github-actions released this 15 Mar 11:01
d840a46

GoSQLX v1.12.0

High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.

Changelog

New Features

  • 94e3cf8 feat: migrate to custom domain gosqlx.dev (#380)
  • d4911e0 feat: remote MCP server on Render with smart rate limiting (#379)

Other

  • d840a46 release: v1.12.0 — custom domain, remote MCP, docs update (#381)

Documentation

Full Changelog: v1.11.1...v1.12.0

v1.11.1

Choose a tag to compare

@github-actions github-actions released this 14 Mar 20:20
b294d21

GoSQLX v1.11.1

High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.

Changelog

Bug Fixes

  • 7b9263c fix(website): add trailing slash to base path for WASM loading (#373)
  • 8ba153f fix(website): add unsafe-inline to CSP script-src for Astro inline scripts (#375)
  • 402d8b8 fix(website): comprehensive audit fixes — 19 issues across 5 categories (#374)
  • 174d150 fix(website): fix WASM loading race condition and format parsing (#371)

Other

  • d18539f design(website): typography, hero glow, feature icons, code highlighting (#372)
  • 5708707 perf+seo(website): lazy WASM loading, SEO optimization, download progress (#376)

Documentation

Full Changelog: v1.11.0...v1.11.1

v1.11.0

Choose a tag to compare

@github-actions github-actions released this 14 Mar 13:28
5f4be7c

GoSQLX v1.11.0

High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.

Changelog

New Features

  • deb1297 feat: GoSQLX product website with WASM playground (#369)

Documentation

Full Changelog: v1.10.4...v1.11.0

v1.10.4

Choose a tag to compare

@github-actions github-actions released this 13 Mar 20:40
4a5d3d6

GoSQLX v1.10.4

High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.

Changelog

Bug Fixes

  • 4a5d3d6 fix: use AST-based formatter in LSP instead of basic line indentation (#368)

Documentation

Full Changelog: v1.10.3...v1.10.4

v1.10.3

Choose a tag to compare

@github-actions github-actions released this 13 Mar 20:24
c77ea96

GoSQLX v1.10.3

High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.

Changelog

Bug Fixes

  • c77ea96 fix: accept --stdio flag in LSP and fix empty path validation (#367)

Documentation

Full Changelog: v1.10.2...v1.10.3

v1.10.2

Choose a tag to compare

@github-actions github-actions released this 13 Mar 20:01
7a895af

GoSQLX v1.10.2

High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.

Changelog

Documentation

Full Changelog: v1.10.1...v1.10.2