What's Changed
Changes and new Features
- feat: support distinctrow keyword by @EmilyOng in #2238
- Exasol: IMPORT/EXPORT by @ssteinhauser in #2256
- Add pluginRepositories to pom.xml by @davyboyhayes in #2284
- Fix[2283] - Fix broken ParserKeywordsUtilsTest by @davyboyhayes in #2286
- Fix[2288] - Support parenthesed expressions within Between by @davyboyhayes in #2289
- Fix[2290] - Fix overeager lambda function parsing by @davyboyhayes in #2293
- support opengauss "on duplicate key update nothing" grammar by @zhangconan in #2303
- feat(parser): allow COLLATE in ORDER BY clauses (issue #2245) by @ldaIas in #2277
- Fix[2306] - Adds support for Trino UDF by @davyboyhayes in #2307
- Fix[2312] - Fixes issue with array in function declaration by @davyboyhayes in #2313
- Added new features to support the complete delete using syntax of pg database, such as subqueries, etc. by @zhangconan in #2316
- [feat] Support for LOCK-Statements by @ANeumann82 in #2321
- [feat] Support for FOR READ ONLY/FOR FETCH ONLY by @ANeumann82 in #2325
- [feat/refactor] AllColumns and AllTableColumns-Support for JSON_OBJECT by @ANeumann82 in #2323
- Update README.md by @hayssams in #2331
- feat: add PostgreSQL Row Level Security (RLS) support by @eyalge-gong in #2345
- [fix] Enable qualified table name for DROP INDEX command by @tonhuisman in #2344
- [fix] Add 'K_DATA' to KeywordOrIdentifier to allow usages of 'data' as an identifier by @willneedham93 in #2340
- Support PostgreSQL-specific [CREATE SEQUENCE name START n ...] by @mjog in #2348
- refactor: deprecate Join.getRightItem() and remove duplicate call by @zhezzz in #2370
- Add support for JOIN FETCH by @dengliming in #2375
- Add support for ClickHouse MATERIALIZED column in CREATE TABLE by @dengliming in #2377
- Add support for ClickHouse PREWHERE clause by @dengliming in #2378
- [feat] Support for the legacy Postgres named parameter by @bigdream96 in #2374
- Add support for insert as row_alias by @dengliming in #2383
- Fix ALTER TABLE with a USING INDEX clause by @dengliming in #2384
- Add support clickhouse GLOBAL ANY/ALL JOIN syntax variants by @dengliming in #2385
- Fix oracle outer join case with nvl/coalesce by @dengliming in #2386
- Add support for multiple Trino JSON functions by @davyboyhayes in #2382
- Fix alter table index descending by @dengliming in #2387
- Add support MySQL SPATIAL KEY by @dengliming in #2388
- Fix broken maven central svg url by @dengliming in #2389
- Add support SELECT SAMPLE 0.1/OFFSET and CREATE TABLE SAMPLE BY by @dengliming in #2390
- Add support MySQL named UNIQUE index in ALTER TABLE by @dengliming in #2391
- fix: support SQL Server ORDER BY ... FOR XML PATH parsing in subqueries by @dengliming in #2392
- fix: support ClickHouse parametric aggregate calls by @dengliming in #2393
- feat: add support for Oracle INSERT ALL/FIRST with WHEN branches by @dengliming in #2394
- fix(clickhouse): support SELECT ... SETTINGS by @dengliming in #2395
- feat: support EXPLAIN for DML and simplify ExplainStatement by @dengliming in #2396
- feat: support PostgreSQL 18 RETURNING OLD/NEW by @dengliming in #2398
- fix(parser): resolve grammar LOOKAHEAD conflicts by @dengliming in #2399
- Add support CREATE SEQUENCE AS data type by @dengliming in #2400
- Add support parse SEARCH BREADTH/DEPTH FIRST in recursive CTEs by @dengliming in #2402
- fix: restore GENERATED ALWAYS AS IDENTITY parsing by @dengliming in #2397
- Fix nested PostgreSQL composite field access after cast by @dengliming in #2404
- Add support MySQL functional index key parts in ALTER/CREATE INDEX by @dengliming in #2405
- fix(parser): support KEY-prefixed expressions like KEY chain.entity by @dengliming in #2409
- Fix dollar-quoted CREATE FUNCTION statement splitting by @dengliming in #2410
- fix(parser): parse mysql fulltext AGAINST concat expression by @dengliming in #2413
- test: add regression for ALTER TABLE MODIFY COLUMN CHARACTER SET by @dengliming in #2415
- Add support MySQL SELECT INTO OUTFILE/DUMPFILE by @dengliming in #2418
- fix(parser): pass modifier to ExceptOp/MinusOp constructors (#2419) by @queelius in #2420
- [feat] Support for JSON_TABLE by @ANeumann82 in #2328
- fix: split CCJSqlParserTokenManager static initializers to avoid 64KB… by @hayssams in #2425
- Enhance FOR UPDATE support by @rrobetti in #2426
- [Fix] #2443 - NPE In TableNamesFinder with AnalyticExpression by @davyboyhayes in #2444
- use Locale.ROOT for case-insensitive keyword normalisation by @dxbjavid in #2437
- Add support PostgreSQL ROWS FROM table functions by @dengliming in #2416
- fix: add 'K_TYPE' to KeywordOrIdentifier to allow 'type' as a column name by @minleejae in #2448
- fix: support nested parametric data types as CAST target by @fudianchn in #2451
- fix: accept VISIBLE/INVISIBLE index and column attributes in CREATE TABLE and CREATE INDEX by @aparajon in #2449
- fix: allow arbitrary column aliases in LATERAL VIEW by @fudianchn in #2452
- fix: stop 0x hex literal from swallowing trailing whitespace (#2435) by @fudianchn in #2450
- feat: support MERGE ... WHEN NOT MATCHED BY TARGET / BY SOURCE (#2421) by @fudianchn in #2453
- fix: support ClickHouse tuple positional access by @jianjindream in #2454
- feat: add support for the XMLTABLE table function by @fudianchn in #2458
- fix: allow UNIQUE INDEX in CREATE TABLE by @fudianchn in #2457
- fix(parser): keep parenthesized multi-param lambda as first function arg by @ivanclarksoft in #2455
- fix: support PostgreSQL GROUPS window frames by @jianjindream in #2460
- fix: model interval qualifier as a structured property by @fudianchn in #2456
- fix: support SQL Server CREATE INDEX INCLUDE columns by @jianjindream in #2462
- fix: support PostgreSQL composite row expansion (function()).* by @fudianchn in #2463
- fix: allow scalar subquery as LIMIT row count (#2359) by @fudianchn in #2464
- fix: support ClickHouse C-style ternary operator (? :) (#2436) by @fudianchn in #2466
- fix: support ClickHouse ORDER BY WITH FILL and INTERPOLATE (#2467) by @fudianchn in #2469
- fix: allow GROUPS as identifier by making it a non-reserved keyword (#2473) by @fudianchn in #2474
- feat: support SQL Server OPTION query hints (#161) by @fudianchn in #2472
- feat: support CREATE DATABASE (#2070) by @fudianchn in #2471
- fix: do not treat a named parameter ':' as the ternary else separator (#2475) by @fudianchn in #2476
- fix: treat a positional parameter '?' as a valid end of the ternary then-branch by @fudianchn in #2477
- fix: reject illegal MERGE WHEN NOT MATCHED clause pairings (#2480) by @fudianchn in #2481
- fix: complete TablesNamesFinder traversal for piped queries, DML side clauses and analytic functions (#2478) by @fudianchn in #2479
- feat(parser): add support for ClickHouse [LEFT] ARRAY JOIN syntax by @watashi-00 in #2482
- fix: keep all clauses when deparsing SELECT without FROM (#2483) by @fudianchn in #2484
- Separate JSON operators with spaces so #> deparses correctly by @dngr2 in #2487
- feat: complete SQL Server OPTION query hint support by @fudianchn in #2486
- feat: parse BigQuery JSON string literals as implicit casts by @hayssams in #2488
- fix: support Oracle inline constraint states in CREATE TABLE by @dengliming in #2491
- avoid quadratic backtracking when parsing bracketed server names by @dxbjavid in #2489
- feat(parser): support MySQL PROCEDURE ANALYSE clause by @dengliming in #2492
- fix: support character set introduced string literals by @dengliming in #2493
- fix(parser): support IF EXISTS in ALTER TABLE MODIFY COLUMN by @dengliming in #2494
- feat(parser): support DuckDB MAP literals and PIVOT queries by @dengliming in #2496
- avoid quadratic backtracking in the oracle hint comment pattern by @dxbjavid in #2495
- fix(parser): support Oracle USING INDEX TABLESPACE in ALTER TABLE ADD CONSTRAINT by @dengliming in #2498
- fix(parser): support CHARACTER SET in CAST CHAR types by @dengliming in #2497
- fix(parser): support leading CONTENT/DOCUMENT keyword in XMLPARSE by @dengliming in #2501
- fix(parser): support MySQL index options and prefix-length key parts in index DDL by @minleejae in #2505
- fix(parser): support PostgreSQL # binary operator (bitwise XOR / geometric intersection) by @fudianchn in #2507
- fix(parser): support CAST to an array type for MySQL multi-valued indexes by @minleejae in #2506
- fix(parser): parse qualified columns in GROUP BY by @jianjindream in #2504
- feat(parser): support MySQL # line comments behind allowHashLineComments by @fudianchn in #2508
- feat(parser): turn on the dialect's lexer feature preset in withDialect by @fudianchn in #2511
- feat(parser): support double quoted string literals behind allowDoubleQuotedStrings by @fudianchn in #2513
- feat(parser): concatenate adjacent string literals behind adjacentStringLiterals by @fudianchn in #2514
- feat(parser): add BIGQUERY, DATABRICKS and SNOWFLAKE dialect presets by @fudianchn in #2515
- fix: collect tables from all SELECT and DML trailing clauses in TablesNamesFinder by @fudianchn in #2517
- fix: prevent bare partition columns from inheriting the previous item's value by @fudianchn in #2518
- fix: memoize long-chain predicate walks behind a size threshold by @fudianchn in #2520
- Add structured MySQL CREATE TABLE partition parsing by @minleejae in #2521
- Support PostgreSQL CREATE INDEX header variants by @minleejae in #2527
- Support MySQL CHECK constraint enforcement by @minleejae in #2528
- fix(parser): allow VERSION in ALTER column clauses by @minleejae in #2530
- fix(parser): model ALTER COLUMN nullability actions by @minleejae in #2529
- feat(parser): add column data type fragment parser by @minleejae in #2531
- fix(parser): model PostgreSQL declarative partitions by @minleejae in #2535
- fix(parser): model PostgreSQL CREATE INDEX clauses by @minleejae in #2536
- test: fail the build when TablesNamesFinder misses a visitor dispatch method by @fudianchn in #2538
- feat(parser): model ColDataType precision and scale as structured properties by @minleejae in #2539
- fix(parser): distinguish MySQL constraint and index names by @minleejae in #2534
- fix(parser): preserve unique index comments in ALTER TABLE by @minleejae in #2533
- fix(parser): model MySQL column type modifiers by @minleejae in #2537
- Model MySQL ALTER TABLE partition operations by @minleejae in #2540
- Support structured MySQL table definitions by @minleejae in #2541
- Model MySQL ANALYZE TABLE statements by @minleejae in #2542
- Support MySQL ALTER TABLE rename variants by @minleejae in #2543
- Model MySQL CREATE SCHEMA options by @minleejae in #2544
- Model MySQL DROP object lists by @minleejae in #2545
- Model MySQL CREATE USER statements by @minleejae in #2546
- Model MySQL CREATE EVENT and ALTER EVENT by @minleejae in #2547
- Model MySQL CREATE TRIGGER statements by @minleejae in #2548
- feat(parser): enhance PostgreSQL CREATE POLICY support by @minleejae in #2549
- feat(parser): parse navigation chains after array subscripts by @fudianchn in #2550
- fix(parser): parse INSERT ON CONFLICT after a join's trailing ON by @fudianchn in #2551
- feat(parser): model PostgreSQL schema DDL clauses by @minleejae in #2552
- fix(parser): parse stacked NOT prefixes as nested NotExpression (#1170) by @fudianchn in #2556
- build: pin file.encoding so the Maven build works on Windows by @knutwannheden in #2565
- feat(parser): model PostgreSQL type domain and extension DDL by @minleejae in #2553
- Support PostgreSQL parenthesized EXPLAIN options by @minleejae in #2558
- Support Redshift materialized view BACKUP clauses by @minleejae in #2557
- Support SQL Server typed XML schema collections by @minleejae in #2559
- Support Oracle XMLSERIALIZE CONTENT and DOCUMENT forms by @minleejae in #2560
- Support SQL Server ALTER TABLE ADD DEFAULT constraints by @minleejae in #2561
- fix(parser): parse Oracle outer join operator (+) on BETWEEN operands (#672) by @fudianchn in #2564
- Support structured PostgreSQL publication and subscription DDL by @minleejae in #2554
- Support structured PostgreSQL role, privilege and trigger DDL by @minleejae in #2555
- fix(parser): parse COMMENT ON ... IS NULL as comment removal (#2562) by @sundongkim-dev in #2563
- Fix DISTINCT traversal and share optional select-item visits by @minleejae in #2577
- Analyse analytic and conversion functions with complete window traversal by @minleejae in #2579
- Validate data-modifying CTEs through statement validators by @minleejae in #2578
- Fix parseStatements failure propagation and executor cleanup by @minleejae in #2568
- Support SQL Server table variables through shared table references by @minleejae in #2581
- Preserve EXEC bind arguments and support OUTPUT parameters by @minleejae in #2580
- Support PostgreSQL conflict index elements, OVERRIDING USER and MERGE RETURNING by @minleejae in #2569
- Complete MySQL index options and share CREATE INDEX rendering by @minleejae in #2567
- Support ksqlDB window grace periods and EMIT FINAL by @minleejae in #2571
- Support PostgreSQL tagged dollar strings and preserve literal bodies by @minleejae in #2572
- Support Informix trailing constraint names and share constraint rendering by @minleejae in #2570
- Support SQL Server clustering on primary key and unique constraints by @minleejae in #2582
- Support recursive CTE CYCLE clauses and share recursive clause rendering by @minleejae in #2566
- Support MySQL SELECT INTO user variables and share INTO rendering by @minleejae in #2583
- Support dialect-specific CREATE INDEX definitions by @minleejae in #2586
- Support Oracle anonymous blocks and implicit procedure calls by @minleejae in #2592
- Align empty input handling for statement parsing by @minleejae in #2594
- Support Doris distribution hints and share JOIN rendering by @minleejae in #2584
- Resolve shadowed contextual keyword and data-type token warnings by @minleejae in #2597
- Classify ODBC timestamp interval arguments as time units by @minleejae in #2596
- Support opt-in legacy MySQL GROUP BY ordering by @minleejae in #2595
- Support CockroachDB ALTER PRIMARY KEY with structured hash options by @minleejae in #2585
- Structure SQL Server routine operations and table return types by @minleejae in #2593
- fix(parser): parse Oracle outer join operator (+) after LIKE / SIMILAR TO operands (#2598) by @fudianchn in #2600
- Support Teradata UPDATE FROM before SET with shared clause rendering by @minleejae in #2587
- Split PostgreSQL hash operators from adjacent identifiers by @minleejae in #2588
- Accept SQL Server CREATE TABLE trailing commas with shared element parsing by @minleejae in #2603
- Support PostgreSQL DO wrappers with preserved routine body literals by @minleejae in #2589
- Support SQL Server XML methods on subquery results by @minleejae in #2590
- fix(parser): preserve Oracle PRIOR position on all condition expressions (#2601) by @fudianchn in #2602
- Support SQL Server INSERT BULK declarations by @minleejae in #2591
- Support SQL Server boolean SET options with shared statement rendering by @minleejae in #2604
- Support SQL Server SET IDENTITY_INSERT with a structured table target by @minleejae in #2605
- fix: keep CREATE TABLE option tokens in sync with typed options by @minleejae in #2606
- fix: preserve structured column options when editing specifications by @minleejae in #2608
- fix: share expression-aware table constraint rendering by @minleejae in #2609
- feat: preserve ALTER COLUMN default expressions in the AST by @minleejae in #2611
- fix: traverse and deparse structured table partitions by @minleejae in #2610
- refactor: share PostgreSQL routine argument grammar by @minleejae in #2613
- fix: recognise set operation quantifiers written in any case by @knutwannheden in #2614
- fix: preserve ordered table elements through legacy list edits by @minleejae in #2607
- feat: reuse table constraint grammar for PostgreSQL ALTER ADD by @minleejae in #2612
- fix: span a binary condition's node from its left operand by @knutwannheden in #2615
- feat: preserve column default expressions in table definitions by @minleejae in #2616
- Support SQL large-object names through shared column type parsing by @minleejae in #2617
- Visit pipe expressions through shared deparser paths by @minleejae in #2618
- Support structured XMLFOREST arguments with aliases by @minleejae in #2619
- Preserve ASOF joins through shared join rendering by @minleejae in #2621
- Structure FOR PORTION intervals in UPDATE and DELETE by @minleejae in #2622
- Validate every UPDATE assignment through shared UpdateSet traversal by @minleejae in #2623
- Render DML RETURNING expressions through shared visitor handling by @minleejae in #2624
- Reuse common JOIN traversal when discovering UPDATE tables by @minleejae in #2625
- Share parser execution and preserve cancellation signals by @minleejae in #2626
- Protect shared dialect presets from external mutation by @minleejae in #2627
- Keep ALTER key accessors connected to structured index state by @minleejae in #2628
- Fix benchmark configuration and isolated parser class loading by @minleejae in #2629
- Render DML source clauses through shared visitor paths by @minleejae in #2630
- Clarify PostgreSQL DO support and verify the reported block by @minleejae in #2633
New Contributors
- @zhangconan made their first contribution in #2303
- @ldaIas made their first contribution in #2277
- @ANeumann82 made their first contribution in #2321
- @hayssams made their first contribution in #2331
- @eyalge-gong made their first contribution in #2345
- @tonhuisman made their first contribution in #2344
- @willneedham93 made their first contribution in #2340
- @mjog made their first contribution in #2348
- @zhezzz made their first contribution in #2370
- @bigdream96 made their first contribution in #2374
- @queelius made their first contribution in #2420
- @rrobetti made their first contribution in #2426
- @dxbjavid made their first contribution in #2437
- @fudianchn made their first contribution in #2451
- @aparajon made their first contribution in #2449
- @jianjindream made their first contribution in #2454
- @ivanclarksoft made their first contribution in #2455
- @watashi-00 made their first contribution in #2482
- @dngr2 made their first contribution in #2487
- @knutwannheden made their first contribution in #2565
- @sundongkim-dev made their first contribution in #2563
Full Changelog: jsqlparser-5.3...jsqlparser-5.4