Skip to content

Commit c7fb7b5

Browse files
author
zhaoge
committed
feat(postgre): #412 update merge and copy's option's syntax and then update unit test
1 parent 7324c27 commit c7fb7b5

12 files changed

+13655
-13280
lines changed

Diff for: src/grammar/postgresql/PostgreSqlLexer.g4

+4
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,10 @@ KW_EXTENDED : 'EXTENDED';
668668
KW_MAIN : 'MAIN';
669669
KW_SKIP_LOCKED : 'SKIP_LOCKED';
670670
KW_BUFFER_USAGE_LIMIT : 'BUFFER_USAGE_LIMIT';
671+
672+
KW_FORCE_QUOTE : 'FORCE_QUOTE';
673+
KW_FORCE_NOT_NULL : 'FORCE_NOT_NULL';
674+
KW_FORCE_NULL : 'FORCE_NULL';
671675
//
672676

673677
// IDENTIFIERS (4.1.1)

Diff for: src/grammar/postgresql/PostgreSqlParser.g4

+15-2
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ copystmt
559559
) KW_WITH? copy_options
560560
;
561561

562-
copy_options
562+
copy_options_noparens
563563
: (
564564
KW_BINARY
565565
| KW_FREEZE
@@ -569,8 +569,17 @@ copy_options
569569
| KW_FORCE KW_QUOTE (column_list | STAR)
570570
| KW_FORCE KW_NOT? KW_NULL column_list
571571
| KW_ENCODING sconst
572+
| (KW_FORCE_QUOTE | KW_FORCE_NOT_NULL | KW_FORCE_NULL) (
573+
OPEN_PAREN (column_list | STAR) (COMMA (column_list | STAR))* CLOSE_PAREN
574+
)?
572575
)*
573-
| OPEN_PAREN copy_generic_opt_elem (COMMA copy_generic_opt_elem)* CLOSE_PAREN
576+
;
577+
578+
copy_options
579+
: copy_options_noparens
580+
| OPEN_PAREN (copy_options_noparens | copy_generic_opt_elem) (
581+
COMMA (copy_options_noparens | copy_generic_opt_elem)
582+
)* CLOSE_PAREN
574583
;
575584

576585
copy_generic_opt_elem
@@ -1911,11 +1920,13 @@ prep_type_clause
19111920
: OPEN_PAREN typename (COMMA typename)* CLOSE_PAREN
19121921
;
19131922

1923+
// https://www.postgresql.org/docs/17/sql-select.html
19141924
preparablestmt
19151925
: selectstmt
19161926
| insertstmt
19171927
| updatestmt
19181928
| deletestmt
1929+
| mergestmt
19191930
;
19201931

19211932
executestmt
@@ -3558,8 +3569,10 @@ stmt_move
35583569
: KW_MOVE opt_fetch_direction? cursor_variable SEMI
35593570
;
35603571

3572+
// https://www.postgresql.org/docs/17/sql-merge.html
35613573
mergestmt
35623574
: with_clause? KW_MERGE KW_INTO (KW_ONLY)? table_name (STAR)? (KW_AS? colid)? KW_USING data_source KW_ON expression merge_when_clause+
3575+
returning_clause?
35633576
;
35643577

35653578
data_source

Diff for: src/lib/postgresql/PostgreSqlLexer.interp

+10-1
Large diffs are not rendered by default.

Diff for: src/lib/postgresql/PostgreSqlLexer.tokens

