All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- DuckDB schema-aware validation, analysis, output discovery, and lineage now
distinguish struct field access from table qualification. Direct struct
columns and struct values emitted by
UNNESTresolve their scalar field type and retain lineage to the physical source column, while genuinely unknown qualifiers remain errors. - DuckDB aggregate parsing and discovery now cover the documented 1.4 LTS
expression-level aggregate catalog and aliases consistently, including
unordered
LIST,ARG_MAX_NULL/ARG_MIN_NULL,PRODUCT,HISTOGRAM_EXACT, and the quantile and statistical aggregates. Compact query analysis classifies these calls as aggregations, aggregate-local modifiers remain intact, and existing quantile transpilation behavior is preserved. - TypeScript AST walking, transformation, cloning, and removal now recurse into
expressions nested inside serialized AST structs, including aggregate and
query
ORDER BYentries, joins, CTE bodies, and window definitions. Walker and transformer callbacks now cover the same nodes with stable parent, key, and index metadata. - SQL generation now adds the parentheses required to preserve programmatically constructed boolean and arithmetic expression trees. Native and serialized builders retain nested operator precedence and the right-hand grouping of non-associative operators such as subtraction and division.
- Rust AST consumers can use
get_output_column_names_for_dialectto discover result columns with dialect-specific name-aligned set-operation semantics, while retaining the existing leftmost-branch fallback for indeterminate output shapes.
- Schema-aware analysis and lineage now resolve unqualified columns merged by
NATURAL JOIN, including derived, chained, and outer joins, to their physical inputs and preserve their schema-derived types. Joins whose common columns cannot be established remain unexpanded. - Anonymous derived tables now receive collision-free internal aliases during schema-aware qualification, so their projections retain physical upstream lineage and type hints without renaming physical tables or restructuring set operations.
- DuckDB and Snowflake
UNION [ALL] BY NAMEoutput discovery, ordinal lineage, resolution, nullability, and compact query analysis now align branches by column name instead of position. BigQuery name-aligned set operations now supportSTRICT,INNER,LEFT,FULL [OUTER], explicitONordering, andCORRESPONDING BYnormalization with dialect-aware identifier matching. The corrected behavior is reflected across Rust, Python, C FFI, Go, WASM, and TypeScript APIs. - DuckDB
DATE_TRUNCnow infers its result from the temporal input overload: dates and timestamps produce timestamps with the appropriate timezone semantics, while intervals remain intervals. SpecializedCOALESCEnodes also infer their common argument type consistently. - Aggregate discovery now uses one shared classifier across AST helpers,
compact query analysis, semantic validation, dialect checks, OpenLineage, and
planning. DuckDB
COUNT_IF,MEDIAN, andFIRST, along with the other typed aggregate variants, are recognized consistently while scalar lookalikes and window-only functions remain excluded.
- Rust, Python, Go, and TypeScript now share one builder feature set, including scalar and named-function helpers, query clauses, all join and set-operation variants, named windows, lateral views, hints, row locks, CTAS, INSERT, UPDATE, DELETE, and conditional MERGE actions.
- The versioned builder protocol now uses a typed, immutable
{ base, operations }plan with typed operators, join kinds, and nested plans. - A shared, immutable SQLGlot-compatible builder subset is now available in
Python, Go, and TypeScript. Python exposes familiar module functions and
Expressionmethods, Go provides idiomatic plan constructors withBuild/BuildSQLterminals, and TypeScript exposes an additivecompatnamespace and@polyglot-sql/sdk/compatentry point. - The C FFI and WASM layers now expose versioned, stateless builder-plan evaluators backed by the same Rust AST implementation.
- Builder AST construction and mutation are centralized in a binding-neutral Rust engine shared by the native fluent API, serialized plans, and overlapping AST transforms.
- The existing TypeScript builder classes now adapt to the immutable shared plan; the duplicate stateful WASM builder implementation has been removed.
- Repeated Rust fluent clauses now append instead of replace. Rust callers that
need replacement can use the corresponding
*_with_optionsmethod andClauseOptions { append: false }. - Repeated list and predicate clauses append by default in every language.
Callers can request replacement with
append = falseusing each language's idiomatic options API. - The TypeScript compatibility facade uses idiomatic camelCase method names.
- BigQuery-to-ClickHouse transpilation now preserves default UTC and
microsecond semantics for supported
TIMESTAMPcalls and guards floatingSAFE_DIVIDEresults against non-finite values. Strict mode rejects dynamic or out-of-range timestamp cases, unresolved division types, and floatingROUNDoperations whose halfway behavior cannot be preserved. - Supported Snowflake temporal
TO_CHARand one-argumentTRY_TO_DOUBLEcalls now lower to ClickHouseformatDateTimeand nullable conversion functions.TRY_TO_NUMBERnumeric arguments are parsed as precision and scale, while strict mode rejects unsupported format-model conversions, decimalTRY_TO_NUMBERconversions, and SnowflakeFLATTENtable-function semantics. - Snowflake-to-ClickHouse rewrites now preserve
REGEXP_LIKEfull-string and literal-flag behavior, exact interpolatedMEDIAN, null-propagatingGREATEST/LEAST, and supported decimal rounding modes. Strict mode rejects dynamic regex parameters, unresolved median types, and incompatible floating-point rounding. - Snowflake current date/time rewrites retain supported precision in permissive
ClickHouse output. Strict mode now reports source-session dependencies on
TIMEZONEandWEEK_STARTfor current temporal values and week truncation, without introducing a source-session API or silently assuming target settings. - PostgreSQL, Redshift, and T-SQL integer division now lowers to ClickHouse
intDivwith source-compatible widths and truncation. Strict mode rejects unresolved operands, incompatible decimal scale rules, and floating division that could replace source errors with non-finite ClickHouse results, while retaining safe statically known cases. - T-SQL and Fabric
FLOATprecision now maps to the correct target width: omitted precision and values from 25 through 53 use double precision, values from 1 through 24 use single precision, andREALremains single precision. T-SQL/Fabric identity output preserves the declared precision. - PostgreSQL JSON text extraction for ClickHouse now uses nullable
JSONExtractresults, preserving the distinction between missing or JSON-null paths and present empty strings. Object paths, array indices, nested#>>paths, andJSON_EXTRACT_PATH_TEXTuse the appropriate ClickHouse path representation. - Strict ClickHouse transpilation now diagnoses null-semantic dependencies for
outer joins and empty-input-sensitive aggregates, naming the required
join_use_nulls = 1andaggregate_functions_null_for_empty = 1settings. Permissive modes do not inject settings, while count-like aggregates, inner joins, and ClickHouse identity transpilation remain unaffected. - Snowflake now treats unquoted
PRIORas an identifier outsideCONNECT BY, including bare projections and qualified column or star access. HierarchicalPRIORexpressions remain contextual in Snowflake, while Oracle retains its broader operator behavior. - Snowflake
SELECTlists now accept a trailing comma before a closing parenthesis in CTEs and derived tables. Double commas and trailing commas in function argument lists remain rejected.
- The unreleased nested
applybuilder-plan shape and stringly typed operator fields have been replaced by the final version 1 protocol without a legacy compatibility shim.
- PostgreSQL boolean values referenced by aggregate
FILTERpredicates now become valid T-SQL/Fabric predicates, including derivedBITcolumns used directly or throughAND/OR, instead of producing target error 4145. - Grouped PostgreSQL
PERCENTILE_CONTandPERCENTILE_DISCrewrites now retain unprojected grouping keys in a derived table while preserving projection aliases,DISTINCT, ordering, row limits, and collision-free generated names for T-SQL/Fabric. - PostgreSQL
VALUESoperands in nested or multi-arm set operations once again become parenthesized T-SQL/Fabric derived tables after parser canonicalization, avoiding invalidSELECT * FROM VALUES ...output. - T-SQL/Fabric binary literal parsing now accepts the valid empty
0xvalue, and negatedLIKEparse/transform/generate round trips preserve typed hexadecimal operands instead of dropping their0xprefixes. - PostgreSQL temporal
TO_CHARrewrites now handle supported named day/month tokens, .NET time separators, quoted text, and backslash-escaped literals correctly for T-SQL/Fabric. Incompatible named or escaped numeric format models remain unchanged in default mode and fail safely in strict mode. - Strict PostgreSQL-to-T-SQL/Fabric transpilation now rejects unsupported
SINH,COSH,TANH,ASINH,ACOSH, andATANHcalls instead of emitting nonexistent target functions. - Strict PostgreSQL-to-T-SQL/Fabric transpilation now rejects aggregates inside
LATERAL/APPLYqueries when an aggregate argument illegally mixes outer- and inner-scope column references, while preserving valid correlated forms. - PostgreSQL
CONCAT_WSnow preserves null-separator semantics for T-SQL/Fabric by returningNULLwhen the separator expression isNULLrather than treating it as an empty string. - Strict PostgreSQL
TO_DATErewrites now reject literal years outside the T-SQL/FabricDATErange of 1 through 9999, while retaining supported boundary values and nonliteral inputs.
- Set-operation lineage branch roots now expose structured metadata with the
operator, original zero-based branch ordinal, and
ALLflag across Rust, FFI, Python, WASM/TypeScript, and Go. - Compact query analysis classifies set-operation branches as
valueorfiltercontributions.
- OpenLineage generation now supports top-level set-operation queries. Both
UNIONinputs remain direct dependencies, while right-handEXCEPTandINTERSECTinputs use indirectFILTERtransformations. A shared input field can contain both transformations. - Rust callers that construct
LineageNodewith a struct literal must initialize the new optionalset_branchfield.
- Partial set-operation lineage no longer compresses branch positions when one branch cannot be resolved, so surviving lineage nodes retain their original ordinal.
- Column lineage can now target a zero-based output ordinal, including across
UNION,INTERSECT, andEXCEPTbranches whose output names differ. The ordinal APIs are available in Rust, Python, C, Go, WASM, and TypeScript, with schema-aware variants in every binding. - New output-column inspection APIs preserve projection order, unnamed expressions, and unresolved qualified or unqualified wildcards. Returned metadata reports whether all output ordinals are known and can expand stars when schema metadata is supplied.
- Column-resolution failures now distinguish
not_found,indeterminate, andambiguousoutcomes. Python exposesColumnResolutionError, C uses stable status codes, Go provideserrors.Is-compatible sentinels, and WASM/ TypeScript return structured failure metadata.
- Positional lineage for set operations now keeps the resolvable branches when another branch has an unresolved wildcard, while still reporting an indeterminate result when no branch can establish the requested position.
- Name-based lineage no longer guesses when duplicate output aliases make the requested name ambiguous.
- Oracle data types now have structured parsing and generation for numeric, character, temporal, interval, large-object, raw, and row-identifier types, including precision, scale, length semantics, and time-zone qualifiers. Compatible mappings are available for PostgreSQL, MySQL, T-SQL, and Fabric, while strict mode rejects lossy conversions.
- T-SQL, Fabric, MySQL, and SQLite now accept single-quoted select-list aliases
with or without
ASand emit the target dialect's identifier quoting. The syntax remains gated to dialects that support it. - PostgreSQL parsing and generation now support
SET [LOCAL | SESSION] SESSION AUTHORIZATION,RESET SESSION AUTHORIZATION, and role-membershipGRANT/REVOKEstatements without anONclause. Statement boundaries and structured object-privilege grants are preserved.
- Schema-aware type annotation and lineage now propagate scalar element types
from select-list and table-valued
UNNESTexpressions through CTEs and derived tables. Virtual aliases remain scope-local, so reused aliases in sibling CTEs cannot overwrite one another's inferred types. - MySQL 8 functional index key parts now parse and generate structurally in
table definitions,
ALTER TABLE ... ADD INDEX, and standaloneCREATE INDEXstatements. Mixed column and expression parts, prefix lengths,ASC/DESC, unique indexes, and character-set introducers are preserved instead of rejecting the DDL or replacing expressions with?. - PostgreSQL row-value equality against scalar subqueries now lowers to
T-SQL/Fabric scalar
CASEsubqueries with correct true, false, and null behavior. Zero- and multi-row cardinality, query modifiers, explicit aliases, projection counts, and generated-alias collisions are handled correctly. - CTE star expansion and lineage analysis now process every branch of nested
UNION,INTERSECT, andEXCEPTexpressions instead of only the leftmost branch, while retaining conservative behavior for recursive or unresolved references. - PostgreSQL hexadecimal
bytealiterals now lower to T-SQL/Fabric binary literals, including empty values, embedded whitespace, and values passed toSET_BIT. Strict mode rejects malformed, odd-length, or unsupported escape- format literals instead of emitting incorrect SQL. - PostgreSQL
TO_NUMBERformats containing grouping separators or positional spaces are no longer translated to unsafe T-SQL/FabricTRY_CONVERTcalls. Default mode preserves the source function and strict mode rejects the lossy conversion, while simple supported formats still useTRY_CONVERT. - T-SQL and Fabric generation now emits
LENrather thanLENGTHfor parsed length expressions, including Rust and WASM/TypeScript round trips. SEEDandREPEATABLEcan now be used as implicit table aliases in T-SQL and Fabric without breaking their existingTABLESAMPLEclause handling.- PostgreSQL
date_partsecond, millisecond, and microsecond fields over timestamp values now compose the complete seconds value when targeting T-SQL/Fabric, including fractional portions and timestamp-with-time-zone inputs. - Parenthesized joined-table groups followed by
OUTER APPLYnow reparse correctly in T-SQL and Fabric, making generated join groups round-trip safe. - PostgreSQL quantified comparisons against literal arrays now lower across
the full operator set for T-SQL/Fabric: equality and inequality use
IN/NOT IN, otherANY/ALLoperators use boolean chains, and empty arrays produce the correct constant result. Typed values and null semantics are preserved, while dynamic arrays remain rejected.
- TiDB parsing and generation now cover
AUTO_RANDOMattributes, including shard/range parameters and executable comments; distributed table options such asSHARD_ROW_ID_BITS,PRE_SPLIT_REGIONS, andAUTO_RANDOM_BASE; placement and TTL options; theirALTER TABLEforms; andSPLIT TABLEandFLASHBACK TABLEstatements. The structured AST is available consistently through the Rust, Python, C FFI, Go, WASM, and TypeScript parse/generate APIs.
- CTE-heavy lineage now indexes each scope once and traverses stable scope IDs
instead of repeatedly cloning nested CTE scope trees. The public
Scopeand lineage APIs remain unchanged, while benchmarks now cover flat, nested, and multiply referenced CTE shapes. - Strict PostgreSQL/CockroachDB-to-T-SQL/Fabric transpilation now keeps the
existing best-effort
VARCHAR(MAX)conversion for column-to-text casts whose source type is unavailable, rather than rejecting otherwise valid queries.
- PostgreSQL-family parsing now accepts parenthesized
EXPLAINoption lists, including comma-separated flags and values, while preserving parenthesized query bodies and normalizingANALYZEconsistently with the bare form. - PostgreSQL compound intervals now retain all fields and lower through
operand-aware
DATEADDchains for T-SQL/Fabric, including fractional seconds, subtraction, andTIMEwraparound. Strict mode rejects unresolved operand types and intervals that cannot be represented safely instead of emitting malformed or lossy SQL. - PostgreSQL
MAKE_TIMEnow lowers toTIMEFROMPARTSwith fractional-second precision for T-SQL/Fabric. Single-valueCONCAT/CONCAT_WScalls meet the target minimum arity, and mixed-type||operands are converted to strings before using T-SQL concatenation. - PostgreSQL SQL/JSON constructors and aggregates now translate
RETURNINGclauses to compatible T-SQL/Fabric output: native JSON return types are omitted, supported character return types use an outer cast, and unsafe types fail in strict mode.json_agg/jsonb_aggpreserve PostgreSQL null and ordering semantics while unsupported modifiers are rejected. - Nested PostgreSQL grouping sets are flattened without being mistaken for row
values, and inert
ORDER BYclauses inside unbounded set-operation arms are removed for T-SQL/Fabric. - PostgreSQL boolean predicates nested inside casts, aggregates, functions, or arithmetic now materialize as nullable scalar values before T-SQL/Fabric conversion, preserving three-valued logic.
- PostgreSQL
date_partresults now retain theirdouble precisioncontract for T-SQL/Fabric, whileEXTRACTkeeps its field-specific type. Time-based second, millisecond, microsecond, and epoch calculations preserve complete values without overflow. - PostgreSQL string semantics now map more faithfully to T-SQL/Fabric,
including deparsed
LIKE_ESCAPE, numeric-startSUBSTRING, text-cast trim sets, literalTRANSLATE, unpaddedto_hex, hexadecimal encode/decode, andSHA256/SHA512. Strict mode rejects regular-expression functions, unsupported digest widths, and other string operations without a faithful target equivalent. - PostgreSQL float-to-integer rounding now also recognizes parenthesized cast chains before applying the target-side rounding conversion.
- Snowflake string parsing and generation now round-trip doubled quotes, backslash escape sequences, control characters, dollar-quoted strings, and function-body literals without losing or double-escaping content.
- Shared AST transformations now recurse through
ALL/ANYquantified comparisons and null-safe comparison operands, preserving bottom-up transformation order across all public transform entry points.
- PostgreSQL
VALUESderived tables without explicit column aliases now gain deterministiccolumn1,column2, ... aliases when targeting T-SQL or Fabric, producing valid derived-table syntax while preserving user-provided aliases. - PostgreSQL boolean operator functions, boolean literals, logical scalar values, and known boolean-to-text casts now lower with the correct T-SQL and Fabric value semantics, including nullable predicates. Strict mode rejects column-to-text casts when the source type is unknown rather than applying an unsafe boolean assumption.
- Simple
CASE operand WHEN valueexpressions now keep theirWHENarms as scalar comparison values during T-SQL/Fabric boolean normalization, while searchedCASE WHEN predicateexpressions continue to use predicate rewriting. - PostgreSQL casts from
REAL,FLOAT4,FLOAT8, andDOUBLE PRECISIONto integer types now apply PostgreSQL-compatible rounding before the truncating T-SQL/Fabric integer cast. Numeric casts and unresolved source types retain their existing behavior. - PostgreSQL
EXTRACTanddate_partoverTIMEvalues now preserve complete fractional-second composition forSECOND,MILLISECOND,MICROSECOND, andEPOCHwhen targeting T-SQL/Fabric instead of returning only aDATEPARTcomponent. - Strict PostgreSQL-to-T-SQL/Fabric transpilation now rejects unsupported
scalar row/composite constructors, composite field access, and qualified
whole-row casts instead of emitting invalid target SQL. Valid table
VALUESconstructors and supported JSON aggregation remain accepted. - PostgreSQL
NULL::unknownandCAST(NULL AS unknown)now lower to a bareNULLfor T-SQL/Fabric. Other unresolvedunknowncasts are rejected in strict mode instead of generating a cast to a nonexistent target type.
- Shared, generated AST-child traversal infrastructure through the new internal
polyglot-sql-ast-derivecrate, including immutable and mutable child-slot metadata, path-aware traversal checks, and dedicated traversal benchmarks. - Optional Rust-core semantic validation through
ValidationOptions.semanticandvalidate_with_dialect, covering warnings W001-W004 forSELECT *, mixed aggregates withoutGROUP BY,DISTINCTwithORDER BY, andLIMITwithoutORDER BY. The same validation path is now exposed through Python, C FFI, Go, WASM, and TypeScript without changing schema-validation behavior. - A machine-readable cross-language API capability contract with verification across Rust, Python, C FFI, Go, WASM, and TypeScript.
- Project-consistency tooling and Make targets for checking release versions, public dialect metadata, active documentation, the standalone Rust example, and generated API documentation.
- CI quality gates for Rust and TypeScript formatting, scoped Clippy checks, Biome linting, consistency checks, documentation builds, benchmark compilation, and TypeScript SDK coverage summaries and artifacts.
- Focused performance and allocation benchmarks for dialect construction, AST traversal, tokenization/parsing, Python concurrency, and native release profiles, with reproducible Make targets and a benchmark report.
- Regression coverage for the new T-SQL/Fabric strict-mode capability checks and rewrites, including regex aggregate filters, row-value membership, aggregate ordering, hypothetical-set aggregates, and supported control cases.
- Cross-dialect normalization is now split into semantic modules for aggregates, collections, JSON, operators, scalar functions, statements, temporal expressions, and types while preserving the existing normalization pipeline and public API.
- Built-in dialects now share immutable tokenizer configurations. ASCII input
uses a byte cursor, unchanged parser token text references one shared SQL
source, and token guard statistics are collected during tokenization instead
of requiring a second full scan; the public owned
TokenAPI is unchanged. - Python native calls now execute directly while the GIL is detached instead
of serializing through one global worker. Published Python artifacts use a
dedicated
opt-level=2/thin-LTO profile. - Repository-built native artifacts now use the
opt-level=3native_releaseprofile. FFI/Go release artifacts useopt-level=2with thin LTO for higher query throughput while retaining unwind protection; WASM remains size-optimized. - The benchmark comparison now uses the same production Python profile as published wheels.
- TypeScript now publishes one full WASM SDK containing all supported dialects; dialect-specific Rust/WASM builds remain available through Cargo features.
- Release metadata and active documentation now consistently use version
0.6.0and canonical supported-dialect names rather than hard-coded dialect counts.
- Logical planner DAG construction now assigns globally unique preorder IDs to nested dependencies, includes every leaf node, and serializes complete plans through WASM. Previously ignored invalid-input WASM tests are active again.
- Strict PostgreSQL-to-T-SQL/Fabric transpilation now rejects unsupported
NTH_VALUE,SCALE,TRIM_SCALE,MIN_SCALE,FACTORIAL, andPG_LSNcalls;GROUPS, value-offsetRANGE, andEXCLUDEwindow frames; frames and window functions requiring a missingORDER BY;JOIN ... USING,NATURAL JOIN, unsupported base/joined-table column alias lists, and qualified whole-row aggregate arguments such asCOUNT(alias.*). - Multi-column PostgreSQL
GROUPING(...)now maps toGROUPING_ID(...)for T-SQL/Fabric,GROUP BY DISTINCTgrouping sets are expanded and deduplicated, and Fabric dropsORDER BYkeys that become constant through single-level grouping analysis. - PostgreSQL boolean aggregates used as window functions now keep
OVERon the aggregate inside the outerBITcast. ScalarBITexpressions and boolean literals are also normalized correctly in predicate contexts and nested joined-table conditions. LAGandLEADarguments now receive recursive target transformations, so numeric casts retain their precision and scale.- Nested T-SQL/Fabric
ORDER BYclauses without a row bound now receive the requiredOFFSET 0 ROWS. Unordered inert zero/NULLoffsets are removed, while retained offsets andFETCHclauses receive a neutralORDER BY (SELECT NULL)when needed. - PostgreSQL lateral joins that reference earlier comma-separated siblings now
build an explicit
CROSS JOINproduct beforeCROSS APPLY/OUTER APPLY, keeping every correlated source visible to the APPLY right-hand expression. - PostgreSQL row-value
IN (VALUES ...)andNOT IN (VALUES ...)predicates now lower toEXISTS/NOT EXISTSfor T-SQL/Fabric, including scalar boolean contexts and null-awareNOT INsemantics. Strict mode rejects mismatched row andVALUESarities. - T-SQL/Fabric ordering generation now disambiguates duplicate projected
columns before adding null-ordering expressions. PostgreSQL
ORDER BYclauses that are inert inside ordinary aggregates are removed, while window ordering and orderedSTRING_AGGsemantics remain intact. - Strict PostgreSQL-to-T-SQL/Fabric transpilation now rejects hypothetical-set
RANK,DENSE_RANK,CUME_DIST, andPERCENT_RANK; internal aggregate support functions such asFLOAT8_*andBOOL*_STATEFUNC; PostgreSQL array casts;STRING_AGGwithDISTINCT; PostgreSQL collations; and date subtraction whose column type cannot be resolved safely. - PostgreSQL
FROM ONLYdrops its unsupported inheritance modifier when targeting T-SQL/Fabric.ANY_VALUElowers toMAXfor T-SQL and remains native for Fabric. - PostgreSQL numeric
TO_CHARformat models now fail in strict T-SQL/Fabric transpilation instead of being mistaken for .NET format strings. Text-cast temporal format literals such as'YYYY-MM-DD'::textcontinue to lower to validFORMATexpressions.
- The unshipped TypeScript per-dialect package exports and build configuration;
the supported npm surface is the full
@polyglot-sql/sdkpackage. - Duplicate TypeScript-only semantic validation rules, now that basic semantic validation is implemented consistently in the Rust core.
- Expanded strict-mode regression coverage for unsupported transpilation
leftovers, including recursive CTEs, residual lateral joins, unsupported
UNNEST/EXPLODEtargets, duplicate-preserving set operations, lossy array aggregates, regex predicates, residualFETCH WITH TIES/OVERLAPS/DATE_BIN, PostgreSQL-only scalar functions, PostgreSQL JSON functions, andmaxUnsupportedoption handling. - Regression coverage for PostgreSQL-to-T-SQL/Fabric rewrites across JSON
operators and constructors, temporal functions, math/string functions,
arrays, lateral joins, window frames, row-value subqueries, aggregate
filters, ordered
STRING_AGG, ordered-set percentiles, no-op limits, interval/date arithmetic, andVALUESset-operation operands. - Regression coverage for structured PostgreSQL
PREPARE/EXECUTEparsing and PostgreSQL replication protocol command fallbacks. - Parser regression coverage for
TIMESTAMPTZ '...'andTIMESTAMPTZ(n) '...'typed literals in generic, DuckDB, and PostgreSQL parsing paths.
- Fabric and T-SQL now share more PostgreSQL compatibility rewrites while
preserving Fabric-specific type mappings such as
NVARCHARtoVARCHAR.
- PostgreSQL JSON extraction operators, path operators, JSON constructors,
json_agg/jsonb_agg, and scalarjsonb_array_elements(...)projections now transpile to valid T-SQL/Fabric JSON functions such asJSON_VALUE,JSON_QUERY,JSON_OBJECT,JSON_ARRAYAGG, andOPENJSONwhere a safe mapping exists. - Strict PostgreSQL-to-T-SQL/Fabric transpilation now rejects unsupported JSON
row shapes, array literals/subscripts/functions, PostgreSQL-only scalar
functions such as
GCD,LCM,ERF,QUOTE_LITERAL,AGE, andPG_TYPEOF, unsupported statistical aggregates, residual arrayANYsemantics, and scalar interval casts instead of emitting target SQL that would fail at runtime. - PostgreSQL regex and
SIMILAR TOexpressions now either lower to supported T-SQL/Fabric predicate forms for compatible patterns or fail in strict mode for unsupported SQL-regex patterns. - PostgreSQL temporal rewrites targeting T-SQL/Fabric now handle current
temporal niladics,
EXTRACT/date_part, typed-textdate_partfields,date_trunc, simpledate_binbuckets,to_timestamp,to_date,to_char, andformat(...)string interpolation with valid target signatures or strict-mode rejection for unsupported forms. - PostgreSQL math, string, type, and operator rewrites targeting T-SQL/Fabric
now cover
LOG/LN/LOG10,DIV,CBRT,REPEAT,CHR,OVERLAY,BTRIM,MD5,OCTET_LENGTH,BIT_LENGTH,TO_HEX, hexENCODE, simpleTO_NUMBER, approximate numeric casts, function-style type casts,ROUND(x), bitwise XOR#, absolute-value@, andMOD(...). - PostgreSQL UUID generator functions such as
gen_random_uuid(),uuid_generate_v4(), anduuidv4()now map toNEWID()for T-SQL/Fabric. - PostgreSQL-to-T-SQL/Fabric query-shape rewrites now strip unsupported CTE
materialization hints, hoist nested CTEs from derived subqueries, map
supported lateral joins to
CROSS APPLY/OUTER APPLY, preserve valid null ordering andDISTINCT ONbehavior through wrapper queries, handle positionalORDER BYsafely, and keep recursive CTE output valid by omitting the unsupportedRECURSIVEkeyword. - PostgreSQL row-value
INand equality subquery comparisons now rewrite toEXISTSpredicates for T-SQL/Fabric when arity and projection shapes are safe, including casted and wrapped subquery projections. - PostgreSQL boolean and null-safe comparison rewrites targeting T-SQL/Fabric
now distinguish predicate contexts from scalar contexts, materializing scalar
boolean results as
BITvalues while keeping predicates executable. - PostgreSQL aggregate filters, ordered
STRING_AGG, typed string-aggregate separators, and groupedPERCENTILE_CONT/PERCENTILE_DISCordered-set aggregates now lower to valid T-SQL/Fabric forms; unsupportedMODE() WITHIN GROUPfails in strict mode. - PostgreSQL
VALUESstatements andVALUESset-operation operands now wrap as derived tables for T-SQL/Fabric, avoiding invalid top-level or set-operandVALUESSQL. - PostgreSQL
LIMIT NULL,LIMIT ALL, andLIMIT (NULL)are omitted for T-SQL/Fabric, offset-only queries keep a validOFFSET ... ROWSshape, andFETCH FIRST ... WITH TIESmaps toTOP ... WITH TIESwhere supported. - PostgreSQL date/date and date/integer arithmetic now maps to
DATEDIFFor day-basedDATEADD, and common interval arithmetic including abbreviated time and month units maps to targetDATEADDcalls. - The parser now accepts
TIMESTAMPTZ '...'andTIMESTAMPTZ(n) '...'typed literals and normalizes them to explicit timestamp-with-time-zone casts, matching the behavior already available through explicitCAST(...)and PostgreSQL::TIMESTAMPTZcasts.
- Regression coverage for PostgreSQL-only scalar and JSON functions when
targeting T-SQL/Fabric strict mode, including
LPAD,RPAD,SPLIT_PART,INITCAP,TO_JSON,TO_JSONB,JSONB_AGG, andJSONB_OBJECT_AGG. - Regression coverage for PostgreSQL
SELECT DISTINCT ... ORDER BYnull ordering when targeting T-SQL/Fabric, including selected expressions, selected aliases, target-default null ordering, and unsupported unselected expressions. - Regression coverage for PostgreSQL boolean tests targeting T-SQL/Fabric,
including
IS TRUE,IS FALSE,IS NOT TRUE,IS NOT FALSE, andIS UNKNOWNin predicate and scalar-value contexts. - Regression coverage for bare boolean predicates targeting T-SQL/Fabric in
WHERE,HAVING,CASE WHEN,JOIN ... ON, nested subqueries, and CTE bodies. - Regression coverage for unsupported
EXCEPT ALLandINTERSECT ALLwhen targeting T-SQL/Fabric strict mode. - Regression coverage for PostgreSQL positional
ORDER BYordinals targeting T-SQL/Fabric, including standalone selects and wrapped set operations.
- Strict PostgreSQL-to-T-SQL/Fabric transpilation now rejects known PostgreSQL-only scalar and JSON functions instead of returning target SQL that the destination dialect cannot execute.
SELECT DISTINCT ... ORDER BYwith emulated null ordering now generates a valid T-SQL/Fabric wrapper query that projects stable internal sort keys, avoiding invalidORDER BYexpressions that are not present in theDISTINCTselect list.- PostgreSQL boolean tests now preserve three-valued logic when transpiling to
T-SQL/Fabric: negated
IS TRUE/IS FALSEpredicates retainNULLrows, scalar boolean-test outputs are materialized as definiteBITvalues, and predicate operands are not compared directly to integer literals. - Fabric now applies the same bare boolean predicate coercion as T-SQL, and
the boolean coercion transform now reaches
JOIN ... ON, nested subqueries, CTE bodies, and set-operation branches without inheriting unrelated T-SQL preprocessing behavior. - T-SQL/Fabric strict mode now rejects
EXCEPT ALLandINTERSECT ALLas unsupported duplicate-preserving set operations while keeping plainEXCEPTandINTERSECTvalid. - Positional
ORDER BYordinals targeting T-SQL/Fabric no longer produce invalid constant null-ordering CASE expressions such asCASE WHEN 1 IS NULL ...; default mode preserves the ordinal and strict mode reports unsupported positional null-ordering simulation.
- Regression coverage for PostgreSQL positional bind parameters inside
T-SQL/Fabric predicate expressions, ensuring
$1,$2, ... are rendered as executable@P1,@P2, ... placeholders outside simple projection lists.
- PostgreSQL
$npositional bind parameters now render as T-SQL/Fabric@Pnplaceholders instead of invalid$nsyntax when transpiling to those dialects.
- Configurable complexity guards for recursion-heavy parse, transpile, transform, and generation paths, including limits for SQL input size, token count, AST node count, AST depth, parenthesis nesting, and function-call nesting.
TranspileOptions.complexityGuard/complexity_guardsupport across Rust, C FFI JSON options, WASM/TypeScript, and Go, allowing callers to raise or disable individual guard limits for trusted inputs.- Regression coverage for deeply nested unary functions such as PostgreSQL
abs(abs(...))when transpiling to Fabric, including guard override coverage through Rust, C FFI, Go option encoding, and TypeScript typings. - Regression coverage for PostgreSQL lateral joins targeting T-SQL and Fabric,
including parenthesized join groups, comma-style
LATERALsources, non-trivialONpredicates, column alias preservation, and strict-mode rejection of residual unsupported lateral joins. - Regression coverage for PostgreSQL function-style type casts targeting
T-SQL and Fabric, including
numeric(...),int4(...),float8(...),bool(...),text(...), and unsafe strict-mode residuals. - Regression coverage for PostgreSQL scalar-array membership with outer
array casts targeting T-SQL and Fabric, including PostgreSQL
pg_get_querydef/ ruleutils-style= ANY((ARRAY[...])::type[])output.
- Excessively nested function-call inputs now fail with a regular
E_GUARD_FUNCTION_NESTING_DEPTH_EXCEEDEDerror instead of risking stack overflow or process aborts during parsing/transpilation. - Moderate nested unary functions now parse more reliably through stack-growth
protection and a lightweight parser fast path for common unary functions such
as
ABS,SQRT,LOWER, andUPPER. - AST-depth guarding now preserves existing behavior for deep commentless
AND/ORconnector chains that are generated iteratively, avoiding regressions in optimizer and generator stress tests. - Minimal
semantic/openlineagefeature builds no longer require the generator module for pivot suffix helpers. - PostgreSQL
JOIN LATERALandLEFT JOIN LATERALinside parenthesizedFROMgroups now transpile to valid T-SQL/FabricCROSS APPLYandOUTER APPLYinstead of emitting unsupportedJOIN LATERALSQL. - PostgreSQL comma-style
FROM t, LATERAL (...)now maps to T-SQL/FabricCROSS APPLY, and lateral joins with non-trivialONpredicates now push the predicate into a filtered APPLY right-hand derived table while preserving the user-facing lateral alias. - PostgreSQL function-style type casts now transpile to real T-SQL/Fabric
CAST(...)expressions instead of invalid type-keyword function calls such asNUMERIC(...),INT4(...), orFLOAT8(...); strict mode now rejects residual unsafe type-name calls that cannot be safely converted. - PostgreSQL
= ANY((ARRAY[...])::type[])scalar-array membership now transpiles to valid T-SQL/FabricIN (...)predicates with the outer array element type pushed down to the individual values, and strict mode now rejects residual non-subqueryANYexpressions for T-SQL/Fabric instead of returning invalid SQL.
- Regression coverage for Trino/Presto
CREATE VIEWparsing withCOMMENTbeforeSECURITY. - Regression coverage for T-SQL
VARBINARY(MAX),VARCHAR(MAX), andNVARCHAR(MAX)types across standalone datatype parsing,CREATE TABLE,CAST, and identity transpilation. - Regression coverage for updated ClickHouse
* LIKE/* ILIKEwildcard filters with trailingEXCEPTmodifiers and nested wildcard filters insidetuple(...).
- Rust verification fixtures now track SQLGlot
v30.12.0and ClickHousev26.6.1.1193-stable.
- Trino/Presto
CREATE VIEWparsing now accepts documentedCOMMENT ... SECURITY ...clause order while preserving the previously acceptedSECURITY ... COMMENT ...order. - T-SQL datatype parsing now accepts
VARBINARY(MAX)consistently with the existingVARCHAR(MAX)andNVARCHAR(MAX)handling, so casts and DDL no longer fail withExpected number. - SQLGlot identity verification compatibility for updated dialect fixtures,
including DuckDB/PostgreSQL array contained-by operators, Databricks bracketed
JSON path string keys, PostgreSQL JSON path
@?predicates, SQLite orderedON CONFLICTtargets, BigQuery adjacent string literal comments, PostgreSQL function return/property normalization, and SnowflakeUNDROP,IDENTIFIER(...)()calls, and inline table/view options. - ClickHouse parser and normalized round-trip compatibility for updated
fixtures, including escaped backticks in quoted identifiers, descending
expressions inside table-property
ORDER BY (...), wildcardLIKE/ILIKE ... EXCEPTfilters, nested wildcard filters intuple(...), and stable rawEXPLAINsubquery normalization.
- Regression coverage for strict-mode rejection of PostgreSQL regex predicates when targeting Fabric or T-SQL.
- Regression coverage for T-SQL/Fabric
DATEPARTweekday, ISO week, and timezone-offset date-part generation.
- Strict Fabric/T-SQL transpilation now rejects remaining regular-expression
predicates such as
SIMILAR TO,~,!~,~*,!~*, andREGEXP_LIKEinstead of reporting success with unsupported target SQL. - T-SQL/Fabric
DATEPARTgeneration now maps internal canonical date parts back to valid target names such asWEEKDAY,ISO_WEEK, andTZOFFSETinstead of emitting unsupported names likeDAYOFWEEK.
- Regression coverage for partial-schema
analyze_queryandlineage_with_schemacalls across Rust core, C FFI, WASM/TypeScript, Python, and Go. - Regression coverage for ordered
STRING_AGG,GROUP_CONCAT, andLISTAGGtranspilation to DuckDB.
analyze_queryandlineage_with_schemanow tolerate partial schemas by resolving known columns while preserving unknown columns as best-effort lineage facts instead of aborting the analysis withUnknown column.- DuckDB transpilation now emits ordered
STRING_AGG,GROUP_CONCAT, andLISTAGGasLISTAGG(expr, separator ORDER BY ...)instead of the unsupportedWITHIN GROUPform.
- Regression coverage for schema-backed
analyze_querylineage through nested set-operation derived tables, CTEs, andUNNESToutput aliases across Rust core, C FFI, WASM/TypeScript, Python, and Go.
analyze_querynow resolves aliased and parenthesized query-like sources when deriving source output columns, so schema-backed nestedUNION/INTERSECT/EXCEPTrelations can still trace projections back to their physical input columns.analyze_querynow recognizesUNNEST, lateral, and lateral-view virtual output aliases during schema-backed qualification, including both relation aliases and explicit output column aliases such asUNNEST(t.arr) AS u(i).
- Regression coverage for nested set-operation derived table lineage, scalar subqueries inside expression wrappers, same-select alias references, pivot/unpivot alias columns, and semi/anti join source inference across Rust core, C FFI, WASM/TypeScript, Python, and Go.
- Lineage now registers aliased query-like derived relations such as nested
UNIONexpressions inFROM, so output columns trace back to each physical source table instead of stopping at the derived relation. - Scalar subqueries wrapped in expressions such as
CASE,COALESCE,CAST,BETWEEN,IN,ANY,ALL, andEXISTSnow contribute their source-column lineage. - Same-select alias references now resolve through earlier projection expressions before column qualification, avoiding unresolved or incorrect physical-column attribution.
- Pivot and unpivot lineage now preserves alias column lists and maps renamed or generated outputs back to implicit source columns and aggregate input columns.
- Star and source inference now ignores semi/anti join right-hand inputs, preventing non-output join sources from making schema-less star lineage ambiguous.
- Regression coverage for recursive CTE, query-wrapper, set-operation, scalar-subquery, window, pivot, and unpivot lineage across Rust core, C FFI, WASM/TypeScript, Python, and Go.
- Rust verification fixtures now track SQLGlot
v30.11.0and ClickHousev26.5.2.39-stable.
- Lineage now analyzes query-bearing wrappers such as
PREPARE, CTAS,CREATE VIEW, andINSERT ... SELECTthrough their inner query instead of rejecting them as non-SELECTexpressions. - Recursive CTE lineage now terminates at the base case and preserves CTE provenance for recursive references instead of recursing indefinitely.
- Lineage now resolves parent CTEs through set-operation branches and scalar subqueries, so downstream nodes can trace back to the original base tables.
- Window-function lineage now includes dependencies from
PARTITION BY, windowORDER BY, named window definitions, ordered aggregates, andWITHIN GROUPordering. - Pivot and unpivot lineage now maps generated output/value columns back to the underlying input columns.
- SQLGlot identity verification compatibility for updated dialect fixtures,
including BigQuery
INFORMATION_SCHEMAtable qualification, ClickHouse variadicxor(...)and view schemas withNOT NULL, Databricks two-argumentDATEADD, nativeGET_JSON_OBJECT,CLUSTER BY NONE, and collated string casts. - Parser/generator round-tripping for newer dialect fixture cases, including
MySQL
ALTER TABLE ... CHANGE COLUMN, OracleTO_NUMBER(... DEFAULT ... ON CONVERSION ERROR), PostgreSQLCREATE TYPEvariants, collated data types, PostgreSQL<<->>operators, T-SQLFOR BROWSE, andNOT LIKE/NOT ILIKEANYandALLforms. - ClickHouse normalized round-tripping for updated table-function CTAS shapes,
projection indexes, keyword CTE names such as
interval, comma-styleOVERLAY(...), and newer parser tolerance cases from the ClickHouse corpus. - Exasol transpilation now qualifies select-list aliases in
WHEREandHAVINGpredicates withLOCAL.<alias>, matching Exasol's alias reference semantics.
- Regression coverage for schema-less CTE star passthrough lineage across Rust core, C FFI, WASM/TypeScript, Python, and Go.
- Lineage now traces schema-less CTE
SELECT *passthroughs when a single unambiguous source exists, so projections and aggregates such asWITH c AS (SELECT * FROM t) SELECT SUM(c.x)resolve back tot.xinstead of stopping at the CTE column. - The schema-less star fallback remains conservative for ambiguous multi-source stars and unresolved quoted table references, preserving quoted CTE/table case semantics.
- Regression coverage for T-SQL
0x...hex literals and nested query-analysis transform function detection.
- T-SQL
0x...hex/binary literals now tokenize, parse, transpile, and round-trip in expressions such as predicates,INSERTvalues, and arithmetic expressions. - T-SQL/Fabric generation now preserves hex string literals as native
0x...values instead of emitting SQL-standardx'...'hex string syntax. ProjectionFact.transformFunctionnow reports a sole nested transform function inside passthrough wrappers such asCOALESCE(...)andCAST(... AS ...), while leaving ambiguous projections with multiple transform functions unset.- Playground JSON tree panels now keep a bounded height and scroll correctly in the AST Explorer and Lineage JSON views.
RelationFactnow includes nullablecatalog,schema, andtablefields for physical table relations while preserving the qualifiednamestring.ProjectionFactnow includes optionaltransformFunction/transform_functionmetadata for function-like projections, including the function name, literal arguments, and column arguments.- AST transform helpers now support setting
ORDER BYacross Rust, C FFI, WASM/TypeScript, Python, and Go. - C FFI, Python, and Go now expose AST transform helpers for setting
LIMITandOFFSET, matching the existing TypeScript SDK helper surface. - Regression coverage for set-operation AST transforms, JOIN table-node discovery, nested dot-access builders, AST JSON compatibility, and function-projection facts across Rust, C FFI, WASM/TypeScript, Python, and Go.
- Public AST JSON boundaries now use the shared compatibility deserializer for generation and AST transforms, so SDK-provided JSON shapes are normalized consistently before deserialization.
set_limit/setLimitandset_offset/setOffsetnow apply to outerUNION,INTERSECT, andEXCEPTresults instead of no-oping on set operations.- TypeScript SDK
getTables(node)now returns table expression nodes from JOIN operands instead of only the locally traversable table nodes. - Rust and TypeScript builder output for
col("a.b.c")now uses nested dot access (a.b.c) instead of treatinga.bas a single quoted table qualifier. - AST JSON inputs now accept the known legacy/unit-variant compatibility shapes
at public API boundaries, including empty-object null payloads and
IS NULLshorthand values.
QueryAnalysisnow includescteFacts/cte_factsfor top-level CTE names, declared columns, original body SQL, and output columns.QueryAnalysisnow includesstarProjections/star_projectionsto retain provenance for original top-level*andtable.*projections after schema expansion.ProjectionFactnow includes conservativenullabilityclassification:non_null,nullable, orunknown.- Regression coverage for CTE facts, star projection provenance, and projection nullability across Rust, C FFI, WASM/TypeScript, Python, and Go.
- Regression coverage for
baseTablesdiscovery inside inline derived tables and derived-table set operations.
- Validation schema documentation now explicitly covers the accepted JSON shape,
including the
typecolumn key and nullability/constraint metadata.
QueryAnalysis.baseTablesnow descends into inline derived tables (FROM (SELECT ...) AS alias), including derived-table set operations, so physical backing tables are reported consistently with CTE-backed queries.- T-SQL parsing now accepts structured
SET IDENTITY_INSERT <table> ON|OFFstatements and round-trips them without falling back to an opaque command.
QueryAnalysisnow includesbaseTables/base_tables, a deduplicated list of transitive physical table dependencies collected across root queries, CTEs, derived tables, scalar subqueries, and set-operation branches.- TypeScript SDK
analyzeQuerynow accepts a dialect shorthand argument such asanalyzeQuery(sql, Dialect.DuckDB)in addition to the existing options object. - Regression coverage for query-analysis aliases, qualified star expansion, schema-driven star expansion, aggregate classification, precise type hints, and transitive base-table reporting across Rust, C FFI, WASM/TypeScript, Python, and Go.
- Compact query analysis now preserves parseable detailed validation-schema
type strings such as
DECIMAL(10,2)for projectiontypeHintvalues while leaving schema-aware validation's broad type-family behavior unchanged. - Query-analysis documentation now distinguishes direct visible
relationsfrom transitive physicalbaseTablesacross Rust, Python, C FFI, WASM/TypeScript, and Go.
- Physical table aliases such as
orders AS oare now preserved in query-analysis upstream references assourceAliaswhile keeping the physical table identity asorders. - Qualified star projections such as
o.*now expand and trace only the matching source instead of all sources in the query. - Schema-aware analysis now resolves columns qualified by query aliases before type annotation, so aliased table references keep correct upstream tables and type hints.
- Typed aggregate AST variants such as
COUNT,SUM,AVG,MIN,MAX,COUNT_IF,SUM_IF,STRING_AGG,GROUP_CONCAT, andLISTAGGare now classified asaggregationtransforms in compact query analysis.
- Standalone data-type parsing and generation convenience APIs across Rust,
Python, C FFI, WASM/TypeScript, and Go, including Rust
parse_data_type/generate_data_type, Pythonparse_data_typeandparse_one(..., into=polyglot_sql.DataType), FFIpolyglot_parse_data_type/polyglot_generate_data_type, TypeScriptparseDataType/generateDataType, and GoParseDataType/GenerateDataType. - Compact query-analysis convenience APIs across Rust, Python, C FFI, WASM/TypeScript, and Go, returning high-level query facts such as shape, projections, relations, CTEs, set-operation branches, and upstream column references without requiring callers to consume the full AST or lineage graph.
- Optional schema-aware query analysis that qualifies references and includes inferred projection types when validation schema metadata is supplied.
- PostgreSQL replication protocol command parsing for
BASE_BACKUP,CREATE_REPLICATION_SLOT,DROP_REPLICATION_SLOT,IDENTIFY_SYSTEM,READ_REPLICATION_SLOT,START_REPLICATION, andTIMELINE_HISTORY. - Regression coverage and documentation for the new data-type and query-analysis APIs across the Rust core and native SDKs.
- Snowflake
DATEDIFF,DATE_DIFF,TIMEDIFF, andTIMESTAMPDIFFidentity generation now preserves Snowflake's start/end argument order in direct, nested, aggregate,CASE, andORDER BYcontexts. - T-SQL
SET STATISTICS TIME|IO|XML|PROFILE ON|OFFstatements now parse and round-trip as command statements, including comma-separated forms such asSET STATISTICS IO, TIME ON, while preserving structured parsing for simple options likeSET NOCOUNT ON. - PostgreSQL replication protocol commands now parse and generate instead of
failing on command-style syntax such as
CREATE_REPLICATION_SLOT ... LOGICAL ...andSTART_REPLICATION ....
- Strict unsupported-transpilation mode via
TranspileOptions.unsupported_level,TranspileOptions.max_unsupported, and theTranspileOptions::strict()helper, withUnsupportedLevelre-exported from the Rust crate root and serialized as lower-case option values. - Strict unsupported-transpilation options across C FFI, WASM, Python, Go, and
the TypeScript SDK, including Python
unsupported_level/max_unsupported, GoUnsupportedLevelconstants, and TypeScriptTranspileOptions. - Regression coverage for strict unsupported transpilation in Rust core, C FFI, WASM, Python, Go option serialization, and TypeScript SDK type/API tests.
- Lineage and scope support for table-generating virtual sources beyond
BigQuery
UNNEST, including PostgreSQL/Presto/TrinoUNNESTaliases, Spark/HiveLATERAL VIEW EXPLODE, and SnowflakeLATERAL FLATTEN.
- Transpilation now passes full
TranspileOptionsinto the target generator, so generator unsupported diagnostics honor caller-selectedunsupported_levelandmax_unsupportedsettings. - Strict unsupported checks run after source normalization and target rewrites, allowing successful rewrites to proceed while rejecting only known unsupported constructs that still remain in the final output AST.
- Strict unsupported mode now rejects known lossy or unsupported target output
such as Fabric/Hive recursive CTEs, remaining T-SQL/Fabric
LATERAL, target unsupportedUNNEST/EXPLODE, lossyARRAY_AGG, and PostgreSQL-specificJSONB_BUILD_OBJECT/TO_TSVECTORcalls when the target dialect cannot safely represent them. - Default transpilation remains permissive for the same constructs, preserving existing behavior unless callers explicitly opt into strict unsupported handling.
- Lineage for unqualified columns emitted by table-generating functions now resolves to the matching virtual source node and preserves downstream dependencies on the real table columns feeding the virtual source.
- Snowflake
LATERAL FLATTENlineage now treatsFLATTENoutput columns such asvalueas virtual source columns and traces them back to the referenced input expression. - Column-reference collection now follows
LATERAL,LATERAL VIEW, and JSON extraction expressions used inside virtual table-generating sources.
- Lineage nodes now expose
source_kindand optionalsource_aliasmetadata across Rust core, C FFI, WASM, Python, Go, and the TypeScript SDK so clients can distinguish physical tables, CTEs, derived tables, virtual sources, and unresolved sources. - Regression coverage for BigQuery
UNNESTlineage metadata across the native wrappers and SDKs, including Go and TypeScript SDK assertions.
- OpenLineage column lineage now ignores purely virtual terminal sources such
as standalone BigQuery
UNNEST(...) AS aliasvalues instead of emitting synthetic physical input fields, while table-backedUNNEST(t.items)still resolves to the real source column. - PostgreSQL-to-T-SQL and PostgreSQL-to-Fabric transpilation now materializes
scalar boolean value expressions as
CASEvalues in projection, grouping, ordering, and window contexts while preserving predicate contexts such asWHEREandHAVING. - The
test-go-integrationMakefile target now resolves the platform-specific FFI library name through an explicit shell variable before running Go SDK integration tests.
- BigQuery
UNNEST(...) AS aliaslineage now uses stable synthetic virtual source names such as_0/_1, preserves the user-written alias separately, and avoids treating real tables with the same name as virtual sources. - PostgreSQL-to-T-SQL and PostgreSQL-to-Fabric transpilation now omits the
unsupported
RECURSIVEkeyword from recursive CTE output. - PostgreSQL
CROSS JOIN LATERAL,JOIN LATERAL,INNER JOIN LATERAL, andLEFT JOIN LATERALnow transpile to T-SQL/FabricCROSS APPLYorOUTER APPLYwhen the join has no meaningful join predicate, and Fabric now preserves nativeAPPLYjoins during generation. - T-SQL and Fabric output now strips unsupported window frames from
ranking/navigation window functions such as
ROW_NUMBER,RANK,NTILE,LEAD, andLAG; framed named windows are inlined only for the affected function so aggregate uses of the same named window remain unchanged. - PostgreSQL
MOD(a, b)now lowers to the T-SQL/Fabric%operator and keeps compound arguments parenthesized to preserve precedence. - PostgreSQL
POSITION(substr IN str)andSTRPOS(str, substr)now transpile to FabricCHARINDEX(substr, str). - PostgreSQL row-value
INsubqueries such as(a, b) IN (SELECT x, y ...)now transpile to correlatedEXISTSpredicates for T-SQL and Fabric when the arity matches, whileNOT INand mismatched arity cases are left unchanged. - Fabric now maps unqualified PostgreSQL
NUMERIC/DECIMALcasts toDECIMAL(38, 10)while preserving explicit precision and scale. - PostgreSQL statistical aggregates
STDDEV_SAMP,STDDEV_POP,VAR_SAMP, andVAR_POPnow map to the corresponding T-SQL/Fabric function namesSTDEV,STDEVP,VAR, andVARP. - PostgreSQL boolean aggregates
BOOL_AND,BOOL_OR, andEVERY, including filtered variants, now transpile to null-preserving T-SQL/FabricMIN/MAXCASEaggregates cast toBIT. - T-SQL and Fabric aggregate
FILTER (WHERE ...)clauses now transpile to conditional aggregate inputs for counts, distinct counts, ordinary aggregates, and window aggregates. - PostgreSQL
STRING_AGG(value, sep ORDER BY ...)now emits T-SQL/FabricWITHIN GROUP (ORDER BY ...), including NULL-ordering emulation where needed. - PostgreSQL
BPCHARcasts, double-colon casts, and DDL column definitions now normalize toCHARfor T-SQL and Fabric. - PostgreSQL
= ANY(ARRAY[...])and= ANY((...))predicates now transpile toIN (...)for T-SQL and Fabric, with empty arrays lowering to an always false predicate. - PostgreSQL-to-Fabric and PostgreSQL-to-T-SQL transpilation now attaches
trailing set-operation
ORDER BY,LIMIT, andOFFSETclauses to the outerUNION/INTERSECT/EXCEPTresult instead of the right-hand operand. - Fabric and T-SQL set operations that need row limiting or NULL-ordering
emulation are now wrapped in an outer query before applying
ORDER BY/TOP/OFFSET ... FETCH, avoiding invalidCASE WHEN ... IS NULLsort keys inside the set-operationORDER BY. - Set-operation
ORDER BYexpressions now participate in cross-dialect NULL-ordering normalization, preserving PostgreSQL NULL sort semantics when transpiling to Fabric or T-SQL.
0.4.3 - 2026-06-02
- Structured PostgreSQL/generic prepared statement support with a new
PrepareAST node forPREPARE name [(type, ...)] AS statement. - PostgreSQL-style prepared statement execution arguments on
Executenodes, allowingEXECUTE name(...)to parse and round-trip without falling back to opaque command text. - Regression coverage for prepared statement parse/generate/source-table flows across Rust, C FFI, WASM, Python, and the TypeScript SDK.
- Lineage, source-table extraction, traversal, scope analysis, and OpenLineage
output now inspect the body of structured
PREPAREstatements. - BigQuery
UNNEST(...) AS aliassources now participate in lineage and OpenLineage column lineage, avoiding empty field lineage for projections such asSELECT date_val AS week_start FROM UNNEST(...) AS date_val. - Python bindings now expose the new
Prepareexpression subclass in the native dispatcher, package exports, and type stubs. - Documentation builds no longer fail on TypeDoc analysis of the TypeScript SDK manual WASM loader internals.
0.4.2 - 2026-05-25
- TypeScript SDK manual WASM loader entry point at
@polyglot-sql/sdk/manual, allowing bundlers such as esbuild to initialize the SDK with an explicitly imported WASM URL. - Public TypeScript SDK WASM asset export at
@polyglot-sql/sdk/polyglot_sql.wasm, published asdist/polyglot_sql.wasm. - SDK bundler smoke coverage for esbuild, package export resolution, Node ESM, and CommonJS loading.
- TypeScript SDK builds are now split into browser/default ESM, Node ESM, CommonJS, CDN ESM, and manual-loader artifacts so each runtime uses an appropriate WASM loading path.
- SDK, playground, and CI build flows now generate both wasm-bindgen bundler and web wrappers, verify the renamed WASM artifact set, and run the bundler smoke checks.
- TypeScript SDK documentation now includes explicit bundler guidance for Vite, esbuild, Next.js/webpack, Node ESM, CommonJS, and CDN/self-hosted usage.
- Browser/default TypeScript SDK bundles no longer include Node
node:fs/node:urlcompatibility code, fixing browser bundlers that reject Node built-ins. - esbuild users can now bundle without manually copying opaque SDK internals by
importing the documented
polyglot_sql.wasmasset and using the manual loader entry.
0.4.1 - 2026-05-23
DropIndex.namenow uses the existingTableRefAST shape instead of a flattenedIdentifier, preserving qualified index targets and per-part quoted identifier metadata.- The
semanticCargo feature no longer impliesgenerate, so semantic-only Rust builds can compile without pulling in SQL generation.
- PostgreSQL
DROP INDEXgeneration now preserves quoted mixed-case index names, including identity transpilation such asDROP INDEX IF EXISTS "idx_tokenKey__pb_users_auth_". - SQLite-to-PostgreSQL transpilation now converts backtick-quoted
DROP INDEXnames to PostgreSQL double-quoted identifiers instead of emitting an unquoted, lowercased-by-PostgreSQL name. - Qualified quoted
DROP INDEXtargets such as"public"."IdxName"now round-trip without losing quote state on individual name parts. openlineageandsemanticfeature combinations withoutgeneratenow compile; default/full builds continue to emit the same generated SQL transformation descriptions as before.
0.4.0 - 2026-05-22
- Official Go SDK at
packages/go, published as the nested Go modulegithub.com/tobilg/polyglot/packages/go. - PureGo-based Go bindings over the native
polyglot-sql-ffishared library, with explicit client lifecycle management and no cgo or runtime native library downloads by default. - Go SDK APIs for transpilation, formatting, optimization, generation, validation, dialect listing, parsing/tokenization, AST diff, table transforms, lineage/source-table extraction, and OpenLineage payload generation.
- Go SDK typed option/result structs, default-client helpers, error wrapping, native library path resolution, FFI layout checks, unit tests, integration tests, and setup documentation.
- C FFI OpenLineage exports:
polyglot_openlineage_column_lineage,polyglot_openlineage_job_event, andpolyglot_openlineage_run_event. - Cargo capability feature gates for
polyglot-sql:generate,transpile,builder,ast-tools,semantic,openlineage,diff,planner, andtime. - Documented parser-only Rust builds via
default-features = false. - Makefile targets for Go SDK builds/tests and Rust feature-gate verification:
build-go,test-go,test-go-integration, andtest-rust-feature-gates.
- The default Rust feature set continues to expose the full existing API, while optional capability groups now support smaller parser-only or selected-feature builds.
polyglot-sql-wasmnow explicitly opts into the full core capability set so existing JavaScript/WASM exports remain available with the new core feature gates.- Release automation now verifies the Go SDK against the release-built FFI
artifact and creates matching nested Go module tags such as
packages/go/v0.4.0. - Version bump helpers now update the Go SDK runtime version constant.
- SQLite-source transpilation now converts double-quoted column defaults such
as
DEFAULT "base",DEFAULT "[]", andDEFAULT "{}"into string literals for non-SQLite targets, fixing invalid PostgreSQL output while preserving SQLite identity output.
0.3.12 - 2026-05-18
- OpenLineage-compatible lineage payload generation in the Rust core via the
new
polyglot_sql::openlineagemodule. The new helpers produce standalonecolumnLineagedataset facets plus inferred input/output datasets, and can also build OpenLineageJobEventandRunEventJSON payloads. - OpenLineage column lineage support for
SELECT,INSERT ... SELECT, andCREATE TABLE AS SELECT, including dataset namespace/mapping options, target-column remapping forINSERT INTO target(col) SELECT ..., table alias resolution, direct/transformation/aggregation classification, and optional schema facet generation from validation schema metadata. - WASM exports for OpenLineage payload generation:
openlineage_column_lineage,openlineage_job_event, andopenlineage_run_event. - TypeScript SDK helpers and types:
openLineageColumnLineage,openLineageJobEvent,openLineageRunEvent, and the associated OpenLineage option/result interfaces. - Python binding functions:
openlineage_column_lineage,openlineage_job_event, andopenlineage_run_event. - Documentation for OpenLineage output in the root README, TypeScript SDK README, and Python bindings README.
- Focused Rust, WASM, TypeScript SDK, and Python regression coverage for the new OpenLineage payload generation paths.
- OpenLineage transport/client behavior remains intentionally out of scope. Polyglot generates JSON-compatible payloads for callers to inspect, persist, or emit through their own infrastructure.
- OpenLineage JSON Schema URLs are emitted as fixed
schemaURL/_schemaURLreferences. Schemas are not downloaded or validated at runtime.
0.3.11 - 2026-05-15
- Regression coverage for issue #201 across Rust, Python, C FFI, WASM, and the TypeScript SDK.
- TypeScript/WASM builder
toSql(dialect?)support forExprandCaseBuilder, allowing builder-generated SQL to use dialect-specific generation rules instead of always using the generic dialect.
- T-SQL
NCHAR/NVARCHARparsing and generation now preserves national character types for T-SQL identity transpilation, includingNVARCHAR(MAX). - Fabric generation now maps unsupported
NCHAR/NVARCHARcasts toCHAR/VARCHARwhile preserving lengths, including(MAX). - Snowflake timestamp variant casts now parse and generate consistently for
TIMESTAMP_TZ,TIMESTAMP_NTZ,TIMESTAMP_LTZ, and their no-underscore aliases with optional precision.
0.3.10 - 2026-05-14
- Rust AST table transform options for table qualification and table renaming, including generated aliases for unaliased tables/subqueries, configurable alias prefixes, set-operation subquery normalization, and optional aliases for renamed tables.
- WASM AST transform exports for table qualification and table renaming with
options:
ast_qualify_tablesandast_rename_tables_with_options. - TypeScript SDK visitor helpers for
qualifyTablesand enhancedrenameTablesoptions. - Python binding functions
qualify_tablesandrename_tables, accepting both single expressions and expression lists. - C FFI AST transform functions
polyglot_qualify_tablesandpolyglot_rename_tables_with_options. - Regression coverage for PostgreSQL-to-T-SQL/Fabric transpilation, AST table transforms, Python transform bindings, and FFI transform bindings.
- T-SQL and Fabric generation now emulate unsupported
NULLS FIRST/NULLS LASTordering with CASE sort keys when required, while avoiding that rewrite for random ordering expressions. - Fabric
LIMIT/OFFSETgeneration now uses T-SQL-styleOFFSET ... ROWS/FETCH NEXT ... ROWS ONLYsyntax where appropriate. - Table qualification now handles set-operation operands and parser-produced
passthrough
SELECT * FROM (<set op>)wrappers more reliably.
0.3.9 - 2026-05-11
- Python binding regression coverage for structured T-SQL
BEGIN TRY/BEGIN CATCHparsing, ensuring parsed nodes are exposed as the typedpolyglot_sql.TryCatchsubclass.
- Python release builds now include the
TryCatchexpression variant in the native subclass dispatcher, fixing the non-exhaustive Rust match introduced by structured TRY/CATCH AST support. - Python package exports and type stubs now expose
TryCatch, and the stubs avoid shadowingtyping.Anywith the SQL expression subclass namedAny.
0.3.8 - 2026-05-11
- T-SQL regression coverage for structured
BEGIN TRY/BEGIN CATCHparsing, traversal, SQL generation, and table extraction from block bodies. - PostgreSQL-to-Fabric TPC-H regression coverage for all 22 benchmark queries.
- T-SQL regression coverage for multi-statement
DECLAREbatches, including table variables followed byINSERTand scalar declarations followed bySELECT. - AST transform regression coverage for DML statements, including
UPDATE ... FROM/JOIN, PostgreSQLDELETE ... USING, and T-SQLOUTPUT ... INTOclauses.
- T-SQL
BEGIN TRY/BEGIN CATCHblocks now parse into structured AST nodes instead of opaque command text, so traversal, lineage, scope analysis, and generation can inspect the inner statements. - T-SQL
DECLAREparsing now preserves top-level statement boundaries, so batches such asDECLARE @tmp TABLE (...); INSERT INTO @tmp SELECT ...parse as separate statements. transform_recursive,rename_tables, andreplace_by_typenow visit table references and expression fields insideUPDATEandDELETEstatements, including DML targets,FROM/USINGsources, joins,OUTPUT,RETURNING,WITH,ORDER BY, andLIMIT.
0.3.7 - 2026-05-07
- Full-corpus ClickHouse normalized round-trip verification for
make test-rust-clickhouse-coverage, covering all 85,380 extracted fixture statements.
- ClickHouse coverage now validates stable same-dialect normalization
(
parse -> transform/generate -> parse -> transform/generate) instead of exact source identity, while preserving the complete fixture corpus total and requiring85,380/85,380passing statements.
- ClickHouse parser/generator regressions for terminal backslash-escaped string
quotes, native
COALESCE/IFNULLspelling, prefixNOTprecedence, nested lambda bodies, single-valueINlists,sum(NULL), and same-dialectEXCEPT ALLidentity output. - ClickHouse normalization stability for malformed corpus probes and dialect
syntax including partial
WITHstatements, incomplete extracted subqueries,SAMPLE, TTLSET,Enum8/Enum16, table-function CTAS, quoted dotted aliases, andALTER TABLE ... UPDATEmutations.
0.3.6 - 2026-05-06
- BigQuery parser support for alias-first
UNNEST ... WITH OFFSETtable expressions, includingUNNEST(arr) AS elem WITH OFFSET AS offand normalization ofWITH OFFSET offtoWITH OFFSET AS off. - Focused round-trip coverage for BigQuery
UNNESTwith offset aliases in bothFROMandCROSS JOINtable expressions.
- Updated SQLGlot and ClickHouse fixture pins to
v30.7.0andv26.2.17.31-stable. - Cleaned up Makefile target metadata, help output, and
.PHONYcoverage so advertised development commands resolve consistently.
- SQLGlot fixture compatibility for updated dialect identity and transpilation
cases, including MySQL DDL/charset forms, DuckDB FROM-first joins, Redshift
approximate percentile and interval output, Snowflake string/array/UUID
rewrites, Oracle
JSON_TABLE ... FORMAT JSON, ExasolOPEN, and BigQuery drop-primary-key forms. - Fabric/T-SQL interval arithmetic rewrites for additional interval expression shapes, including cast interval values and colon parameters.
- Broken
make test-rust-functionstarget, which now runs the existing function-focused library tests.
0.3.5 - 2026-04-29
- PostgreSQL and SQLite transpilation regressions around TPCH-style stack-heavy queries and dialect-specific expression rewrites.
- Snowflake parser support for dollar-string literals in
PUT/FROMcommand forms and UUID-like paths in stage references. - Python compatibility tests for Snowflake connector command handling.
0.3.4 - 2026-04-27
- Databricks parser support for additional Delta Lake and Lakeflow command
forms:
CREATE TABLE ... DEEP CLONE ... VERSION/TIMESTAMP AS OF ...REPAIR TABLE/MSCK REPAIR TABLEAPPLY CHANGES INTO,AUTO CDC INTO, andCREATE FLOW ... AS AUTO CDCGENERATE symlink_format_manifest FOR TABLE ...CONVERT TO DELTA ...
- Snowflake scripting block support for
DECLARE ... BEGIN ... ENDcursor blocks, including cursorOPENandRETURN TABLE(RESULTSET_FROM_CURSOR(...))command bodies. - PostgreSQL to T-SQL/Fabric rewrites for scalar array comparisons:
= ANY(ARRAY[...])and= ANY((...))now emitIN (...), with empty arrays rewritten to an always-false predicate.
- Raw command parsing now preserves original source text when available, keeping dialect-specific quoted paths and procedural command bodies intact.
- Databricks parsing failures for Delta maintenance, clone, CDC, manifest, and conversion commands.
- Snowflake parsing failures for anonymous scripting blocks with cursor declarations.
- Regression coverage for MySQL stored procedures using
SIGNAL SQLSTATEinsideBEGIN ... ENDblocks.
0.3.3 - 2026-04-24
- Native stack-growth support for deep parser/transform paths via the default
stackerfeature, while keeping WASM builds stacker-free. - Stack-focused regression coverage for deeply nested transpilation and ClickHouse/Snowflake parser edge cases.
- Refactored recursive parser/transform hot paths to reduce per-level stack usage and remove unnecessary manually enlarged test/runtime stacks.
- Updated ClickHouse and sqlglot verification fixtures for the current transpilation behavior.
- Documented stack-size behavior, default native safety settings, and WASM/FFI integration notes in the README.
- Snowflake Python connector query parsing failures involving empty argument lists, optional ODBC call wrappers, and connector-specific SQL forms.
- Deep transpilation/normalization stack handling for large generated queries without relying on oversized worker-thread stacks by default.
0.3.0 - 2026-04-06
Dialect::transpileandDialect::transpile_with— the new canonical method API for transpilation from aDialecthandle. Both accept either aDialectTypeenum or a&Dialectreference as the target via the newTranspileTargettrait (implemented for both).TranspileOptionsstruct (#[non_exhaustive]) carrying transpile configuration, withTranspileOptions::pretty()helper for pretty-printed output. DerivesSerialize/Deserialize(camelCase) for JSON bridges.TranspileTargettrait — end users don't normally implement this themselves; the blanket impls forDialectTypeand&Dialectcover built-in and custom dialects uniformly.polyglot_sql::transpile_with_by_namefree function — string-keyed variant of the new API, used by the C FFI and Python bindings.- C FFI: new
polyglot_transpile_with_options(sql, from, to, options_json)function.options_jsonis a JSON object compatible withTranspileOptions, e.g.{"pretty": true}.
- Breaking (Rust API):
polyglot_sql::transpileandpolyglot_sql::transpile_by_namenow apply the full cross-dialect rewrite pipeline (cross_dialect_normalize) — matching the WASM / FFI / Python bindings and the playground. Previously these two entry points bypassed source+target-aware normalization, so Rust/Python/C FFI consumers silently received under-transformed SQL (including semantically wrong output for some DuckDB → Trino patterns such asCAST(x AS JSON)andto_timestamp(x)). transform_recursivenow recurses intoExpression::CreateView.query, so cross-dialect transforms apply inside view bodies (e.g.CREATE VIEW v AS SELECT to_timestamp(x) FROM t).
- Breaking (Rust API): removed
Dialect::transpile_to,Dialect::transpile_to_pretty,Dialect::transpile_to_dialect, andDialect::transpile_to_dialect_pretty— superseded by the unifiedDialect::transpile/Dialect::transpile_withpair.- Migration:
dialect.transpile_to(sql, DialectType::X)→dialect.transpile(sql, DialectType::X) - Migration:
dialect.transpile_to_pretty(sql, DialectType::X)→dialect.transpile_with(sql, DialectType::X, TranspileOptions::pretty()) - Migration:
dialect.transpile_to_dialect(sql, &target)→dialect.transpile(sql, &target)
- Migration:
0.1.9 - 2026-02-25
- Rust-side pre-parse formatting guard for deep set-operation chains (
UNION/INTERSECT/EXCEPT) with new error codeE_GUARD_SET_OP_CHAIN_EXCEEDED. - New FFI API:
polyglot_format_with_options(sql, dialect, options_json)to override formatting guard limits per call. - Python formatting per-call guard overrides via keyword-only arguments on
format_sql(...)/format(...):max_input_bytesmax_tokensmax_ast_nodesmax_set_op_chain
- Formatting guard defaults now include
maxSetOpChain = 256to fail fast before deep set-op stack-overflow scenarios in large generated queries. - ClickHouse
minus(...)is treated as a function call in set-op guard detection (not as a set operation), avoiding false positives.
- Large/deep set-operation formatting now returns deterministic guard failures instead of process-level stack overflows in affected cases.
- FFI and Python interfaces are now aligned with Rust/WASM/SDK by supporting per-call formatting guard configuration.
0.1.8 - 2026-02-24
- New
polyglot-sql-pythoncrate with first-party Python bindings (PyO3 + maturin) for parse, transpile, generate, format, validate, diff, lineage, and optimize flows. - Release CI support for Python package publishing (multi-platform wheel builds + PyPI publish on
v*tags). - Dedicated benchmark project in
tools/bench-comparewith isolateduvenvironment management.
- Python local build/test artifacts are now ignored in git (
__pycache__,.pytest_cache, coverage files, and related caches).
0.1.7 - 2026-02-24
- New
polyglot-sql-fficrate with a C-compatible API surface for parse, transpile, generate, format, validate, diff, lineage, and optimize flows. - Generated C header and end-to-end C example (
examples/c) for native integration. - Release CI now builds multi-platform FFI artifacts and publishes archives plus checksums to GitHub Releases for
v*tags. - Playground capabilities for lineage and schema-aware validation workflows.
- SDK/WASM bridge now supports structured value APIs (
transpile_value,parse_value,generate_value,format_sql_value,get_dialects_value) to reduce JSON serialization overhead. - Parser now rebalances long
AND/ORchains into bounded-depth trees to improve stack behavior on very large predicates. - CI release pipeline hardening for SDK/WASM/docs/playground version consistency checks against the release tag.
- Build/test flow updates across Makefile and CI to keep Rust, WASM, SDK, docs, playground, and FFI outputs aligned.
- Large-SQL formatting robustness (issue #27 reproduction case) for high condition counts in WASM/SDK usage.
- WASM->TypeScript AST shape compatibility regressions by using JSON-compatible structured serialization.
- Additional parser, optimizer, and validation edge cases discovered during large-query and release-hardening work.
0.1.6 - 2026-02-23
- Schema-aware validation Phase 2 capabilities in
polyglot-sql:- optional type checks (
check_types) - optional reference/FK checks (
check_references) - expanded schema model for keys and references
- new diagnostics (
E210-E217,W210-W216,E220,E221,W220,W221,W222)
- optional type checks (
- WASM and TypeScript SDK wiring for the new schema validation metadata and options.
- Additional validation coverage in Rust, WASM, and SDK tests for type/reference rules.
- Canonical SQL generation for
NOT INin the WASM builder path to avoid non-canonical output. - SDK build pipeline now performs WASM extraction/rewrite via a Vite plugin instead of a standalone post-build script.
- WASM release optimization profile no longer uses
--convergeto reduce build-time variance inwasm-opt. - CI release hardening:
- SDK typecheck in the
sdk-buildjob - deploy-time docs version assertion against release tag
- deploy-time playground SDK/WASM version assertion against release tag
- SDK typecheck in the
- Multiple schema validation edge cases around comparison, arithmetic, assignment, set-ops, and join/reference quality diagnostics.
- Strict/non-strict severity behavior alignment for new validation rule families.
- Generated TypeScript binding diagnostics in the SDK:
- removed problematic doc-comment patterns that broke generated JSDoc parsing
- removed
Index.tsrenaming in binding copy flow to avoid case-sensitive import conflicts