Skip to content

Latest commit

 

History

History
231 lines (154 loc) · 22 KB

CHANGELOG.md

File metadata and controls

231 lines (154 loc) · 22 KB

Changelog

0.10.0 (2026-11-12)

Features

  • syntax: check the head and option lists of Snowflake statements kept as text (48f2895)

Bug Fixes

  • syntax: name DELETE USING subqueries, semantic views and FIRST/LAST join aliases as what they are (506cc2e)

0.9.0 (2026-11-12)

Features

  • syntax: check Snowflake class instance commands against their grammar (8ace8c0)
  • syntax: parse EXECUTE DCM PROJECT plan, deploy and preview (23aae47)

Bug Fixes

  • syntax: keep DCM names and anonymous procedure return nullability in the tree (24c23aa)
  • syntax: refuse a null-input clause on a Snowflake handler-language anonymous procedure (4e6a694)

0.8.0 (2026-11-12)

Features

  • syntax: build Snowflake semantic views as nodes (45d2ebb)
  • syntax: check Snowflake ALTER VIEW properties against their grammar (ad4c296)
  • syntax: check Snowflake streams against their grammar (2837449)
  • syntax: check Snowflake views and materialized views against their grammar (bd58df1)

Bug Fixes

  • semantics: give every select item its range through each dialect's strict parser (8e7bfdc)
  • syntax: read a Snowflake view's column list after its properties (344755e)
  • syntax: read every Snowflake stream option on every source (4bd716c)
  • syntax: refuse Snowflake view shapes its receipts reject (6b23d65)

0.7.0 (2026-11-12)

Features

  • convert: run FULL JOIN USING after a JOIN without ON left to right (1cbc3bd)

Bug Fixes

  • syntax-cases: render external table options and DCM environments as documented (dc5dd46)

0.6.0 (2026-11-12)

Features

  • convert: convert TOP and FETCH FIRST to LIMIT (b593f7e)
  • convert: lay out DuckDB output and helper macros with the formatter (be7425b)
  • convert: run JOIN without ON as a cross join and name more unaliased columns (8f02569)
  • format: break wide window specifications and keep one-line clauses on their header (61e7a4e)
  • format: give parenthesised groups that span lines their own lines (c8e14ba)
  • format: keep token case on request and lay out converted DuckDB SQL (4637fde)
  • semantics: give each output column its expression's byte range (f09d2e9)
  • syntax: accept Snowflake's scoped and volatile temporary tables (8d5ba02)
  • syntax: build Snowflake dynamic iceberg and interactive tables as nodes (ad40a47)
  • syntax: build Snowflake table and view governance actions as nodes (b98b9a0)
  • syntax: build Snowflake tables with policies as structured nodes (168431e)
  • syntax: check Snowflake DCM table definitions against the table grammar (d88fa2f)
  • syntax: check Snowflake event, event routing and online feature tables (2e21de6)
  • syntax: check Snowflake hybrid table indexes (38ae49e)
  • syntax: check Snowflake iceberg and dynamic tables against their grammar (498be3a)
  • syntax: check Snowflake table search optimization targets (5ac49ea)
  • syntax: parse Snowflake external tables into structured nodes (39207dd)
  • syntax: parse Snowflake iceberg column type and write default actions (b2725c8)
  • syntax: parse Snowflake iceberg partition evolution (1872de0)
  • syntax: parse Snowflake table reclustering and iceberg refresh (7d42d8b)
  • syntax: parse Snowflake's key and unnamed constraint drops and constraint renames (066cf8d)
  • syntax: read several Snowflake table properties after one SET (d3523c7)
  • syntax: read Snowflake ALTER TABLE ADD with the table grammar (5939f22)

Bug Fixes

  • check: refuse == as Snowflake does, with a new SQ0206 (86e200b)
  • diagnostics: keep node names and guessed aliases out of the unaliased column message (cd64a37)
  • format: keep a sign touching a modulo, which DuckDB reads as one operator (50734ca)
  • format: keep the extra indent of a tighter operator under a looser one (bab166c)
  • semantics: leave every set operation's outputs without a range (23c1099)
  • syntax-coverage: fail on a not-submitted entry whose case has a receipt (cde63cd)
  • syntax-receipts: count a run-database packet's repeated template once (ee638f5)
  • syntax-receipts: document the phase rules in order and keep timeouts refused (c3a5599)
  • syntax-receipts: import execute runs that have no run database (01ace82)
  • syntax-receipts: place replication not enabled for the account as semantic (e55255a)
  • syntax-receipts: place reviewed errors whose message shows Snowflake parsed the statement (bcc7178)
  • syntax-receipts: refuse a record whose connector failed before Snowflake answered (9b67a8b)
  • syntax-receipts: refuse a run-database packet carrying another run's template (722d8b8)
  • syntax: keep the parentheses of a set operation that starts a longer one (20078f8)
  • syntax: keep the parse in parse_strict so the instruction guard counts it (4f5cdfa)
  • syntax: keep the source range of Snowflake table column names (451032f)
  • syntax: name what is missing when a statement ends where an expression belongs (b802ca9)
  • syntax: parse keyword lambda parameters and nested parenthesised set operations (9e2b9b6)
  • syntax: parse Snowflake timestamp conversions with no arguments (369de78)
  • syntax: point a dangling operator before GROUP BY or ORDER BY at the clause (9d34f79)
  • syntax: read every secondary role of a Snowflake dynamic table (b18355d)
  • syntax: record a star's source range in a located parse (d91f489)
  • syntax: refuse misplaced Snowflake table actions (fb4e866)
  • syntax: require a value for every Snowflake session setting (32ddec1)

