Skip to content

v0.17.0

Choose a tag to compare

@github-actions github-actions released this 12 May 23:44

0.17.0 - 2026-05-12

Features

  • feat(querybuilder): add sqlite dialect

Fixes

  • fix(querybuilder): enforce render and decode completeness
  • fix(querybuilder): reject unsupported mysql sql
  • fix(querybuilder): render ddl identifiers safely
  • fix(querybuilder): validate nested query rendering
  • fix(querybuilder): reject unsupported postgres modifiers
  • fix(querybuilder): reject unsupported runtime clauses
  • fix(querybuilder): preserve renderer row types
  • fix(querybuilder): reject missing nested aliases
  • fix(postgres): quote schema enum column types
  • fix(database): preserve quoted ddl enum filters
  • fix(database): canonicalize quoted qualified types
  • fix(postgres): align enum type name literals
  • fix(postgres): quote sequence nextval names
  • fix(database): parse quoted sequence defaults
  • fix(database): infer quoted qualified type kinds
  • fix(database): pull quoted enum arrays
  • fix(database): preserve dotted sequence pull keys
  • fix(database): preserve dotted discovered identities
  • fix(database): parse quoted index support identifiers
  • fix(database): parse quoted migration table names
  • fix(database): preserve dotted introspected table keys
  • fix(querybuilder): escape json predicate path keys
  • fix(querybuilder): compare set projection paths structurally
  • fix(querybuilder): preserve dotted predicate source names
  • fix(querybuilder): escape predicate keys in type facts
  • fix(database): reject malformed migration table identifiers
  • fix(querybuilder): escape dotted grouping keys
  • fix(querybuilder): support json expression grouping keys
  • fix(querybuilder): escape json grouping identity segments
  • fix(querybuilder): support binary predicate grouping keys
  • fix(querybuilder): support collate grouping identity
  • fix(querybuilder): support function grouping keys
  • fix(querybuilder): support subquery grouping keys
  • fix(querybuilder): validate derived projection aliases
  • fix(querybuilder): reject invalid derived aliases in types
  • fix(querybuilder): validate cte lateral aliases in types
  • fix(querybuilder): restrict excluded to columns
  • fix(querybuilder): infer values rows across tuple
  • fix(querybuilder): type-check unnest column lengths
  • fix(querybuilder): type-reject mysql merge
  • fix(querybuilder): reject empty table option columns
  • fix(querybuilder): type-check foreign key arity
  • fix(querybuilder): require rich index target
  • fix(querybuilder): validate rich index columns in types
  • fix(querybuilder): preserve rich constraint columns in types
  • fix(querybuilder): type-check foreign key columns
  • fix(querybuilder): type-check schema table options
  • fix(querybuilder): specialize postgres schema tables
  • fix(querybuilder): type-check class option columns
  • fix(querybuilder): reject cross-dialect from sources
  • fix(querybuilder): reject cross-dialect join sources
  • fix(querybuilder): reject cross-dialect structured source expressions
  • fix(querybuilder): reject cross-dialect table function expressions
  • fix(querybuilder): track distinct on expression sources
  • fix(querybuilder): reject mixed dialect plans
  • fix(querybuilder): track conflict target predicates
  • fix(querybuilder): require merge action clauses
  • fix(querybuilder): reject mixed mutation tuple targets
  • fix(querybuilder): specialize public mutation input dialects
  • fix(querybuilder): reject tuple update value dialects
  • fix(querybuilder): reject upsert value dialects
  • fix(querybuilder): reject mutation value dialects
  • fix(querybuilder): track insert source dialects
  • fix(executor): decode custom projection aliases by path
  • fix(renderer): validate custom projection paths
  • fix(querybuilder): allow reordered values row keys
  • fix(querybuilder): reject empty values rows
  • fix(querybuilder): validate unnest column arrays
  • fix(querybuilder): reject incomplete derived sources
  • fix(querybuilder): enforce lateral source requirements
  • fix(querybuilder): reject incomplete set operands
  • fix(querybuilder): keep insert select source requirements
  • fix(querybuilder): reject mutation subquery expressions
  • fix(querybuilder): avoid duplicate nested ctes
  • fix(mysql): reject data modifying ctes
  • fix(querybuilder): reject mutation inline sources
  • fix(querybuilder): preserve cross join facts
  • fix(querybuilder): preserve structured from facts
  • fix(querybuilder): preserve set result facts
  • fix(querybuilder): preserve only common set facts
  • fix(json): respect createMissing false types
  • fix(mysql): honor json set createMissing false
  • fix(mysql): render json array inserts correctly
  • fix(mysql): render negative json indexes
  • fix(mysql): render negative json slices
  • fix(mysql): render recursive json descent
  • fix(json): reject non-exact mutation paths
  • fix(mysql): type scalar json length
  • fix(json): type array keys as null
  • fix(mysql): type json type names
  • fix(mysql): reject unsupported json helpers
  • fix(postgres): render json keys as json
  • fix(postgres): type json scalar text
  • fix(postgres): preserve curried json helper types
  • fix(json): type negative tuple indexes
  • fix(json): preserve mutation value literals
  • fix(executor): decode json string scalars
  • fix(executor): preserve schema-valid json strings
  • fix(json): distribute nullable helper result types
  • fix(executor): allow schema-valid json nulls
  • fix(executor): reject non-finite json numbers
  • fix(executor): validate normalized json values
  • fix(postgres): preserve json string mutation values
  • fix(executor): reject normalized non-finite numbers
  • fix(executor): validate derived finite numbers
  • fix(executor): canonicalize decimal negative zero
  • fix(executor): reject impossible local dates
  • fix(executor): validate normalized local dates
  • fix(executor): validate temporal runtime strings
  • fix(executor): validate canonical numeric strings
  • fix(executor): pad early Date years
  • fix(mutation): normalize raw column values
  • fix(mutation): normalize unnest array values
  • fix(mutation): normalize literal expression values
  • fix(mutation): validate normalized column values
  • fix(mysql): prioritize returning cte errors
  • fix(executor): reject loose local date strings
  • fix(executor): reject non-decimal numeric strings
  • fix(json): escape control characters in path keys
  • fix(mysql): tighten error catalog type guards
  • fix(errors): parse numeric fields as decimal strings
  • fix(executor): reject non-plain json objects
  • fix(rendering): reject invalid date literal params
  • fix(runtime): reject non-finite json primitives
  • fix(sqlite): store json strings as json text
  • fix(querybuilder): harden statement edge cases
  • fix(querybuilder): reject invalid statement edge cases
  • fix(querybuilder): reject unsupported unique ddl options
  • fix(sqlite): preserve nested json values
  • fix(mysql): preserve nested json values
  • fix(sqlite): preserve json merge literals
  • fix(mysql): render json path exists segments
  • fix(sqlite): render json path exists segments
  • fix(mysql): encode structured json inserts
  • fix(querybuilder): validate unnest insert values
  • fix(querybuilder): reject unknown conflict targets
  • fix(mysql): reject scoped conflict targets
  • fix(sqlite): type scoped conflict predicates
  • fix(mysql): reject object conflict targets
  • fix(sqlite): reject ignored mutation modifiers
  • fix(postgres): reject delete lock modifiers
  • fix(sqlite): avoid invalid rendered sql
  • fix(sqlite): render derived value sources without column aliases
  • fix(querybuilder): inline ddl expression literals
  • fix(sqlite): render set operations as compound selects
  • fix(sqlite): reject unsupported set all variants
  • fix(sqlite): reject unsupported json wildcard paths
  • fix(sqlite): render temporal helpers with sqlite functions
  • fix(sqlite): reject unsupported json array inserts
  • fix(postgres): bind json array indexes as numbers
  • fix(sqlite): reject empty update assignments
  • fix(querybuilder): reject unsupported dialect syntax
  • fix(querybuilder): accept single ddl index columns
  • fix(sqlite): reject all transaction options
  • fix(querybuilder): narrow unique options by dialect
  • fix(sqlite): type-reject lateral sources
  • fix(sqlite): type-reject truncate statements
  • fix(sqlite): type-reject row locks
  • fix(sqlite): type-reject unsupported set all operators
  • fix(sqlite): type-reject unsupported read predicates
  • fix(sqlite): type-reject container operators
  • fix(querybuilder): type-reject conflicting lock options
  • fix(sqlite): type-reject unsupported json path segments
  • fix(sqlite): type-reject json array inserts
  • fix(querybuilder): require conflict updates for action predicates
  • fix(querybuilder): type-reject empty update assignments
  • fix(postgres): type-reject empty merge actions
  • fix(sqlite): type-reject joined deletes
  • fix(mysql): type-reject empty selections
  • fix(sqlite): reject empty selections
  • fix(querybuilder): reject empty conflict updates
  • fix(querybuilder): reject empty upsert updates
  • fix(querybuilder): validate upsert conflict columns
  • fix(querybuilder): accept string conflict columns
  • fix(querybuilder): reject empty returning selections
  • fix(querybuilder): reject scalar selections
  • fix(querybuilder): validate selection leaves
  • fix(postgres): reject empty distinct on
  • fix(querybuilder): reject empty group by
  • fix(querybuilder): reject invalid order directions
  • fix(querybuilder): reject invalid lock modes
  • fix(querybuilder): reject invalid window order directions
  • fix(postgres): normalize rich index columns
  • fix(database): reject invalid index key modifiers
  • fix(database): validate index methods
  • fix(querybuilder): reject invalid foreign key actions
  • fix(querybuilder): validate rendered isolation levels
  • fix(querybuilder): validate rendered lock modes
  • fix(querybuilder): reject invalid transaction kinds
  • fix(querybuilder): reject invalid statement kinds
  • fix(querybuilder): reject unknown table options
  • fix(querybuilder): reject mismatched ddl payloads
  • fix(querybuilder): reject mismatched truncate payloads
  • fix(postgres): reject invalid merge discriminants
  • fix(querybuilder): reject invalid insert sources
  • fix(querybuilder): reject invalid conflict discriminants
  • fix(querybuilder): harden query and mutation runtime guards
  • fix(querybuilder): validate ddl table targets
  • fix(querybuilder): type dialect driver factories

