Releases: nene/sql-parser-cst
Releases · nene/sql-parser-cst
0.21.2
0.21.1
0.21.0
Breaking changes
- Replace
distinctKw
,hints
andasStructOrValueKw
fields inselect_clause
withmodifiers
field- Rename
mysql_hint
tomysql_modifier
- Parse
DISTINCT
andALL
not as plain keywords, but as new separate nodes - Parse
AS STRUCT / VALUE
asselect_as_struct
/select_as_value
nodes.
- Rename
- Rename
hints
field tomodifiers
ininsert_clause
,update_clause
,delete_clause
. - Replace plain
ASC/DESC
keyword withsort_direction_*
nodes (both inorder_by_clause
andconstraint_primary_key
) - Change
tablesample_expr
to allow for custom methods, changing type oftablesampleKw
field - Remove single
ROLLUP()
inGROUP BY
restriction, changing the type ofcolumns
field
PostgreSQL support
- Query syntax:
- Support
UPDATE
,INSERT
,DELETE
insideWITH
clause - Support
GROUP BY GROUPING SETS, CUBE(), ()
- Support
CYCLE
clause inWITH
- Support
SEARCH
clause inWITH
- Support
ORDER BY .. USING
operator - Support column aliases in table aliases
- Support table function with column definitions
- Support
ROWS FROM
- Support
LATERAL
subqueries and table functions - Support
REPEATABLE
clause inTABLESAMPLE
- Support
table *
andONLY table
inheritance syntax - Support
SELECT DISTINCT ON ()
- Support
- Operators:
- Support
:=
syntax for named function arguments - Support
~
as both a unary and binary operator - Support
OPERATOR()
syntax
- Support
Bugfixes
- Properly support full table names in
TABLE
clause/statement - Restrict the type of
expr
field incommon_table_expr
node - Remove
!
operator support from SQLite - Fix
~
operator precedence in PostgreSQL
Internals
- Switch to Peggy 3
0.20.0
Breaking changes
- Removed
insert_columns_clause
node. Reintroducedcolumns
field toinsert_clause
. This effectively reverts the change done in 0.18.0. - Related to the above, PARTITION selection in MySQL INSERT and DELETE statements is now parsed as
partitioned_table
. Thepartition_clause
node has been removed. - PostgreSQL
array_bounds
node now usesempty
node instead of emptylist_expr
node to represent missing number in definition likeINT[]
. - Renamed
quantifier
field inquantifier_expr
node toquantifierKw
for consistency with other keyword-containing fields. - Dropped unused
pair_expr
node.
New Features
- Named function arguments are now supported for PostgreSQL.
Bugfixes
- The
rowsKw
field offetch_clause
node is now mandatory. It was always present already, now also correct in type definition. - Fixed parsing of PostgreSQL
GROUP BY DISTINCT
- Fixed parsing of MySQL full text match expressions.
0.19.0
Breaking changes
- Unary
+
is now parsed as an operator, not as part of a number data_type
has been renamed tonamed_data_type
select_clause
columns are now optionalSymbolOperator
type is now plain string (because it needs to accommodate custom PostgreSQL operators)RowConstructor
type is now part ofExpr
type
SQLite bugfixes
- Support unicode letters in SQLite identifiers
Improved PostgreSQL support
- Use the actual Postgres reserved words list
- Nested block-comments
- Remove incorrect #-comment support from Postgres
- Strings:
- Dollar-quoted strings
- String with C-style escapes
- Unicode strings
- Repeated-quote escapes in E-strings
- Bit-string blobs
- Identifiers:
- Unicode identifiers
- Literals:
- JSON & JSONB literals
- INTERVAL literals
- ROW() constructor
- EXTRACT() expression
- Special paren-less functions
- All keywords can be used in explicit aliases
- Operators:
- IS UNKNOWN
- IS DISTINCT FROM
- ISNULL
- NOTNULL
- % operator
- ^ operator
- || operator
- Bitwise ~ and # operators
- ILIKE
- BETWEEN SYMMETRIC
- SIMILAR TO
- IS NORMALIZED
- AT TIME ZONE
- COLLATE
- Array-access operator
- Array-slice operator
- :: cast operator
- All the builtin PostgreSQL operators
- Almost fully correct PostgreSQL operator precedence
- Types:
- All builtin data types
- Special Object Identifier types
- multi-dimensional array types
- TIME types WITH/WITHOUT TIME ZONE
- INTERVAL type
- Custom data types
- SELECT support:
- Support NULLS FIRST/LAST
- LIMIT offset,count is not supported
- Support FETCH..OFFSET
- Support FOR-clause
- Support INTO TABLE clause
- Support empty SELECT
- Support GROUP BY DISTINCT
- Support LIMIT ALL
- Support basic TABLE clause
- Basic TRUNCATE support
- Basic ANALYZE support
- Basic EXPLAIN support
- Basic EXECUTE support
Improved MySQL & MariaDB support
- Support FOR-clause in MySQL and MariaDB
- Support LOCK IN SHARE MODE in MySQL/MariaDB
0.18.0
Breaking changes
columns
field has been moved frominsert_clause
to newinsert_columns_clause
.
This is because MySQL allowspartition_clause
to be optionally placed betweeninsert_clause
and the list of columns.truncateTableKw
intruncate_stmt
has been replaced withtruncateKw
andtableKw
fields.
Improved MySQL/MariaDB support
- Support INSERT..SET
- Support PARTITION clause in INSERT
- Support TABLE statements
- Support ON DUPLICATE KEY UPDATE clause
- Support row and columns aliases in INSERT
- Support VALUES() function
- Support RENAME TABLE statement
- Support basic ALTER VIEW
- Support unicode and $ in identifiers
- Allow identifiers to start with $
Initial PostgeSQL support
Experimental support for Postgres. This is really more on the level of "please don't use it".
- double-quoted identifiers
- HEX numbers
- Basic Postgres strings
- basic INSERT statement
- For now support the same data types as SQLite
- Basic transactions
- unicode and $ in identifiers
- binary numbers
- octal numbers
- Basic array literals