Performance Improvements

  • semantics: map output ranges in ASCII SQL without scanning it (8a2ea92)

0.5.1 (2026-11-11)

Bug Fixes

  • lint: stop panicking on a query that ends in FROM (4ae2e6a)
  • semantics: accept LAG and LEAD with one or two arguments in DuckDB (6ba17ca)
  • semantics: leave a DuckDB TIMESTAMP(p) cast untyped unless p is 6 (4f7b865)
  • semantics: let a derived table inside a LATERAL subquery read enclosing items (f9bcb57)
  • semantics: let a FROM item read only the items before it, and accept a DuckDB derived table without LATERAL that reads an earlier FROM item as implicitly lateral, as DuckDB runs it (aad9f8f)
  • semantics: stop reading a lambda parameter as an ungrouped column, so lambdas in grouped queries are no longer rejected (226a3a8)
  • semantics: type DuckDB JSON casts, to_json, AT TIME ZONE and TO_TIMESTAMP (e509581)

0.5.0 (2026-11-10)

Features

  • verify: reuse the judgements of unchanged cases and judge cases in parallel (3a0068f)

Bug Fixes

  • lineage: give a merged column its strongest branch's transform kind (0a86a2d)

0.4.1 (2026-11-10)

Performance Improvements

  • convert: divide wide decimals through one helper macro (3d7ce28)

0.4.0 (2026-11-10)

⚠ BREAKING CHANGES

  • config: split the user sqlquack.toml from the evidence policy

Features

  • config: split the user sqlquack.toml from the evidence policy (017327d)

Bug Fixes

  • config: keep refusing a fact under --strict when [allow] refuses it (6fc9ba1)

Performance Improvements

  • syntax: cap the token list a tokenize run reserves up front (f9f37b3)

0.3.0 (2026-11-10)

⚠ BREAKING CHANGES

  • census: --names is removed. Use --detailed for a named report and --anonymous for a report without names.
  • census: the previous anonymous counts report moves behind --detailed. --names and --assume-supported now require --detailed, and the slowest-files list appears only in detailed mode. Census now exits 1 when any file is blocked.

Features

  • census: add --anonymous for a shareable counts-only report (f94b4d9)
  • census: name the unknown relation in a name-resolution cause (c587e72)
  • census: report a diagnostic for each blocked file (fbadd64)
  • cli: explain known differences and list them or every code (9d62bf2)
  • cli: plain-English diagnostics and a one-line summary of known differences (4758180)
  • cli: quote the policy file's reason in --verbose known-difference warnings (c1ed980)
  • policy: describe all 38 known differences in plain English (101b811)
  • policy: describe known differences in plain English (c93f4ee)
  • sqlserver: read FOR SYSTEM_TIME as the table's version, its bounds a constant or a variable as SQL Server requires (0b68995)
  • sqlserver: read FOR XML, FOR JSON and FOR BROWSE, and lay out FOR XML and FOR JSON as SQLClean does (aa6da9b)
  • sqlserver: read join hints, REMOTE only after INNER, and keep them in the join keyword when laying out (fd8b0eb)
  • sqlserver: read table hints, with SQL Server's conflict rules and the hints a write target refuses (c24aa5d)
  • sqlserver: read table variables as table sources and write targets, without the hints and samples SQL Server refuses them (2c93771)
  • sqlserver: read TABLESAMPLE on a table name, after its alias and before its hints, as SQL Server does (c6bbd9c)

Bug Fixes

  • census: keep model chaining opt-in (8c25d57)
  • cli: mark differences the defaults allow only in part (eab0a1d)
  • cli: say known difference in census, review and verify output (df82e77)
  • convert: name the project's sqlquack.toml by its name, not its folder's path (affd49f)
  • coverage: refuse cited translation cases whose path has an empty, . or .. part (4dfb5fc)
  • diagnostics: say what must be true of the session, not how to change the setting (64166cc)
  • diagnostics: show a known difference's fine and wrong cases as whole sentences (e87b620)
  • distributions: compile DuckDB's ICU extension into every bundled build (5b4ee0f)
  • distributions: compile DuckDB's json extension into every bundled build (267e0b9)
  • distributions: keep DuckDB's compiled-in extensions in Linux links (f1cbdb6)
  • distributions: name DuckDB's release version in builds from its sources (cae4c1c)

Performance Improvements

  • cast a widened number literal to its wider DECIMAL only once (cfaa28d)
  • semantics: analyse a statement's lineage and findings in one pass (4da19b0)
  • semantics: cheaper per-level findings bookkeeping (5349692)
  • semantics: read a level's output aliases without copying them per projection (6be2847)
  • semantics: read each Snowflake type spelling once per thread (7013ca5)
  • semantics: reuse a level's FROM items between resolution and findings (31c42e8)
  • semantics: share a level's alias-free traces between resolution and findings (87786d3)
  • semantics: share a resolved query's column list instead of copying it (6e0f593)
  • syntax: box the star expression so every expression moves fewer bytes (c786e78)
  • syntax: check strict coverage on the parser's own tokens (73a6fff)
  • syntax: let dialect parsers inline token text reads (fe9a0ee)
  • syntax: list children without tracking their paths (6c054a0)
  • syntax: look Snowflake reserved words up instead of scanning the list (503ecee)
  • syntax: read ASCII single-character tokens and identifier quotes from a table (754664d)
  • syntax: reserve the token list once per tokenize run (2096c69)