+50-44
Original file line numberDiff line numberDiff line change
@@ -546,48 +546,51 @@ KW_EXTENDED=545
546546
KW_MAIN=546
547547
KW_SKIP_LOCKED=547
548548
KW_BUFFER_USAGE_LIMIT=548
549-
Identifier=549
550-
QuotedIdentifier=550
551-
UnterminatedQuotedIdentifier=551
552-
InvalidQuotedIdentifier=552
553-
InvalidUnterminatedQuotedIdentifier=553
554-
UnicodeQuotedIdentifier=554
555-
UnterminatedUnicodeQuotedIdentifier=555
556-
InvalidUnicodeQuotedIdentifier=556
557-
InvalidUnterminatedUnicodeQuotedIdentifier=557
558-
StringConstant=558
559-
UnterminatedStringConstant=559
560-
UnicodeEscapeStringConstant=560
561-
UnterminatedUnicodeEscapeStringConstant=561
562-
BeginDollarStringConstant=562
563-
BinaryStringConstant=563
564-
UnterminatedBinaryStringConstant=564
565-
InvalidBinaryStringConstant=565
566-
InvalidUnterminatedBinaryStringConstant=566
567-
HexadecimalStringConstant=567
568-
UnterminatedHexadecimalStringConstant=568
569-
InvalidHexadecimalStringConstant=569
570-
InvalidUnterminatedHexadecimalStringConstant=570
571-
Integral=571
572-
NumericFail=572
573-
Numeric=573
574-
PLSQLVARIABLENAME=574
575-
PLSQLIDENTIFIER=575
576-
Whitespace=576
577-
Newline=577
578-
LineComment=578
579-
BlockComment=579
580-
UnterminatedBlockComment=580
581-
MetaCommand=581
582-
EndMetaCommand=582
583-
ErrorCharacter=583
584-
EscapeStringConstant=584
585-
UnterminatedEscapeStringConstant=585
586-
InvalidEscapeStringConstant=586
587-
InvalidUnterminatedEscapeStringConstant=587
588-
DollarText=588
589-
EndDollarStringConstant=589
590-
AfterEscapeStringConstantWithNewlineMode_Continued=590
549+
KW_FORCE_QUOTE=549
550+
KW_FORCE_NOT_NULL=550
551+
KW_FORCE_NULL=551
552+
Identifier=552
553+
QuotedIdentifier=553
554+
UnterminatedQuotedIdentifier=554
555+
InvalidQuotedIdentifier=555
556+
InvalidUnterminatedQuotedIdentifier=556
557+
UnicodeQuotedIdentifier=557
558+
UnterminatedUnicodeQuotedIdentifier=558
559+
InvalidUnicodeQuotedIdentifier=559
560+
InvalidUnterminatedUnicodeQuotedIdentifier=560
561+
StringConstant=561
562+
UnterminatedStringConstant=562
563+
UnicodeEscapeStringConstant=563
564+
UnterminatedUnicodeEscapeStringConstant=564
565+
BeginDollarStringConstant=565
566+
BinaryStringConstant=566
567+
UnterminatedBinaryStringConstant=567
568+
InvalidBinaryStringConstant=568
569+
InvalidUnterminatedBinaryStringConstant=569
570+
HexadecimalStringConstant=570
571+
UnterminatedHexadecimalStringConstant=571
572+
InvalidHexadecimalStringConstant=572
573+
InvalidUnterminatedHexadecimalStringConstant=573
574+
Integral=574
575+
NumericFail=575
576+
Numeric=576
577+
PLSQLVARIABLENAME=577
578+
PLSQLIDENTIFIER=578
579+
Whitespace=579
580+
Newline=580
581+
LineComment=581
582+
BlockComment=582
583+
UnterminatedBlockComment=583
584+
MetaCommand=584
585+
EndMetaCommand=585
586+
ErrorCharacter=586
587+
EscapeStringConstant=587
588+
UnterminatedEscapeStringConstant=588
589+
InvalidEscapeStringConstant=589
590+
InvalidUnterminatedEscapeStringConstant=590
591+
DollarText=591
592+
EndDollarStringConstant=592
593+
AfterEscapeStringConstantWithNewlineMode_Continued=593
591594
'$'=1
592595
'('=2
593596
')'=3
@@ -1134,5 +1137,8 @@ AfterEscapeStringConstantWithNewlineMode_Continued=590
11341137
'MAIN'=546
11351138
'SKIP_LOCKED'=547
11361139
'BUFFER_USAGE_LIMIT'=548
1137-
'\\\\'=582
1138-
'\''=590
1140+
'FORCE_QUOTE'=549
1141+
'FORCE_NOT_NULL'=550
1142+
'FORCE_NULL'=551
1143+
'\\\\'=585
1144+
'\''=593

0 commit comments

Comments
 (0)