Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 17 additions & 17 deletions benchmark_reports/cold_start/trino.benchmark.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@
TrinoSQL

### Report Time
2024/12/18 14:50:08
2026/9/23 18:08:08

### Device
macOS 15.0.1
(8) arm64 Apple M1 Pro
macOS 15.7.9
(8) arm64 Apple M3
16.00 GB

### Version
`nodejs`: v21.6.1
`dt-sql-parser`: v4.1.0-beta.0
`nodejs`: v22.23.1
`dt-sql-parser`: v4.5.1
`antlr4-c3`: v3.3.7
`antlr4ng`: v2.0.11

Expand All @@ -23,17 +23,17 @@ Cold Start
### Report
| Benchmark Name | Method Name |SQL Rows|Average Time(ms)|
|-----------------|---------------------------------|--------|----------------|
| Query Collection| getAllTokens | 1015 | 91 |
| Query Collection| validate | 1015 | 94 |
| Update Table | getAllTokens | 1011 | 114 |
| Update Table | validate | 1011 | 127 |
| Insert Columns | getAllTokens | 1001 | 214 |
| Insert Columns | validate | 1001 | 204 |
| Create Table | getAllTokens | 1002 | 28 |
| Create Table | validate | 1002 | 28 |
| Split SQL | splitSQLByStatement | 1001 | 72 |
| Collect Entities| getAllEntities | 1066 | 119 |
| Suggestion | getSuggestionAtCaretPosition | 1066 | 117 |
|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 108 |
| Query Collection| getAllTokens | 1015 | 90 |
| Query Collection| validate | 1015 | 86 |
| Update Table | getAllTokens | 1011 | 96 |
| Update Table | validate | 1011 | 99 |
| Insert Columns | getAllTokens | 1001 | 115 |
| Insert Columns | validate | 1001 | 118 |
| Create Table | getAllTokens | 1002 | 16 |
| Create Table | validate | 1002 | 17 |
| Split SQL | splitSQLByStatement | 1001 | 49 |
| Collect Entities| getAllEntities | 1066 | 110 |
| Suggestion | getSuggestionAtCaretPosition | 1066 | 109 |
|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 104 |


264 changes: 80 additions & 184 deletions src/grammar/trino/TrinoSql.g4

Large diffs are not rendered by default.

24 changes: 1 addition & 23 deletions src/lib/trino/TrinoSql.interp

Large diffs are not rendered by default.

328 changes: 0 additions & 328 deletions src/lib/trino/TrinoSqlListener.ts

Large diffs are not rendered by default.

14,603 changes: 6,691 additions & 7,912 deletions src/lib/trino/TrinoSqlParser.ts

Large diffs are not rendered by default.

206 changes: 0 additions & 206 deletions src/lib/trino/TrinoSqlVisitor.ts

Large diffs are not rendered by default.

19 changes: 18 additions & 1 deletion test/parser/trino/syntax/fixtures/create_function.sql
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,21 @@ CREATE FUNCTION example.default.meaning_of_life()
END;


CREATE FUNCTION meaning_of_life() RETURNS bigint RETURN 42;
CREATE FUNCTION meaning_of_life() RETURNS bigint RETURN 42;

-- Function with DECLARE and ELSEIF (variableDeclaration + elseIfClause inlined)
CREATE FUNCTION check_value(x integer)
RETURNS varchar
BEGIN
DECLARE result varchar DEFAULT 'unknown';
IF x > 100 THEN
SET result = 'high';
ELSEIF x > 50 THEN
SET result = 'medium';
ELSEIF x > 0 THEN
SET result = 'low';
ELSE
SET result = 'negative';
END IF;
RETURN result;
END;
37 changes: 37 additions & 0 deletions test/parser/trino/syntax/fixtures/match_recognize.sql
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,40 @@ SELECT * FROM orders MATCH_RECOGNIZE(
C AS totalprice > PREV(totalprice) AND totalprice <= A.totalprice,
D AS totalprice > PREV(totalprice)
);

-- ALL ROWS PER MATCH with empty match handling (emptyMatchHandling inlined)
SELECT * FROM orders MATCH_RECOGNIZE(
PARTITION BY custkey
ORDER BY orderdate
MEASURES
A.totalprice AS starting_price
ALL ROWS PER MATCH SHOW EMPTY MATCHES
AFTER MATCH SKIP PAST LAST ROW
PATTERN (A B*)
DEFINE
B AS totalprice < PREV(totalprice)
);

