Repository navigation
Releases: ajitpratap0/GoSQLX
Release list
v1.15.0: Tree API, ClickHouse 100%, Oracle Gaps, Correctness Sweep
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.Walkand 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.Errorfsites in the parser now return structured*errors.Errorvalues with position and code, and context cancellation returnsctx.Err()directly soerrors.Is(err, context.Canceled)works.*errors.Error.WithXmethods now copy instead of mutating the receiver. LegacyParse-family functions wrap theErrSyntax/ErrTokenize/ErrTimeout/ErrUnsupportedDialectsentinels. (#517, #518) parser.ValidateBytes("")returns an error, matchinggosqlx.Validate(""). Snowflake stub statements (USE,COPY INTO,PUT,GET,LIST,REMOVE,CREATE STAGE/STREAM/TASK/PIPE/...) are now*ast.UnsupportedStatementinstead of*ast.DescribeStatement. (#511)
Added
- High-level
TreeAPI inpkg/gosqlx:ParseTree(ctx, sql, opts...)returns an opaque*Treewith typed walkers (WalkSelects,WalkInserts,WalkUpdates,WalkDeletes,WalkCreateTables,WalkJoins,WalkCTEs,WalkFunctionCalls,WalkIdentifiers,WalkBinaryExpressions, genericWalkBy[T]),Tree.RewriteandTree.Clone.FormatTree/FormatASTformat without re-parsing. Functional optionsWithDialect,WithStrict,WithTimeout,WithRecoveryandWithMaxBytesreplace the combinatorialParseWith*helpers, which remain.ParseReader/ParseReaderMultipleread from anio.Reader, bounded byWithMaxBytes;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.Analyzeand error helpers:Lint(sql)runs all 30 built-in rules,Analyze(sql)reports basic optimization hints and query complexity, andErrorCode,ErrorLocationandErrorHintunwrap structured error details throughfmt.Errorfwrapping. (#512) pkg/sql/dialect: typedDialectand aCapabilitiesstruct with feature flags, exposed throughParser.DialectTyped(),Parser.Capabilities()andParser.Is<Dialect>()helpers. (#517, #518).gosqlx.ymllinter 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.UnsupportedStatementandAST.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(newArrayJoinClause), scalar CTEs (WITH <expr> AS <name>),CREATE MATERIALIZED VIEWwithENGINE/TO,CREATE TABLE ... AS <source> ENGINE = ..., numericSAMPLEarguments withOFFSET, andLIMIT offset, count. (#513) - Named
WINDOWclause (SQL:2003):WINDOW w AS (PARTITION BY a ORDER BY b). (#513) - Oracle compatibility:
ROWNUM/ROWID/LEVEL/SYSDATEpseudo-columns with implicit aliases,PIVOT/UNPIVOTINlists withASaliases, and backslashes treated literally in string literals outside MySQL/PostgreSQL. (#513) SQL()forPragmaStatement,ShowStatement,DescribeStatementandReplaceStatement. (#513)ast.PoolLeakCount(): counts work-queue entries dropped while releasing expressions. (#517)
Changed
- Deprecations:
pkg/sql/monitoris deprecated in favour ofpkg/metrics. The legacy parser APIsParse([]token.Token),ParseFromModelTokensWithPositionsandConversionResult.PositionMappingare scheduled for removal in v2.0. (#511) pkg/sql/astsource split:ast.goandpool.gowere split into statement, expression, clause and release files. No declarations changed. (#518)
Fixed
- Pool leaks:
PutSelectStatementreleased only some pooled fields, largeINlists overflowed thePutExpressionwork queue, and subqueries insideIN/EXISTS/ANY/ALL/array constructors were never released. (#517, #518) Children()coverage: 14 AST node types returned no children despite holding nodes, soWalk/Inspectskipped them. (#517)- LSP: statement dispatch uses a type switch instead of
%Tstring matching, anddocumentSymbolreturns real ranges instead of line 0 to EOF. (#517) - Oracle and ClickHouse parsing:
CONNECT BY/IS NULLis no longer misread as a CTE,SETTINGSand numericSAMPLEare no longer consumed as table aliases, and the SQL ServerOUTPUTclause on INSERT parses in every dialect. (#513) gosqlx.ParseBytespasses 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/cryptoraised to v0.54.0 andbrace-expansionpinned to^5.0.8in the VS Code extension. (#528)
Internal
- CI: performance-regression and fuzz-regression jobs,
codecov.ymlthresholds, and thebodyclose/noctxlinters (#512); a CI gate against newp.dialect ==comparisons (#518); race tests run throughtask test:racewith a separate CGOtask test:cbindingjob (#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
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
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
GoSQLX v1.12.1
High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.
Changelog
Bug Fixes
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
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
Documentation
Full Changelog: v1.11.1...v1.12.0
v1.11.1
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
GoSQLX v1.11.0
High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.
Changelog
New Features
Documentation
Full Changelog: v1.10.4...v1.11.0
v1.10.4
GoSQLX v1.10.4
High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.
Changelog
Bug Fixes
Documentation
Full Changelog: v1.10.3...v1.10.4
v1.10.3
GoSQLX v1.10.3
High-performance SQL parsing SDK for Go with zero-copy tokenization and object pooling.
Changelog
Bug Fixes
Documentation
Full Changelog: v1.10.2...v1.10.3
v1.10.2
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