Tests

  • test(querybuilder): cover postgres cte scoping
  • test(database): cover postgres schema diff edge cases
  • test(querybuilder): cover missing projection decode
  • test(querybuilder): reproduce mysql legality type gaps
  • test(querybuilder): reproduce renderer row type gap
  • test(querybuilder): reproduce mysql runtime legality gaps
  • test(querybuilder): reproduce mysql nested json delete path bug
  • test(querybuilder): reproduce mysql json path parameter order bug
  • test(querybuilder): reproduce ddl check qualification bug
  • test(querybuilder): reproduce postgres drop index schema bug
  • test(querybuilder): reproduce incomplete plan render bug
  • test(querybuilder): reproduce set operand runtime validation bug
  • test(querybuilder): reproduce ignored statement filter bug
  • test(querybuilder): reproduce ignored merge returning bug
  • test(querybuilder): reproduce ignored distinct modifier bug
  • test(querybuilder): reproduce ignored offset modifier bug
  • test(querybuilder): reproduce ignored limit modifier bug
  • test(querybuilder): reproduce ignored order modifier bug
  • test(querybuilder): reproduce ignored lock modifier bug
  • test(querybuilder): reproduce ignored ddl returning bug
  • test(querybuilder): cover transaction source rejection
  • test(querybuilder): reproduce ignored having predicate bug
  • test(querybuilder): reproduce ignored group modifier bug
  • test(querybuilder): reproduce ignored join modifier bug
  • test(querybuilder): reproduce ignored transaction filter bug
  • test(querybuilder): reproduce ignored ddl index returning bug
  • test(querybuilder): reproduce ignored ddl drop filter bug
  • test(querybuilder): reproduce ignored ddl index filter bug
  • test(querybuilder): reproduce nested projection decode gap
  • test(querybuilder): reproduce streamed nested decode gap
  • test(querybuilder): cover byte and array decoding
  • test(querybuilder): align implication row fixtures
  • test(querybuilder): cover executor value mapping params
  • test(database): cover migration file parsing
  • test(database): reproduce quoted enum column ddl
  • test(database): typecheck migration parser coverage
  • test(database): reproduce quoted enum filter gap
  • test(database): reproduce quoted qualified type canonicalization
  • test(postgres): reproduce quoted enum type name types
  • test(postgres): reproduce quoted sequence nextval
  • test(database): reproduce quoted sequence pull gap
  • test(database): reproduce quoted type kind inference
  • test(database): reproduce quoted enum array pull gap
  • test(database): reproduce dotted sequence pull gap
  • test(database): reproduce discovered dotted enum identity collapse
  • test(database): reproduce quoted index support identifier rendering
  • test(database): reproduce quoted migration table parsing
  • test(database): reproduce introspected dotted table identity collapse
  • test(querybuilder): reproduce dotted json path predicate key collapse
  • test(querybuilder): cover dotted predicate column keys
  • test(querybuilder): reproduce set projection dotted path collision
  • test(querybuilder): cover dotted set operand type shape
  • test(querybuilder): reproduce dotted source dependency collision
  • test(querybuilder): cover dotted source dependencies
  • test(querybuilder): reproduce dotted table source promotion
  • test(querybuilder): reproduce dotted source promotion types
  • test(database): reproduce malformed migration table config
  • test(package): cover dotted source types in pack smoke
  • test(querybuilder): reproduce dotted grouping key collision
  • test(querybuilder): reproduce json grouping key support
  • test(querybuilder): reproduce json grouping path collisions
  • test(querybuilder): reproduce regex grouping key support
  • test(querybuilder): reproduce collate grouping key support
  • test(querybuilder): reproduce collate grouping type identity
  • test(querybuilder): reproduce function grouping key support
  • test(querybuilder): reproduce exists grouping key support
  • test(querybuilder): cover quantified subquery grouping
  • test(querybuilder): reproduce derived alias collision
  • test(querybuilder): reproduce derived alias type gaps
  • test(querybuilder): cover curried derived alias types
  • test(querybuilder): reproduce cte lateral alias type gaps
  • test(querybuilder): reproduce excluded expression type gap
  • test(querybuilder): reproduce values row type gaps
  • test(querybuilder): reproduce unnest length type gap
  • test(querybuilder): reproduce mysql merge type gap
  • test(querybuilder): reproduce empty table option type gaps
  • test(querybuilder): reproduce foreign key arity type gap
  • test(querybuilder): reproduce rich index shape gap
  • test(querybuilder): reproduce rich index column type gaps
  • test(querybuilder): reproduce rich constraint column type gaps
  • test(querybuilder): reproduce foreign key column type gaps
  • test(querybuilder): cover mysql foreign key column types
  • test(querybuilder): reproduce schema table option type gaps
  • test(querybuilder): reproduce postgres schema dialect leak
  • test(querybuilder): reproduce class option column type gaps
  • test(querybuilder): reproduce cross-dialect source type gaps
  • test(querybuilder): reproduce cross-dialect join type gaps
  • test(querybuilder): cover cross-dialect mutation targets
  • test(querybuilder): cover cross-dialect ddl targets
  • test(querybuilder): cover cross-dialect expressions
  • test(querybuilder): cover cross-dialect merge inputs
  • test(querybuilder): reproduce cross-dialect structured source expressions
  • test(querybuilder): reproduce cross-dialect table function expressions
  • test(querybuilder): reproduce distinct on source gap
  • test(querybuilder): reproduce mixed dialect render gap
  • test(querybuilder): reproduce conflict target predicate source gap
  • test(querybuilder): cover cross-dialect merge predicates
  • test(querybuilder): cover complete merge plans
  • test(querybuilder): reproduce empty merge action gap
  • test(querybuilder): cover cross-dialect merge clauses
  • test(querybuilder): reproduce mixed mutation tuple targets
  • test(querybuilder): reproduce widened mutation value dialect gap
  • test(querybuilder): cover widened predicate dialects
  • test(querybuilder): reproduce tuple update value dialect gap
  • test(querybuilder): reproduce upsert value dialect gaps
  • test(querybuilder): reproduce mutation value dialect gaps
  • test(querybuilder): reproduce insert source dialect gap
  • test(querybuilder): cover invalid returning selections
  • test(querybuilder): cover mutation clause dialects
  • test(querybuilder): cover cross-dialect set operands
  • test(querybuilder): cover wrapped source dialects
  • test(querybuilder): cover lateral source dialects
  • test(executor): reproduce custom projection alias decode
  • test(renderer): reproduce invalid custom projection path
  • test(querybuilder): reproduce values row order mismatch
  • test(querybuilder): reproduce empty values rows
  • test(querybuilder): reproduce invalid unnest values
  • test(mysql): cover unsupported generateSeries rendering
  • test(querybuilder): cover numeric clause dialects
  • test(querybuilder): reproduce incomplete derived sources
  • test(querybuilder): reproduce premature lateral joins
  • test(querybuilder): reproduce incomplete set operands
  • test(querybuilder): reproduce incomplete insert select source
  • test(querybuilder): reproduce mutation subquery expression
  • test(querybuilder): cover cte source rendering
  • test(querybuilder): reproduce duplicate nested ctes
  • test(mysql): reproduce data modifying cte
  • test(querybuilder): reproduce mutation inline sources
  • test(querybuilder): cover curried mutation derived source
  • test(querybuilder): reproduce cross join lost facts
  • test(querybuilder): reproduce structured from lost facts
  • test(querybuilder): reproduce set result lost facts
  • test(querybuilder): reproduce unsound set narrowing
  • test(package): cover packed query type facts
  • test(json): reproduce createMissing false set type
  • test(mysql): reproduce json set createMissing false
  • test(mysql): reproduce json array insert rendering
  • test(mysql): reproduce negative json index rendering
  • test(mysql): reproduce negative json slice rendering
  • test(mysql): reproduce recursive json path rendering
  • test(json): reproduce wildcard mutation path types
  • test(mysql): reproduce scalar json length type
  • test(json): reproduce array json keys type
  • test(mysql): reproduce json type name casing
  • test(mysql): reproduce unsupported json helper types
  • test(postgres): reproduce json keys array rendering
  • test(postgres): reproduce json scalar text types
  • test(postgres): reproduce curried json helper types
  • test(json): reproduce negative tuple index type
  • test(json): reproduce mutation value widening
  • test(pack): cover exported json path types
  • test(types): cover null-leading coalesce strings
  • test(executor): cover record cast decoding
  • test(executor): reproduce json string scalar decode
  • test(executor): reproduce numeric-looking json string decode
  • test(json): reproduce nullable helper union types
  • test(executor): cover instant normalization
  • test(executor): reproduce json null schema decode
  • test(executor): reproduce non-finite json numbers
  • test(executor): reproduce normalized json number validation
  • test(postgres): reproduce json string mutation encoding
  • test(mysql): cover json string insert encoding
  • test(postgres): cover json helper string encoding
  • test(mysql): cover json helper string encoding
  • test(executor): reproduce normalized non-finite numbers
  • test(executor): reproduce normalized aggregate infinity
  • test(executor): cover normalized window finite numbers
  • test(executor): reproduce decimal negative zero
  • test(executor): reproduce impossible local date
  • test(executor): reproduce normalized impossible local date
  • test(executor): reproduce impossible temporal values
  • test(executor): reproduce noncanonical normalized numeric strings
  • test(executor): reproduce noncanonical normalized bigint strings
  • test(executor): reproduce unpadded early Date years
  • test(postgres): reproduce unvalidated insert params
  • test(postgres): reproduce unvalidated unnest insert params
  • test(postgres): reproduce unvalidated literal insert params
  • test(postgres): reproduce unvalidated normalized insert values
  • test(postgres): cover mutation value canonicalization
  • test(json): use valid mutation UUID fixtures
  • test(executor): reproduce prefixed local date coercion
  • test(executor): reproduce hex numeric string coercion
  • test(json): reproduce control character path escaping
  • test(mysql): reproduce loose error catalog guards
  • test(errors): reproduce loose numeric field parsing
  • test(executor): reproduce non-plain json object acceptance
  • test(executor): cover normalized json object domain
  • test(postgres): cover invalid date insert objects
  • test(rendering): reproduce invalid date literal params
  • test(sqlite): cover json merge structured operands
  • test(sqlite): cover partial conflict target execution
  • test(sqlite): cover returning mutations
  • test(sqlite): cover right and full joins
  • test(sqlite): cover composed executor workflows

CI

  • ci: fix package manager setup caches