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
289 changes: 87 additions & 202 deletions src/grammar/trino/TrinoSql.g4

Large diffs are not rendered by default.

27 changes: 1 addition & 26 deletions src/lib/trino/TrinoSql.interp

Large diffs are not rendered by default.

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

Large diffs are not rendered by default.

15,185 changes: 6,915 additions & 8,270 deletions src/lib/trino/TrinoSqlParser.ts

Large diffs are not rendered by default.

227 changes: 0 additions & 227 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