Skip to content

Commit 2ca0eb9

Browse files
committed
fix: support other 'booly' values for opts bool
1 parent b75b1f3 commit 2ca0eb9

File tree

6 files changed

+191
-22
lines changed

6 files changed

+191
-22
lines changed

crates/squawk_parser/src/grammar.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4644,7 +4644,9 @@ fn string_literal(p: &mut Parser<'_>) {
46444644

46454645
fn opt_bool_literal(p: &mut Parser<'_>) -> bool {
46464646
let m = p.start();
4647-
if p.eat(TRUE_KW) || p.eat(FALSE_KW) {
4647+
// TOOD: we might want to check if its 1 or 0 specificially, not just `INT_NUMBER`
4648+
// https://www.postgresql.org/docs/current/sql-explain.html
4649+
if p.eat(TRUE_KW) || p.eat(FALSE_KW) || p.eat(OFF_KW) || p.eat(ON_KW) || p.eat(INT_NUMBER) {
46484650
m.complete(p, LITERAL);
46494651
true
46504652
} else {

crates/squawk_parser/tests/data/ok/explain.sql

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ explain analyze select a from t;
88
explain (
99
analyze,
1010
verbose,
11-
costs,
12-
costs true,
13-
costs false,
11+
costs,
12+
costs true,
13+
costs false,
1414
settings,
1515
generic_plan,
1616
buffers,
@@ -69,3 +69,14 @@ explain analyze (((((select 1)))));
6969
-- parens_values
7070
explain analyze (((((values (1))))));
7171

72+
-- boolean off
73+
EXPLAIN (COSTS OFF) SELECT * FROM foo WHERE i = 4;
74+
75+
-- boolean on
76+
EXPLAIN (COSTS ON) SELECT * FROM foo WHERE i = 4;
77+
78+
-- boolean 1
79+
EXPLAIN (COSTS 1) SELECT * FROM foo WHERE i = 4;
80+
81+
-- boolean 0
82+
EXPLAIN (COSTS 0) SELECT * FROM foo WHERE i = 4;

crates/squawk_parser/tests/snapshots/tests__create_index_ok.snap

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -468,11 +468,8 @@ SOURCE_FILE
468468
WHITESPACE " "
469469
EQ "="
470470
WHITESPACE " "
471-
PATH_TYPE
472-
PATH
473-
PATH_SEGMENT
474-
NAME_REF
475-
OFF_KW "off"
471+
LITERAL
472+
OFF_KW "off"
476473
R_PAREN ")"
477474
SEMICOLON ";"
478475
WHITESPACE "\n\n"
@@ -634,11 +631,8 @@ SOURCE_FILE
634631
WHITESPACE " "
635632
EQ "="
636633
WHITESPACE " "
637-
PATH_TYPE
638-
PATH
639-
PATH_SEGMENT
640-
NAME_REF
641-
OFF_KW "off"
634+
LITERAL
635+
OFF_KW "off"
642636
R_PAREN ")"
643637
SEMICOLON ";"
644638
WHITESPACE "\n\n"

crates/squawk_parser/tests/snapshots/tests__create_subscription_ok.snap

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,8 @@ SOURCE_FILE
131131
WHITESPACE " "
132132
EQ "="
133133
WHITESPACE " "
134-
PATH_TYPE
135-
PATH
136-
PATH_SEGMENT
137-
NAME_REF
138-
OFF_KW "off"
134+
LITERAL
135+
OFF_KW "off"
139136
COMMA ","
140137
WHITESPACE "\n "
141138
PATH

crates/squawk_parser/tests/snapshots/tests__explain_ok.snap

Lines changed: 159 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,19 +62,19 @@ SOURCE_FILE
6262
WHITESPACE "\n "
6363
IDENT "costs"
6464
COMMA ","
65-
WHITESPACE " \n "
65+
WHITESPACE "\n "
6666
IDENT "costs"
6767
WHITESPACE " "
6868
LITERAL
6969
TRUE_KW "true"
7070
COMMA ","
71-
WHITESPACE " \n "
71+
WHITESPACE "\n "
7272
IDENT "costs"
7373
WHITESPACE " "
7474
LITERAL
7575
FALSE_KW "false"
7676
COMMA ","
77-
WHITESPACE " \n "
77+
WHITESPACE "\n "
7878
IDENT "settings"
7979
COMMA ","
8080
WHITESPACE "\n "
@@ -619,3 +619,159 @@ SOURCE_FILE
619619
R_PAREN ")"
620620
SEMICOLON ";"
621621
WHITESPACE "\n\n"
622+
COMMENT "-- boolean off"
623+
WHITESPACE "\n"
624+
EXPLAIN_STMT
625+
EXPLAIN_KW "EXPLAIN"
626+
WHITESPACE " "
627+
L_PAREN "("
628+
IDENT "COSTS"
629+
WHITESPACE " "
630+
LITERAL
631+
OFF_KW "OFF"
632+
R_PAREN ")"
633+
WHITESPACE " "
634+
SELECT
635+
SELECT_CLAUSE
636+
SELECT_KW "SELECT"
637+
WHITESPACE " "
638+
TARGET_LIST
639+
TARGET
640+
STAR "*"
641+
WHITESPACE " "
642+
FROM_CLAUSE
643+
FROM_KW "FROM"
644+
WHITESPACE " "
645+
NAME_REF
646+
IDENT "foo"
647+
WHITESPACE " "
648+
WHERE_CLAUSE
649+
WHERE_KW "WHERE"
650+
WHITESPACE " "
651+
BIN_EXPR
652+
NAME_REF
653+
IDENT "i"
654+
WHITESPACE " "
655+
EQ "="
656+
WHITESPACE " "
657+
LITERAL
658+
INT_NUMBER "4"
659+
SEMICOLON ";"
660+
WHITESPACE "\n\n"
661+
COMMENT "-- boolean on"
662+
WHITESPACE "\n"
663+
EXPLAIN_STMT
664+
EXPLAIN_KW "EXPLAIN"
665+
WHITESPACE " "
666+
L_PAREN "("
667+
IDENT "COSTS"
668+
WHITESPACE " "
669+
LITERAL
670+
ON_KW "ON"
671+
R_PAREN ")"
672+
WHITESPACE " "
673+
SELECT
674+
SELECT_CLAUSE
675+
SELECT_KW "SELECT"
676+
WHITESPACE " "
677+
TARGET_LIST
678+
TARGET
679+
STAR "*"
680+
WHITESPACE " "
681+
FROM_CLAUSE
682+
FROM_KW "FROM"
683+
WHITESPACE " "
684+
NAME_REF
685+
IDENT "foo"
686+
WHITESPACE " "
687+
WHERE_CLAUSE
688+
WHERE_KW "WHERE"
689+
WHITESPACE " "
690+
BIN_EXPR
691+
NAME_REF
692+
IDENT "i"
693+
WHITESPACE " "
694+
EQ "="
695+
WHITESPACE " "
696+
LITERAL
697+
INT_NUMBER "4"
698+
SEMICOLON ";"
699+
WHITESPACE "\n\n"
700+
COMMENT "-- boolean 1"
701+
WHITESPACE "\n"
702+
EXPLAIN_STMT
703+
EXPLAIN_KW "EXPLAIN"
704+
WHITESPACE " "
705+
L_PAREN "("
706+
IDENT "COSTS"
707+
WHITESPACE " "
708+
LITERAL
709+
INT_NUMBER "1"
710+
R_PAREN ")"
711+
WHITESPACE " "
712+
SELECT
713+
SELECT_CLAUSE
714+
SELECT_KW "SELECT"
715+
WHITESPACE " "
716+
TARGET_LIST
717+
TARGET
718+
STAR "*"
719+
WHITESPACE " "
720+
FROM_CLAUSE
721+
FROM_KW "FROM"
722+
WHITESPACE " "
723+
NAME_REF
724+
IDENT "foo"
725+
WHITESPACE " "
726+
WHERE_CLAUSE
727+
WHERE_KW "WHERE"
728+
WHITESPACE " "
729+
BIN_EXPR
730+
NAME_REF
731+
IDENT "i"
732+
WHITESPACE " "
733+
EQ "="
734+
WHITESPACE " "
735+
LITERAL
736+
INT_NUMBER "4"
737+
SEMICOLON ";"
738+
WHITESPACE "\n\n"
739+
COMMENT "-- boolean 0"
740+
WHITESPACE "\n"
741+
EXPLAIN_STMT
742+
EXPLAIN_KW "EXPLAIN"
743+
WHITESPACE " "
744+
L_PAREN "("
745+
IDENT "COSTS"
746+
WHITESPACE " "
747+
LITERAL
748+
INT_NUMBER "0"
749+
R_PAREN ")"
750+
WHITESPACE " "
751+
SELECT
752+
SELECT_CLAUSE
753+
SELECT_KW "SELECT"
754+
WHITESPACE " "
755+
TARGET_LIST
756+
TARGET
757+
STAR "*"
758+
WHITESPACE " "
759+
FROM_CLAUSE
760+
FROM_KW "FROM"
761+
WHITESPACE " "
762+
NAME_REF
763+
IDENT "foo"
764+
WHITESPACE " "
765+
WHERE_CLAUSE
766+
WHERE_KW "WHERE"
767+
WHITESPACE " "
768+
BIN_EXPR
769+
NAME_REF
770+
IDENT "i"
771+
WHITESPACE " "
772+
EQ "="
773+
WHITESPACE " "
774+
LITERAL
775+
INT_NUMBER "4"
776+
SEMICOLON ";"
777+
WHITESPACE "\n"

crates/squawk_parser/tests/tests.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
use camino::Utf8Path;
33
use dir_test::{dir_test, Fixture};
44
use insta::{assert_snapshot, with_settings};
5+
use std::fs::remove_file;
56

67
mod utils;
78

@@ -100,5 +101,13 @@ fn regression_suite(fixture: Fixture<&str>) {
100101
}, {
101102
assert_snapshot!(test_name, parsed);
102103
});
104+
} else {
105+
let snapshot_path = Utf8Path::new("tests/snapshots/regression_suite")
106+
.join(format!("tests__{}.snap", test_name));
107+
let new_snapshot_path = Utf8Path::new("tests/snapshots/regression_suite")
108+
.join(format!("tests__{}.snap.new", test_name));
109+
110+
let _ = remove_file(snapshot_path);
111+
let _ = remove_file(new_snapshot_path);
103112
}
104113
}

0 commit comments

Comments
 (0)