SELECT * FROM orders MATCH_RECOGNIZE(
PARTITION BY custkey
ORDER BY orderdate
MEASURES
A.totalprice AS starting_price
ALL ROWS PER MATCH OMIT EMPTY MATCHES
AFTER MATCH SKIP PAST LAST ROW
PATTERN (A B*)
DEFINE
B AS totalprice < PREV(totalprice)
);

SELECT * FROM orders MATCH_RECOGNIZE(
PARTITION BY custkey
ORDER BY orderdate
MEASURES
A.totalprice AS starting_price
ALL ROWS PER MATCH WITH UNMATCHED ROWS
AFTER MATCH SKIP PAST LAST ROW
PATTERN (A B*)
DEFINE
B AS totalprice < PREV(totalprice)
);
32 changes: 32 additions & 0 deletions test/parser/trino/syntax/fixtures/select.sql
Original file line number Diff line number Diff line change
Expand Up @@ -133,3 +133,35 @@ SELECT COALESCE(col1, col2, col3, col4) FROM table1 WHERE COALESCE(col1, col2) I
SELECT COALESCE(a + b, c * d, e) FROM table1;
SELECT COALESCE(CAST(a AS VARCHAR), b) FROM table1;
SELECT COALESCE(NULL, COALESCE(a, b), c) FROM table1;

-- TRIM with trimsSpecification (inlined)
SELECT TRIM(LEADING ' ' FROM ' hello ');
SELECT TRIM(TRAILING ' ' FROM ' hello ');
SELECT TRIM(BOTH ' ' FROM ' hello ');
SELECT TRIM(' hello ');

-- NORMALIZE with normalForm (inlined)
SELECT NORMALIZE(col1, NFD) FROM t1;
SELECT NORMALIZE(col1, NFC) FROM t1;
SELECT NORMALIZE(col1, NFKD) FROM t1;
SELECT NORMALIZE(col1, NFKC) FROM t1;

-- LISTAGG with overflow behavior (listAggOverflowBehavior inlined)
SELECT LISTAGG(name, ',') WITHIN GROUP (ORDER BY id) FROM t1;
SELECT LISTAGG(name, ',' ON OVERFLOW ERROR) WITHIN GROUP (ORDER BY id) FROM t1;
SELECT LISTAGG(name, ',' ON OVERFLOW TRUNCATE '...' WITH COUNT) WITHIN GROUP (ORDER BY id) FROM t1;
SELECT LISTAGG(name, ',' ON OVERFLOW TRUNCATE WITHOUT COUNT) WITHIN GROUP (ORDER BY id) FROM t1;

-- IGNORE/RESPECT NULLS (nullTreatment inlined)
SELECT FIRST_VALUE(id) IGNORE NULLS OVER (ORDER BY ts) FROM t1;
SELECT LAST_VALUE(id) RESPECT NULLS OVER (ORDER BY ts) FROM t1;

-- AT TIME ZONE (timeZoneSpecifier inlined)
SELECT ts AT TIME ZONE INTERVAL '8:00' HOUR TO MINUTE FROM t1;
SELECT ts AT TIME ZONE 'America/New_York' FROM t1;

-- JSON_EXISTS with error behavior (jsonExistsErrorBehavior inlined)
SELECT JSON_EXISTS(col, '$.name' TRUE ON ERROR) FROM t1;
SELECT JSON_EXISTS(col, '$.name' FALSE ON ERROR) FROM t1;
SELECT JSON_EXISTS(col, '$.name' UNKNOWN ON ERROR) FROM t1;
SELECT JSON_EXISTS(col, '$.name' ERROR ON ERROR) FROM t1;
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,7 @@ SELECT cust_key, value OVER w, label OVER w
B AS B.value < PREV (B.value),
C AS C.value > PREV (C.value)
);

-- GROUPS frame (frameExtent inlined)
SELECT id, SUM(val) OVER (ORDER BY ts GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM t1;
SELECT id, SUM(val) OVER (ORDER BY ts GROUPS UNBOUNDED PRECEDING) FROM t1;
Loading