Skip to content

Commit a8afe5f

Browse files
authored
parser: fix some set related issues (#657)
1 parent 4269815 commit a8afe5f

File tree

5 files changed

+118
-5
lines changed

5 files changed

+118
-5
lines changed

crates/squawk_parser/src/grammar.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12986,15 +12986,21 @@ fn set(p: &mut Parser<'_>) -> CompletedMarker {
1298612986
if !p.eat(LOCAL_KW) && !config_value(p) {
1298712987
p.error(format!("expected config value, got {:?}", p.current()));
1298812988
}
12989+
} else if p.eat(CATALOG_KW) || p.eat(SCHEMA_KW) {
12990+
string_literal(p);
1298912991
// configuration_parameter { TO | = } { value | 'value' | DEFAULT }
1299012992
} else {
1299112993
// configuration_parameter
1299212994
path_name_ref(p);
12993-
// { TO | = }
12994-
let _ = p.eat(TO_KW) || p.expect(EQ);
12995-
// { value | 'value' | DEFAULT }
12996-
if !config_value(p) {
12997-
p.error(format!("expected config value, got {:?}", p.current()));
12995+
if p.eat(FROM_KW) {
12996+
p.expect(CURRENT_KW);
12997+
} else {
12998+
// { TO | = }
12999+
let _ = p.eat(TO_KW) || p.expect(EQ);
13000+
// { value | 'value' | DEFAULT }
13001+
if !config_value(p) {
13002+
p.error(format!("expected config value, got {:?}", p.current()));
13003+
}
1299813004
}
1299913005
}
1300013006
m.complete(p, SET)

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,23 @@ set search_path to myschema;
4444

4545
set foo = bar;
4646

47+
set schema 'foo';
48+
49+
set xml option document;
50+
set xml option content;
51+
52+
set role foo;
53+
4754
set time zone 'America/Los_Angeles';
4855
set time zone default;
4956
set time zone local;
5057

58+
set foo from current;
59+
set foo.bar from current;
60+
5161
set foo = default;
5262
set foo to a, 10.0, 1, 'foo', true, false;
63+
set foo to default;
5364

5465
-- operator
5566
-- binary
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
set catalog 'foo';

crates/squawk_parser/tests/snapshots/tests__schemas_ok.snap

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,43 @@ SOURCE_FILE
415415
IDENT "bar"
416416
SEMICOLON ";"
417417
WHITESPACE "\n\n"
418+
SET
419+
SET_KW "set"
420+
WHITESPACE " "
421+
SCHEMA_KW "schema"
422+
WHITESPACE " "
423+
LITERAL
424+
STRING "'foo'"
425+
SEMICOLON ";"
426+
WHITESPACE "\n\n"
427+
SET
428+
SET_KW "set"
429+
WHITESPACE " "
430+
XML_KW "xml"
431+
WHITESPACE " "
432+
OPTION_KW "option"
433+
WHITESPACE " "
434+
DOCUMENT_KW "document"
435+
SEMICOLON ";"
436+
WHITESPACE "\n"
437+
SET
438+
SET_KW "set"
439+
WHITESPACE " "
440+
XML_KW "xml"
441+
WHITESPACE " "
442+
OPTION_KW "option"
443+
WHITESPACE " "
444+
CONTENT_KW "content"
445+
SEMICOLON ";"
446+
WHITESPACE "\n\n"
447+
SET_ROLE
448+
SET_KW "set"
449+
WHITESPACE " "
450+
ROLE_KW "role"
451+
WHITESPACE " "
452+
IDENT "foo"
453+
SEMICOLON ";"
454+
WHITESPACE "\n\n"
418455
SET
419456
SET_KW "set"
420457
WHITESPACE " "
@@ -446,6 +483,37 @@ SOURCE_FILE
446483
LOCAL_KW "local"
447484
SEMICOLON ";"
448485
WHITESPACE "\n\n"
486+
SET
487+
SET_KW "set"
488+
WHITESPACE " "
489+
PATH
490+
PATH_SEGMENT
491+
NAME_REF
492+
IDENT "foo"
493+
WHITESPACE " "
494+
FROM_KW "from"
495+
WHITESPACE " "
496+
CURRENT_KW "current"
497+
SEMICOLON ";"
498+
WHITESPACE "\n"
499+
SET
500+
SET_KW "set"
501+
WHITESPACE " "
502+
PATH
503+
PATH
504+
PATH_SEGMENT
505+
NAME_REF
506+
IDENT "foo"
507+
DOT "."
508+
PATH_SEGMENT
509+
NAME_REF
510+
IDENT "bar"
511+
WHITESPACE " "
512+
FROM_KW "from"
513+
WHITESPACE " "
514+
CURRENT_KW "current"
515+
SEMICOLON ";"
516+
WHITESPACE "\n\n"
449517
SET
450518
SET_KW "set"
451519
WHITESPACE " "
@@ -491,6 +559,19 @@ SOURCE_FILE
491559
LITERAL
492560
FALSE_KW "false"
493561
SEMICOLON ";"
562+
WHITESPACE "\n"
563+
SET
564+
SET_KW "set"
565+
WHITESPACE " "
566+
PATH
567+
PATH_SEGMENT
568+
NAME_REF
569+
IDENT "foo"
570+
WHITESPACE " "
571+
TO_KW "to"
572+
WHITESPACE " "
573+
DEFAULT_KW "default"
574+
SEMICOLON ";"
494575
WHITESPACE "\n\n"
495576
COMMENT "-- operator"
496577
WHITESPACE "\n"
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
source: crates/squawk_parser/tests/tests.rs
3+
input_file: crates/squawk_parser/tests/data/ok/schemas_pg17.sql
4+
---
5+
SOURCE_FILE
6+
SET
7+
SET_KW "set"
8+
WHITESPACE " "
9+
CATALOG_KW "catalog"
10+
WHITESPACE " "
11+
LITERAL
12+
STRING "'foo'"
13+
SEMICOLON ";"
14+
WHITESPACE "\n"

0 commit comments

Comments
 (0)