From 0550f2bdcd61beb3e6af845ec47f94a948506841 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Sat, 7 Jun 2025 11:55:00 -0400 Subject: [PATCH] parser: fix more cast variants --- .../squawk_lexer__tests__floats.snap | 15 - crates/squawk_parser/src/grammar.rs | 110 ++- crates/squawk_parser/tests/data/ok/reset.sql | 4 + .../tests/data/ok/select_casts.sql | 57 ++ .../tests/data/ok/select_casts_pg17.sql | 1 + crates/squawk_parser/tests/data/ok/show.sql | 8 + .../data/regression_suite/groupingsets.sql | 22 +- .../tests/data/regression_suite/rules.sql | 6 +- .../snapshots/tests__alter_table_ok.snap | 18 +- .../tests__regression_foreign_key.snap | 7 +- .../tests__regression_groupingsets.snap | 113 +-- .../snapshots/tests__regression_horology.snap | 174 +--- .../snapshots/tests__regression_rules.snap | 85 +- .../tests__regression_suite_errors.snap | 7 +- .../tests__regression_timestamp.snap | 66 +- .../tests/snapshots/tests__reset_ok.snap | 45 + .../snapshots/tests__select_casts_ok.snap | 856 ++++++++++++++++++ .../tests__select_casts_pg17_ok.snap | 38 + .../tests/snapshots/tests__show_ok.snap | 84 ++ 19 files changed, 1250 insertions(+), 466 deletions(-) delete mode 100644 crates/squawk_lexer/src/snapshots/squawk_lexer__tests__floats.snap create mode 100644 crates/squawk_parser/tests/data/ok/select_casts_pg17.sql create mode 100644 crates/squawk_parser/tests/data/ok/show.sql create mode 100644 crates/squawk_parser/tests/snapshots/tests__select_casts_pg17_ok.snap create mode 100644 crates/squawk_parser/tests/snapshots/tests__show_ok.snap diff --git a/crates/squawk_lexer/src/snapshots/squawk_lexer__tests__floats.snap b/crates/squawk_lexer/src/snapshots/squawk_lexer__tests__floats.snap deleted file mode 100644 index 18ec2ef1..00000000 --- a/crates/squawk_lexer/src/snapshots/squawk_lexer__tests__floats.snap +++ /dev/null @@ -1,15 +0,0 @@ ---- -source: crates/squawk_lexer/src/lib.rs -expression: "lex(r#\"\n4664.E+5\n4664E+5\n4664E5\n4664e5\n \"#)" ---- -[ - "\n" @ Whitespace, - "4664.E+5" @ Literal { kind: Float { base: Decimal, empty_exponent: false } }, - "\n" @ Whitespace, - "4664E+5" @ Literal { kind: Float { base: Decimal, empty_exponent: false } }, - "\n" @ Whitespace, - "4664E5" @ Literal { kind: Float { base: Decimal, empty_exponent: false } }, - "\n" @ Whitespace, - "4664e5" @ Literal { kind: Float { base: Decimal, empty_exponent: false } }, - "\n " @ Whitespace, -] diff --git a/crates/squawk_parser/src/grammar.rs b/crates/squawk_parser/src/grammar.rs index ae48bc8c..57c99510 100644 --- a/crates/squawk_parser/src/grammar.rs +++ b/crates/squawk_parser/src/grammar.rs @@ -1819,29 +1819,51 @@ fn name_ref_(p: &mut Parser<'_>) -> Option { let m = p.start(); // TODO: this needs to be cleaned up let mut is_interval_cast = false; - let kind = if p.eat(COLLATION_KW) { - p.expect(FOR_KW); - NAME_REF - // timestamp with time zone / time with time zone - } else if p.eat(TIMESTAMP_KW) || p.eat(TIME_KW) { - if p.eat(L_PAREN) { - if opt_numeric_literal(p).is_none() { - p.error("expected numeric literal"); + let kind = match p.current() { + COLLATION_KW => { + p.bump(COLLATION_KW); + p.expect(FOR_KW); + NAME_REF + } + TIMESTAMP_KW | TIME_KW => { + p.bump_any(); + if p.eat(L_PAREN) { + if opt_numeric_literal(p).is_none() { + p.error("expected numeric literal"); + } + p.expect(R_PAREN); } - p.expect(R_PAREN); + if p.eat(WITH_KW) || p.eat(WITHOUT_KW) { + p.expect(TIME_KW); + p.expect(ZONE_KW); + } + TIME_TYPE } - if p.eat(WITH_KW) { - p.expect(TIME_KW); - p.expect(ZONE_KW); + BIT_KW => { + p.bump(BIT_KW); + p.eat(VARYING_KW); + BIT_TYPE + } + NATIONAL_KW if matches!(p.nth(1), CHAR_KW | CHARACTER_KW) => { + p.bump(NATIONAL_KW); + char_type(p) + } + DOUBLE_KW if p.nth_at(1, PRECISION_KW) => { + p.bump(DOUBLE_KW); + p.bump(PRECISION_KW); + DOUBLE_TYPE + } + CHARACTER_KW | CHAR_KW | NCHAR_KW | VARCHAR_KW => char_type(p), + INTERVAL_KW => { + p.bump(INTERVAL_KW); + opt_interval_trailing(p); + is_interval_cast = true; + INTERVAL_TYPE + } + _ => { + p.bump_any(); + NAME_REF } - TIME_TYPE - } else if p.eat(INTERVAL_KW) { - opt_interval_trailing(p); - is_interval_cast = true; - INTERVAL_TYPE - } else { - p.bump_any(); - NAME_REF }; let cm = m.complete(p, if p.at(STRING) { kind } else { NAME_REF }); @@ -10920,7 +10942,7 @@ fn create_view(p: &mut Parser<'_>) -> CompletedMarker { }, ) { Some(statement) => match statement.kind() { - SELECT | COMPOUND_SELECT | SELECT_INTO => (), + SELECT | COMPOUND_SELECT | SELECT_INTO | VALUES | TABLE => (), kind => p.error(format!("expected SELECT, got {:?}", kind)), }, None => p.error("expected SELECT"), @@ -11033,8 +11055,26 @@ fn reset(p: &mut Parser<'_>) -> CompletedMarker { assert!(p.at(RESET_KW)); let m = p.start(); p.bump(RESET_KW); - if !p.eat(ALL_KW) { - path_name_ref(p); + match p.current() { + ALL_KW => { + p.bump(ALL_KW); + } + SESSION_KW => { + p.bump(SESSION_KW); + p.expect(AUTHORIZATION_KW); + } + TRANSACTION_KW => { + p.bump(TRANSACTION_KW); + p.expect(ISOLATION_KW); + p.expect(LEVEL_KW); + } + TIME_KW => { + p.bump(TIME_KW); + p.expect(ZONE_KW); + } + _ => { + path_name_ref(p); + } } m.complete(p, RESET) } @@ -12945,8 +12985,26 @@ fn show(p: &mut Parser<'_>) -> CompletedMarker { assert!(p.at(SHOW_KW)); let m = p.start(); p.bump(SHOW_KW); - if !p.eat(ALL_KW) { - path_name_ref(p); + match p.current() { + ALL_KW => { + p.bump(ALL_KW); + } + SESSION_KW => { + p.bump(SESSION_KW); + p.expect(AUTHORIZATION_KW); + } + TRANSACTION_KW => { + p.bump(TRANSACTION_KW); + p.expect(ISOLATION_KW); + p.expect(LEVEL_KW); + } + TIME_KW => { + p.bump(TIME_KW); + p.expect(ZONE_KW); + } + _ => { + path_name_ref(p); + } } m.complete(p, SHOW) } @@ -13268,7 +13326,7 @@ fn alter_table_action(p: &mut Parser<'_>) -> Option { p.bump(DETACH_KW); p.expect(PARTITION_KW); // partition_name - name_ref(p); + path_name_ref(p); // [ CONCURRENTLY | FINALIZE ] if !p.eat(CONCURRENTLY_KW) { p.eat(FINALIZE_KW); diff --git a/crates/squawk_parser/tests/data/ok/reset.sql b/crates/squawk_parser/tests/data/ok/reset.sql index cddd5555..56079cbe 100644 --- a/crates/squawk_parser/tests/data/ok/reset.sql +++ b/crates/squawk_parser/tests/data/ok/reset.sql @@ -2,3 +2,7 @@ reset some_config_param; reset all; +reset foo.bar.buzz; +reset time zone; +reset transaction isolation level; +reset session authorization; diff --git a/crates/squawk_parser/tests/data/ok/select_casts.sql b/crates/squawk_parser/tests/data/ok/select_casts.sql index c10ba845..85d6334e 100644 --- a/crates/squawk_parser/tests/data/ok/select_casts.sql +++ b/crates/squawk_parser/tests/data/ok/select_casts.sql @@ -211,3 +211,60 @@ select cast(a as foo.bar); select treat(a as foo.b); select treat('1231' as numeric); +-- prefix +select json '{}'; + +select timestamp(4) ''; +select timestamp ''; + +select time(4) ''; +select time ''; + +select character varying ''; +select character ''; +select char varying ''; +select char ''; +select varchar ''; +select national character varying ''; +select national character ''; +select national char varying ''; +select national char ''; +select nchar varying ''; +select nchar ''; + +select character varying(10) ''; +select character(10) ''; +select char varying(10) ''; +select char(10) ''; +select varchar(10) ''; +select national character varying(10) ''; +select national character(10) ''; +select national char varying(10) ''; +select national char(10) ''; +select nchar varying(10) ''; +select nchar(10) ''; + +select bit varying(10) ''; +select bit(10) ''; + +select bit varying ''; +select bit ''; + +select int ''; +select integer ''; +select smallint ''; +select bigint ''; +select real ''; +select float ''; +select float(8) ''; +select double precision ''; +select decimal(10, 2) '10'; +select decimal '10'; +select dec(10, 2) '10'; +select dec '10'; +select numeric(10, 2) '10'; +select numeric '10'; +select boolean 'false'; + +select foo.bar '100'; +select foo.bar(10, 2) '100'; diff --git a/crates/squawk_parser/tests/data/ok/select_casts_pg17.sql b/crates/squawk_parser/tests/data/ok/select_casts_pg17.sql new file mode 100644 index 00000000..8a24dae6 --- /dev/null +++ b/crates/squawk_parser/tests/data/ok/select_casts_pg17.sql @@ -0,0 +1 @@ +select foo[10].bar(10, 2) '100'; diff --git a/crates/squawk_parser/tests/data/ok/show.sql b/crates/squawk_parser/tests/data/ok/show.sql new file mode 100644 index 00000000..4372eece --- /dev/null +++ b/crates/squawk_parser/tests/data/ok/show.sql @@ -0,0 +1,8 @@ +show time zone; +show transaction isolation level; +show session authorization; +show all; + +show v; +show a.b; +show a.b.c.d; diff --git a/crates/squawk_parser/tests/data/regression_suite/groupingsets.sql b/crates/squawk_parser/tests/data/regression_suite/groupingsets.sql index ce7990e1..21b6d1dc 100644 --- a/crates/squawk_parser/tests/data/regression_suite/groupingsets.sql +++ b/crates/squawk_parser/tests/data/regression_suite/groupingsets.sql @@ -13,20 +13,20 @@ create temp view gstest1(a,b,v) create temp table gstest2 (a integer, b integer, c integer, d integer, e integer, f integer, g integer, h integer); copy gstest2 from stdin; -1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 2 -1 1 1 1 1 1 2 2 -1 1 1 1 1 2 2 2 -1 1 1 1 2 2 2 2 -1 1 1 2 2 2 2 2 -1 1 2 2 2 2 2 2 -1 2 2 2 2 2 2 2 -2 2 2 2 2 2 2 2 +-- 1 1 1 1 1 1 1 1 +-- 1 1 1 1 1 1 1 2 +-- 1 1 1 1 1 1 2 2 +-- 1 1 1 1 1 2 2 2 +-- 1 1 1 1 2 2 2 2 +-- 1 1 1 2 2 2 2 2 +-- 1 1 2 2 2 2 2 2 +-- 1 2 2 2 2 2 2 2 +-- 2 2 2 2 2 2 2 2 create temp table gstest3 (a integer, b integer, c integer, d integer); copy gstest3 from stdin; -1 1 1 1 -2 2 2 2 +-- 1 1 1 1 +-- 2 2 2 2 alter table gstest3 add primary key (a); create temp table gstest4(id integer, v integer, diff --git a/crates/squawk_parser/tests/data/regression_suite/rules.sql b/crates/squawk_parser/tests/data/regression_suite/rules.sql index 67b2833a..e7783e41 100644 --- a/crates/squawk_parser/tests/data/regression_suite/rules.sql +++ b/crates/squawk_parser/tests/data/regression_suite/rules.sql @@ -182,9 +182,9 @@ select * from rtest_v1; insert into rtest_v1 values (2, 12); insert into rtest_v1 values (2, 13); select * from rtest_v1; -** Remember the delete rule on rtest_v1: It says -** DO INSTEAD DELETE FROM rtest_t1 WHERE a = old.a -** So this time both rows with a = 2 must get deleted +-- ** Remember the delete rule on rtest_v1: It says +-- ** DO INSTEAD DELETE FROM rtest_t1 WHERE a = old.a +-- ** So this time both rows with a = 2 must get deleted delete from rtest_v1 where b = 12; select * from rtest_v1; delete from rtest_v1; diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_table_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_table_ok.snap index d242d39b..540ff797 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_table_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_table_ok.snap @@ -3692,8 +3692,10 @@ SOURCE_FILE WHITESPACE " " PARTITION_KW "partition" WHITESPACE " " - NAME_REF - IDENT "f" + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- concurrently" @@ -3714,8 +3716,10 @@ SOURCE_FILE WHITESPACE " " PARTITION_KW "partition" WHITESPACE " " - NAME_REF - IDENT "f" + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" WHITESPACE " " CONCURRENTLY_KW "concurrently" SEMICOLON ";" @@ -3738,8 +3742,10 @@ SOURCE_FILE WHITESPACE " " PARTITION_KW "partition" WHITESPACE " " - NAME_REF - IDENT "f" + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" WHITESPACE " " FINALIZE_KW "finalize" SEMICOLON ";" diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_foreign_key.snap b/crates/squawk_parser/tests/snapshots/tests__regression_foreign_key.snap index aede4cad..4342bcd3 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_foreign_key.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_foreign_key.snap @@ -2,9 +2,4 @@ source: crates/squawk_parser/tests/tests.rs input_file: crates/squawk_parser/tests/data/regression_suite/foreign_key.sql --- -ERROR@65605: expected SEMICOLON -ERROR@65605: expected command, found DOT -ERROR@65606: expected command, found IDENT -ERROR@66561: expected SEMICOLON -ERROR@66561: expected command, found DOT -ERROR@66562: expected command, found IDENT + diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_groupingsets.snap b/crates/squawk_parser/tests/snapshots/tests__regression_groupingsets.snap index 4ccdbc0c..b79e6f7a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_groupingsets.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_groupingsets.snap @@ -2,100 +2,19 @@ source: crates/squawk_parser/tests/tests.rs input_file: crates/squawk_parser/tests/data/regression_suite/groupingsets.sql --- -ERROR@218: expected SELECT, got VALUES -ERROR@389: expected command, found INT_NUMBER -ERROR@391: expected command, found INT_NUMBER -ERROR@393: expected command, found INT_NUMBER -ERROR@395: expected command, found INT_NUMBER -ERROR@397: expected command, found INT_NUMBER -ERROR@399: expected command, found INT_NUMBER -ERROR@401: expected command, found INT_NUMBER -ERROR@403: expected command, found INT_NUMBER -ERROR@405: expected command, found INT_NUMBER -ERROR@407: expected command, found INT_NUMBER -ERROR@409: expected command, found INT_NUMBER -ERROR@411: expected command, found INT_NUMBER -ERROR@413: expected command, found INT_NUMBER -ERROR@415: expected command, found INT_NUMBER -ERROR@417: expected command, found INT_NUMBER -ERROR@419: expected command, found INT_NUMBER -ERROR@421: expected command, found INT_NUMBER -ERROR@423: expected command, found INT_NUMBER -ERROR@425: expected command, found INT_NUMBER -ERROR@427: expected command, found INT_NUMBER -ERROR@429: expected command, found INT_NUMBER -ERROR@431: expected command, found INT_NUMBER -ERROR@433: expected command, found INT_NUMBER -ERROR@435: expected command, found INT_NUMBER -ERROR@437: expected command, found INT_NUMBER -ERROR@439: expected command, found INT_NUMBER -ERROR@441: expected command, found INT_NUMBER -ERROR@443: expected command, found INT_NUMBER -ERROR@445: expected command, found INT_NUMBER -ERROR@447: expected command, found INT_NUMBER -ERROR@449: expected command, found INT_NUMBER -ERROR@451: expected command, found INT_NUMBER -ERROR@453: expected command, found INT_NUMBER -ERROR@455: expected command, found INT_NUMBER -ERROR@457: expected command, found INT_NUMBER -ERROR@459: expected command, found INT_NUMBER -ERROR@461: expected command, found INT_NUMBER -ERROR@463: expected command, found INT_NUMBER -ERROR@465: expected command, found INT_NUMBER -ERROR@467: expected command, found INT_NUMBER -ERROR@469: expected command, found INT_NUMBER -ERROR@471: expected command, found INT_NUMBER -ERROR@473: expected command, found INT_NUMBER -ERROR@475: expected command, found INT_NUMBER -ERROR@477: expected command, found INT_NUMBER -ERROR@479: expected command, found INT_NUMBER -ERROR@481: expected command, found INT_NUMBER -ERROR@483: expected command, found INT_NUMBER -ERROR@485: expected command, found INT_NUMBER -ERROR@487: expected command, found INT_NUMBER -ERROR@489: expected command, found INT_NUMBER -ERROR@491: expected command, found INT_NUMBER -ERROR@493: expected command, found INT_NUMBER -ERROR@495: expected command, found INT_NUMBER -ERROR@497: expected command, found INT_NUMBER -ERROR@499: expected command, found INT_NUMBER -ERROR@501: expected command, found INT_NUMBER -ERROR@503: expected command, found INT_NUMBER -ERROR@505: expected command, found INT_NUMBER -ERROR@507: expected command, found INT_NUMBER -ERROR@509: expected command, found INT_NUMBER -ERROR@511: expected command, found INT_NUMBER -ERROR@513: expected command, found INT_NUMBER -ERROR@515: expected command, found INT_NUMBER -ERROR@517: expected command, found INT_NUMBER -ERROR@519: expected command, found INT_NUMBER -ERROR@521: expected command, found INT_NUMBER -ERROR@523: expected command, found INT_NUMBER -ERROR@525: expected command, found INT_NUMBER -ERROR@527: expected command, found INT_NUMBER -ERROR@529: expected command, found INT_NUMBER -ERROR@531: expected command, found INT_NUMBER -ERROR@631: expected command, found INT_NUMBER -ERROR@633: expected command, found INT_NUMBER -ERROR@635: expected command, found INT_NUMBER -ERROR@637: expected command, found INT_NUMBER -ERROR@639: expected command, found INT_NUMBER -ERROR@641: expected command, found INT_NUMBER -ERROR@643: expected command, found INT_NUMBER -ERROR@645: expected command, found INT_NUMBER -ERROR@2762: expected COMMA -ERROR@2780: expected COMMA -ERROR@2875: expected COMMA -ERROR@2893: expected COMMA -ERROR@2990: expected COMMA -ERROR@3015: expected COMMA -ERROR@3114: expected COMMA -ERROR@3212: expected COMMA -ERROR@3308: expected COMMA -ERROR@3402: expected COMMA -ERROR@3419: expected COMMA -ERROR@3512: expected COMMA -ERROR@3529: expected COMMA -ERROR@3546: expected COMMA -ERROR@3574: expected COMMA -ERROR@3684: expected COMMA +ERROR@2795: expected COMMA +ERROR@2813: expected COMMA +ERROR@2908: expected COMMA +ERROR@2926: expected COMMA +ERROR@3023: expected COMMA +ERROR@3048: expected COMMA +ERROR@3147: expected COMMA +ERROR@3245: expected COMMA +ERROR@3341: expected COMMA +ERROR@3435: expected COMMA +ERROR@3452: expected COMMA +ERROR@3545: expected COMMA +ERROR@3562: expected COMMA +ERROR@3579: expected COMMA +ERROR@3607: expected COMMA +ERROR@3717: expected COMMA diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_horology.snap b/crates/squawk_parser/tests/snapshots/tests__regression_horology.snap index 268ba0d2..071ff438 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_horology.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_horology.snap @@ -2,176 +2,4 @@ source: crates/squawk_parser/tests/tests.rs input_file: crates/squawk_parser/tests/data/regression_suite/horology.sql --- -ERROR@2120: missing comma -ERROR@2133: missing comma -ERROR@2167: missing comma -ERROR@2180: missing comma -ERROR@2214: missing comma -ERROR@2227: missing comma -ERROR@2262: missing comma -ERROR@2275: missing comma -ERROR@2901: missing comma -ERROR@2914: missing comma -ERROR@2944: missing comma -ERROR@2957: missing comma -ERROR@2989: missing comma -ERROR@3002: missing comma -ERROR@3029: missing comma -ERROR@3042: missing comma -ERROR@3071: missing comma -ERROR@3084: missing comma -ERROR@3109: missing comma -ERROR@3122: missing comma -ERROR@3148: missing comma -ERROR@3161: missing comma -ERROR@3192: missing comma -ERROR@3205: missing comma -ERROR@3238: missing comma -ERROR@3251: missing comma -ERROR@3279: missing comma -ERROR@3292: missing comma -ERROR@3322: missing comma -ERROR@3335: missing comma -ERROR@3361: missing comma -ERROR@3374: missing comma -ERROR@3476: missing comma -ERROR@3489: missing comma -ERROR@6108: missing comma -ERROR@6121: missing comma -ERROR@6191: missing comma -ERROR@6204: missing comma -ERROR@6274: missing comma -ERROR@6287: missing comma -ERROR@6357: missing comma -ERROR@6370: missing comma -ERROR@6450: missing comma -ERROR@6463: missing comma -ERROR@6551: missing comma -ERROR@6564: missing comma -ERROR@6652: missing comma -ERROR@6665: missing comma -ERROR@6753: missing comma -ERROR@6766: missing comma -ERROR@6846: missing comma -ERROR@6859: missing comma -ERROR@6970: missing comma -ERROR@6983: missing comma -ERROR@7015: missing comma -ERROR@7028: missing comma -ERROR@7254: expected COMMA -ERROR@7262: expected COMMA -ERROR@7267: expected COMMA -ERROR@7293: expected COMMA -ERROR@7301: expected COMMA -ERROR@7306: expected COMMA -ERROR@7373: expected COMMA -ERROR@7381: expected COMMA -ERROR@7386: expected COMMA -ERROR@7412: expected COMMA -ERROR@7420: expected COMMA -ERROR@7425: expected COMMA -ERROR@7491: expected COMMA -ERROR@7499: expected COMMA -ERROR@7504: expected COMMA -ERROR@7536: expected COMMA -ERROR@7544: expected COMMA -ERROR@7549: expected COMMA -ERROR@7629: expected COMMA -ERROR@7637: expected COMMA -ERROR@7642: expected COMMA -ERROR@7674: expected COMMA -ERROR@7682: expected COMMA -ERROR@7687: expected COMMA -ERROR@7767: expected COMMA -ERROR@7775: expected COMMA -ERROR@7780: expected COMMA -ERROR@7809: expected COMMA -ERROR@7817: expected COMMA -ERROR@7822: expected COMMA -ERROR@7890: expected COMMA -ERROR@7898: expected COMMA -ERROR@7903: expected COMMA -ERROR@7941: expected COMMA -ERROR@7949: expected COMMA -ERROR@7954: expected COMMA -ERROR@8026: expected COMMA -ERROR@8034: expected COMMA -ERROR@8039: expected COMMA -ERROR@8077: expected COMMA -ERROR@8085: expected COMMA -ERROR@8090: expected COMMA -ERROR@8162: expected COMMA -ERROR@8170: expected COMMA -ERROR@8175: expected COMMA -ERROR@8214: expected COMMA -ERROR@8222: expected COMMA -ERROR@8227: expected COMMA -ERROR@8305: expected COMMA -ERROR@8313: expected COMMA -ERROR@8318: expected COMMA -ERROR@8357: expected COMMA -ERROR@8365: expected COMMA -ERROR@8370: expected COMMA -ERROR@8448: expected COMMA -ERROR@8456: expected COMMA -ERROR@8461: expected COMMA -ERROR@10601: expected SEMICOLON -ERROR@10602: expected command, found ZONE_KW -ERROR@14263: expected COMMA -ERROR@14271: expected COMMA -ERROR@14276: expected COMMA -ERROR@14305: expected COMMA -ERROR@14313: expected COMMA -ERROR@14318: expected COMMA -ERROR@14359: expected COMMA -ERROR@14367: expected COMMA -ERROR@14372: expected COMMA -ERROR@14407: expected COMMA -ERROR@14415: expected COMMA -ERROR@14420: expected COMMA -ERROR@14469: expected COMMA -ERROR@14477: expected COMMA -ERROR@14482: expected COMMA -ERROR@14511: expected COMMA -ERROR@14519: expected COMMA -ERROR@14524: expected COMMA -ERROR@14565: expected COMMA -ERROR@14573: expected COMMA -ERROR@14578: expected COMMA -ERROR@14613: expected COMMA -ERROR@14621: expected COMMA -ERROR@14626: expected COMMA -ERROR@14676: expected COMMA -ERROR@14684: expected COMMA -ERROR@14689: expected COMMA -ERROR@14718: expected COMMA -ERROR@14726: expected COMMA -ERROR@14731: expected COMMA -ERROR@14772: expected COMMA -ERROR@14780: expected COMMA -ERROR@14785: expected COMMA -ERROR@14858: expected COMMA -ERROR@14866: expected COMMA -ERROR@14871: expected COMMA -ERROR@14933: expected COMMA -ERROR@14941: expected COMMA -ERROR@14946: expected COMMA -ERROR@14981: expected COMMA -ERROR@14989: expected COMMA -ERROR@14994: expected COMMA -ERROR@15044: expected COMMA -ERROR@15052: expected COMMA -ERROR@15057: expected COMMA -ERROR@15119: expected COMMA -ERROR@15127: expected COMMA -ERROR@15132: expected COMMA -ERROR@15202: expected COMMA -ERROR@15210: expected COMMA -ERROR@15215: expected COMMA -ERROR@15277: expected COMMA -ERROR@15285: expected COMMA -ERROR@15290: expected COMMA -ERROR@29249: expected SEMICOLON -ERROR@29250: expected command, found ZONE_KW -ERROR@29675: expected SEMICOLON -ERROR@29676: expected command, found ZONE_KW + diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_rules.snap b/crates/squawk_parser/tests/snapshots/tests__regression_rules.snap index 30e21456..16273006 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_rules.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_rules.snap @@ -2,62 +2,29 @@ source: crates/squawk_parser/tests/tests.rs input_file: crates/squawk_parser/tests/data/regression_suite/rules.sql --- -ERROR@6044: expected command, found STAR -ERROR@6045: expected command, found STAR -ERROR@6047: expected command, found IDENT -ERROR@6056: expected command, found IDENT -ERROR@6066: expected FROM_KW -ERROR@6071: expected SEMICOLON -ERROR@6072: expected command, found ON_KW -ERROR@6075: expected command, found IDENT -ERROR@6083: expected command, found COLON -ERROR@6085: expected command, found IDENT -ERROR@6088: expected command, found IDENT -ERROR@6093: expected command, found STAR -ERROR@6094: expected command, found STAR -ERROR@6098: expected string literal -ERROR@6098: expected SEMICOLON -ERROR@6099: expected command, found INSTEAD_KW -ERROR@6149: expected SEMICOLON -ERROR@6150: expected command, found IDENT -ERROR@6155: expected command, found TIME_KW -ERROR@6160: expected command, found BOTH_KW -ERROR@6165: expected command, found ROWS_KW -ERROR@6176: expected AS_KW -ERROR@6176: expected L_PAREN -ERROR@6177: expected command, found EQ -ERROR@6178: expected SELECT, TABLE, VALUES, INSERT, UPDATE, DELETE, or MERGE statement -ERROR@6178: expected R_PAREN -ERROR@6178: expected DELETE, SELECT, TABLE, UPDATE, VALUES, or MERGE, got: INT_NUMBER -ERROR@6179: expected command, found INT_NUMBER -ERROR@6181: expected command, found IDENT -ERROR@6186: expected command, found IDENT -ERROR@6190: expected command, found IDENT -ERROR@35833: expected SELECT, got VALUES -ERROR@35940: expected SELECT, got VALUES -ERROR@43268: expected an expression, found WITH_KW -ERROR@43272: expected output expression -ERROR@43273: expected command, found L_PAREN -ERROR@43274: expected command, found OLD_KW -ERROR@43278: expected command, found AS_KW -ERROR@43281: expected command, found IDENT -ERROR@43282: expected command, found COMMA -ERROR@43284: expected command, found NEW_KW -ERROR@43288: expected command, found AS_KW -ERROR@43291: expected command, found IDENT -ERROR@43292: expected command, found R_PAREN -ERROR@43297: expected command, found MERGE_ACTION_KW -ERROR@43309: expected command, found L_PAREN -ERROR@43310: expected command, found R_PAREN -ERROR@43312: expected command, found AS_KW -ERROR@43315: expected command, found ACTION_KW -ERROR@43321: expected command, found COMMA -ERROR@43323: expected command, found STAR -ERROR@43324: expected command, found COMMA -ERROR@43326: expected command, found IDENT -ERROR@43327: expected command, found DOT -ERROR@43328: expected command, found STAR -ERROR@43329: expected command, found COMMA -ERROR@43331: expected command, found IDENT -ERROR@43332: expected command, found DOT -ERROR@43333: expected command, found STAR +ERROR@43277: expected an expression, found WITH_KW +ERROR@43281: expected output expression +ERROR@43282: expected command, found L_PAREN +ERROR@43283: expected command, found OLD_KW +ERROR@43287: expected command, found AS_KW +ERROR@43290: expected command, found IDENT +ERROR@43291: expected command, found COMMA +ERROR@43293: expected command, found NEW_KW +ERROR@43297: expected command, found AS_KW +ERROR@43300: expected command, found IDENT +ERROR@43301: expected command, found R_PAREN +ERROR@43306: expected command, found MERGE_ACTION_KW +ERROR@43318: expected command, found L_PAREN +ERROR@43319: expected command, found R_PAREN +ERROR@43321: expected command, found AS_KW +ERROR@43324: expected command, found ACTION_KW +ERROR@43330: expected command, found COMMA +ERROR@43332: expected command, found STAR +ERROR@43333: expected command, found COMMA +ERROR@43335: expected command, found IDENT +ERROR@43336: expected command, found DOT +ERROR@43337: expected command, found STAR +ERROR@43338: expected command, found COMMA +ERROR@43340: expected command, found IDENT +ERROR@43341: expected command, found DOT +ERROR@43342: expected command, found STAR diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_suite_errors.snap b/crates/squawk_parser/tests/snapshots/tests__regression_suite_errors.snap index 87c7eedc..d1e69d7f 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_suite_errors.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_suite_errors.snap @@ -3,9 +3,7 @@ source: crates/squawk_parser/tests/tests.rs expression: "out.join(\"\\n\")" --- tests/snapshots/tests__regression_errors.snap:286 -tests/snapshots/tests__regression_foreign_key.snap:6 -tests/snapshots/tests__regression_groupingsets.snap:97 -tests/snapshots/tests__regression_horology.snap:173 +tests/snapshots/tests__regression_groupingsets.snap:16 tests/snapshots/tests__regression_inherit.snap:30 tests/snapshots/tests__regression_join.snap:20 tests/snapshots/tests__regression_merge.snap:250 @@ -13,13 +11,12 @@ tests/snapshots/tests__regression_partition_prune.snap:326 tests/snapshots/tests__regression_privileges.snap:84 tests/snapshots/tests__regression_rangefuncs.snap:281 tests/snapshots/tests__regression_returning.snap:230 -tests/snapshots/tests__regression_rules.snap:59 +tests/snapshots/tests__regression_rules.snap:26 tests/snapshots/tests__regression_sqljson.snap:1068 tests/snapshots/tests__regression_sqljson_jsontable.snap:185 tests/snapshots/tests__regression_sqljson_queryfuncs.snap:51 tests/snapshots/tests__regression_strings.snap:49 tests/snapshots/tests__regression_subselect.snap:44 -tests/snapshots/tests__regression_timestamp.snap:65 tests/snapshots/tests__regression_transactions.snap:114 tests/snapshots/tests__regression_tuplesort.snap:188 tests/snapshots/tests__regression_union.snap:15 diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_timestamp.snap b/crates/squawk_parser/tests/snapshots/tests__regression_timestamp.snap index 519a5519..2ea19c0f 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_timestamp.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_timestamp.snap @@ -2,68 +2,4 @@ source: crates/squawk_parser/tests/tests.rs input_file: crates/squawk_parser/tests/data/regression_suite/timestamp.sql --- -ERROR@742: expected SEMICOLON -ERROR@743: expected command, found WITHOUT_KW -ERROR@751: expected command, found TIME_KW -ERROR@756: expected command, found ZONE_KW -ERROR@761: expected command, found STRING -ERROR@834: expected SEMICOLON -ERROR@835: expected command, found WITHOUT_KW -ERROR@843: expected command, found TIME_KW -ERROR@848: expected command, found ZONE_KW -ERROR@853: expected command, found STRING -ERROR@927: expected SEMICOLON -ERROR@928: expected command, found WITHOUT_KW -ERROR@936: expected command, found TIME_KW -ERROR@941: expected command, found ZONE_KW -ERROR@946: expected command, found STRING -ERROR@1423: expected SEMICOLON -ERROR@1424: expected command, found WITHOUT_KW -ERROR@1432: expected command, found TIME_KW -ERROR@1437: expected command, found ZONE_KW -ERROR@1442: expected command, found STRING -ERROR@6994: expected SEMICOLON -ERROR@6995: expected command, found WITHOUT_KW -ERROR@7003: expected command, found TIME_KW -ERROR@7008: expected command, found ZONE_KW -ERROR@7013: expected command, found STRING -ERROR@7080: expected SEMICOLON -ERROR@7081: expected command, found WITHOUT_KW -ERROR@7089: expected command, found TIME_KW -ERROR@7094: expected command, found ZONE_KW -ERROR@7099: expected command, found STRING -ERROR@7166: expected SEMICOLON -ERROR@7167: expected command, found WITHOUT_KW -ERROR@7175: expected command, found TIME_KW -ERROR@7180: expected command, found ZONE_KW -ERROR@7185: expected command, found STRING -ERROR@7253: expected SEMICOLON -ERROR@7254: expected command, found WITHOUT_KW -ERROR@7262: expected command, found TIME_KW -ERROR@7267: expected command, found ZONE_KW -ERROR@7272: expected command, found STRING -ERROR@7340: expected SEMICOLON -ERROR@7341: expected command, found WITHOUT_KW -ERROR@7349: expected command, found TIME_KW -ERROR@7354: expected command, found ZONE_KW -ERROR@7359: expected command, found STRING -ERROR@7427: expected SEMICOLON -ERROR@7428: expected command, found WITHOUT_KW -ERROR@7436: expected command, found TIME_KW -ERROR@7441: expected command, found ZONE_KW -ERROR@7446: expected command, found STRING -ERROR@7482: missing comma -ERROR@7495: missing comma -ERROR@11046: missing comma -ERROR@11059: missing comma -ERROR@11135: expected AND_KW -ERROR@11143: expected SEMICOLON -ERROR@11144: expected command, found TIME_KW -ERROR@11149: expected command, found ZONE_KW -ERROR@11154: expected command, found STRING -ERROR@11170: expected command, found AND_KW -ERROR@11174: expected command, found TIMESTAMP_KW -ERROR@11184: expected command, found WITHOUT_KW -ERROR@11192: expected command, found TIME_KW -ERROR@11197: expected command, found ZONE_KW -ERROR@11202: expected command, found STRING + diff --git a/crates/squawk_parser/tests/snapshots/tests__reset_ok.snap b/crates/squawk_parser/tests/snapshots/tests__reset_ok.snap index 54fcb5dd..63eaa9a6 100644 --- a/crates/squawk_parser/tests/snapshots/tests__reset_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__reset_ok.snap @@ -20,3 +20,48 @@ SOURCE_FILE ALL_KW "all" SEMICOLON ";" WHITESPACE "\n\n" + RESET + RESET_KW "reset" + WHITESPACE " " + PATH + PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." + PATH_SEGMENT + NAME_REF + IDENT "bar" + DOT "." + PATH_SEGMENT + NAME_REF + IDENT "buzz" + SEMICOLON ";" + WHITESPACE "\n" + RESET + RESET_KW "reset" + WHITESPACE " " + TIME_KW "time" + WHITESPACE " " + ZONE_KW "zone" + SEMICOLON ";" + WHITESPACE "\n" + RESET + RESET_KW "reset" + WHITESPACE " " + TRANSACTION_KW "transaction" + WHITESPACE " " + ISOLATION_KW "isolation" + WHITESPACE " " + LEVEL_KW "level" + SEMICOLON ";" + WHITESPACE "\n" + SET_SESSION_AUTH + RESET_KW "reset" + WHITESPACE " " + SESSION_KW "session" + WHITESPACE " " + AUTHORIZATION_KW "authorization" + SEMICOLON ";" + WHITESPACE "\n" diff --git a/crates/squawk_parser/tests/snapshots/tests__select_casts_ok.snap b/crates/squawk_parser/tests/snapshots/tests__select_casts_ok.snap index f05bf655..be6f9853 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_casts_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_casts_ok.snap @@ -2806,3 +2806,859 @@ SOURCE_FILE R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n" + COMMENT "-- prefix" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + NAME_REF + JSON_KW "json" + WHITESPACE " " + LITERAL + STRING "'{}'" + SEMICOLON ";" + WHITESPACE "\n\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + TIME_TYPE + TIMESTAMP_KW "timestamp" + L_PAREN "(" + LITERAL + INT_NUMBER "4" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + TIME_TYPE + TIMESTAMP_KW "timestamp" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + TIME_TYPE + TIME_KW "time" + L_PAREN "(" + LITERAL + INT_NUMBER "4" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + TIME_TYPE + TIME_KW "time" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CHAR_TYPE + CHARACTER_KW "character" + WHITESPACE " " + VARYING_KW "varying" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CHAR_TYPE + CHARACTER_KW "character" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CHAR_TYPE + CHAR_KW "char" + WHITESPACE " " + VARYING_KW "varying" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CHAR_TYPE + CHAR_KW "char" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CHAR_TYPE + VARCHAR_KW "varchar" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CHAR_TYPE + NATIONAL_KW "national" + WHITESPACE " " + CHARACTER_KW "character" + WHITESPACE " " + VARYING_KW "varying" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CHAR_TYPE + NATIONAL_KW "national" + WHITESPACE " " + CHARACTER_KW "character" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CHAR_TYPE + NATIONAL_KW "national" + WHITESPACE " " + CHAR_KW "char" + WHITESPACE " " + VARYING_KW "varying" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CHAR_TYPE + NATIONAL_KW "national" + WHITESPACE " " + CHAR_KW "char" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CHAR_TYPE + NCHAR_KW "nchar" + WHITESPACE " " + VARYING_KW "varying" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CHAR_TYPE + NCHAR_KW "nchar" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + CHARACTER_KW "character" + WHITESPACE " " + VARYING_KW "varying" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + CHARACTER_KW "character" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + CHAR_KW "char" + WHITESPACE " " + VARYING_KW "varying" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + CHAR_KW "char" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + VARCHAR_KW "varchar" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + NATIONAL_KW "national" + WHITESPACE " " + CHARACTER_KW "character" + WHITESPACE " " + VARYING_KW "varying" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + NATIONAL_KW "national" + WHITESPACE " " + CHARACTER_KW "character" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + NATIONAL_KW "national" + WHITESPACE " " + CHAR_KW "char" + WHITESPACE " " + VARYING_KW "varying" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + NATIONAL_KW "national" + WHITESPACE " " + CHAR_KW "char" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + NCHAR_KW "nchar" + WHITESPACE " " + VARYING_KW "varying" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + NCHAR_KW "nchar" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + BIT_KW "bit" + WHITESPACE " " + VARYING_KW "varying" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + BIT_KW "bit" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + BIT_TYPE + BIT_KW "bit" + WHITESPACE " " + VARYING_KW "varying" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + BIT_TYPE + BIT_KW "bit" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + NAME_REF + INT_KW "int" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + NAME_REF + INTEGER_KW "integer" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + NAME_REF + SMALLINT_KW "smallint" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + NAME_REF + BIGINT_KW "bigint" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + NAME_REF + REAL_KW "real" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + NAME_REF + FLOAT_KW "float" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + FLOAT_KW "float" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "8" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + DOUBLE_TYPE + DOUBLE_KW "double" + WHITESPACE " " + PRECISION_KW "precision" + WHITESPACE " " + LITERAL + STRING "''" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + DECIMAL_KW "decimal" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "2" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "'10'" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + NAME_REF + DECIMAL_KW "decimal" + WHITESPACE " " + LITERAL + STRING "'10'" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + DEC_KW "dec" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "2" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "'10'" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + NAME_REF + DEC_KW "dec" + WHITESPACE " " + LITERAL + STRING "'10'" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + NAME_REF + NUMERIC_KW "numeric" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "2" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "'10'" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + NAME_REF + NUMERIC_KW "numeric" + WHITESPACE " " + LITERAL + STRING "'10'" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + NAME_REF + BOOLEAN_KW "boolean" + WHITESPACE " " + LITERAL + STRING "'false'" + SEMICOLON ";" + WHITESPACE "\n\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + FIELD_EXPR + NAME_REF + IDENT "foo" + DOT "." + NAME_REF + IDENT "bar" + WHITESPACE " " + LITERAL + STRING "'100'" + SEMICOLON ";" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + FIELD_EXPR + NAME_REF + IDENT "foo" + DOT "." + NAME_REF + IDENT "bar" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "2" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "'100'" + SEMICOLON ";" + WHITESPACE "\n" diff --git a/crates/squawk_parser/tests/snapshots/tests__select_casts_pg17_ok.snap b/crates/squawk_parser/tests/snapshots/tests__select_casts_pg17_ok.snap new file mode 100644 index 00000000..19ee27a7 --- /dev/null +++ b/crates/squawk_parser/tests/snapshots/tests__select_casts_pg17_ok.snap @@ -0,0 +1,38 @@ +--- +source: crates/squawk_parser/tests/tests.rs +input_file: crates/squawk_parser/tests/data/ok/select_casts_pg17.sql +--- +SOURCE_FILE + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CAST_EXPR + CALL_EXPR + FIELD_EXPR + INDEX_EXPR + NAME_REF + IDENT "foo" + L_BRACK "[" + LITERAL + INT_NUMBER "10" + R_BRACK "]" + DOT "." + NAME_REF + IDENT "bar" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "10" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "2" + R_PAREN ")" + WHITESPACE " " + LITERAL + STRING "'100'" + SEMICOLON ";" + WHITESPACE "\n" diff --git a/crates/squawk_parser/tests/snapshots/tests__show_ok.snap b/crates/squawk_parser/tests/snapshots/tests__show_ok.snap new file mode 100644 index 00000000..36a5c2fd --- /dev/null +++ b/crates/squawk_parser/tests/snapshots/tests__show_ok.snap @@ -0,0 +1,84 @@ +--- +source: crates/squawk_parser/tests/tests.rs +input_file: crates/squawk_parser/tests/data/ok/show.sql +--- +SOURCE_FILE + SHOW + SHOW_KW "show" + WHITESPACE " " + TIME_KW "time" + WHITESPACE " " + ZONE_KW "zone" + SEMICOLON ";" + WHITESPACE "\n" + SHOW + SHOW_KW "show" + WHITESPACE " " + TRANSACTION_KW "transaction" + WHITESPACE " " + ISOLATION_KW "isolation" + WHITESPACE " " + LEVEL_KW "level" + SEMICOLON ";" + WHITESPACE "\n" + SHOW + SHOW_KW "show" + WHITESPACE " " + SESSION_KW "session" + WHITESPACE " " + AUTHORIZATION_KW "authorization" + SEMICOLON ";" + WHITESPACE "\n" + SHOW + SHOW_KW "show" + WHITESPACE " " + ALL_KW "all" + SEMICOLON ";" + WHITESPACE "\n\n" + SHOW + SHOW_KW "show" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "v" + SEMICOLON ";" + WHITESPACE "\n" + SHOW + SHOW_KW "show" + WHITESPACE " " + PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" + DOT "." + PATH_SEGMENT + NAME_REF + IDENT "b" + SEMICOLON ";" + WHITESPACE "\n" + SHOW + SHOW_KW "show" + WHITESPACE " " + PATH + PATH + PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" + DOT "." + PATH_SEGMENT + NAME_REF + IDENT "b" + DOT "." + PATH_SEGMENT + NAME_REF + IDENT "c" + DOT "." + PATH_SEGMENT + NAME_REF + IDENT "d" + SEMICOLON ";" + WHITESPACE "\n"