1/*
2 * The MIT License (MIT)
3 *
4 * Copyright (c) 2014 by Bart Kiers
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
7 * associated documentation files (the "Software"), to deal in the Software without restriction,
8 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
9 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in all copies or
13 * substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
16 * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 *
21 * Project : sqlite-parser; an ANTLR4 grammar for SQLite https://github.com/bkiers/sqlite-parser
22 * Developed by:
23 *     Bart Kiers, bart@big-o.nl
24 *     Martin Mirchev, marti_2203@abv.bg
25 *     Mike Lische, mike@lischke-online.de
26 */
27
28// $antlr-format alignTrailingComments on, columnLimit 130, minEmptyLines 1, maxEmptyLinesToKeep 1, reflowComments off
29// $antlr-format useTab off, allowShortRulesOnASingleLine off, allowShortBlocksOnASingleLine on, alignSemicolons ownLine
30
31parser grammar SQLiteParser; // For version 3.41.0 of SQLite
32
33options {
34    tokenVocab = SQLiteLexer;
35}
36
37parse
38    : (sql_stmt_list)* EOF
39;
40
41sql_stmt_list
42    : SCOL* sql_stmt (SCOL+ sql_stmt)* SCOL*
43;
44
45sql_stmt
46    : (EXPLAIN_ (QUERY_ PLAN_)?)? (
47        alter_table_stmt
48        | analyze_stmt
49        | attach_stmt
50        | begin_stmt
51        | commit_stmt
52        | create_index_stmt
53        | create_table_stmt
54        | create_trigger_stmt
55        | create_view_stmt
56        | create_virtual_table_stmt
57        | delete_stmt
58        | delete_stmt_limited
59        | detach_stmt
60        | drop_stmt
61        | insert_stmt
62        | pragma_stmt
63        | reindex_stmt
64        | release_stmt
65        | rollback_stmt
66        | savepoint_stmt
67        | select_stmt
68        | update_stmt
69        | update_stmt_limited
70        | vacuum_stmt
71    )
72;
73
74alter_table_stmt
75    : ALTER_ TABLE_ (schema_name DOT)? table_name (
76        RENAME_ (
77            TO_ new_table_name = table_name
78            | COLUMN_? old_column_name = column_name TO_ new_column_name = column_name
79        )
80        | ADD_ COLUMN_? column_def
81        | DROP_ COLUMN_? column_name
82    )
83;
84
85analyze_stmt
86    : ANALYZE_ (schema_name | (schema_name DOT)? table_or_index_name)?
87;
88
89attach_stmt
90    : ATTACH_ DATABASE_? expr AS_ schema_name
91;
92
93begin_stmt
94    : BEGIN_ (DEFERRED_ | IMMEDIATE_ | EXCLUSIVE_)? (TRANSACTION_ transaction_name?)?
95;
96
97commit_stmt
98    : (COMMIT_ | END_) TRANSACTION_?
99;
100
101rollback_stmt
102    : ROLLBACK_ TRANSACTION_? (TO_ SAVEPOINT_? savepoint_name)?
103;
104
105savepoint_stmt
106    : SAVEPOINT_ savepoint_name
107;
108
109release_stmt
110    : RELEASE_ SAVEPOINT_? savepoint_name
111;
112
113create_index_stmt
114    : CREATE_ UNIQUE_? INDEX_ (IF_ NOT_ EXISTS_)? (schema_name DOT)? index_name ON_ table_name OPEN_PAR indexed_column (
115        COMMA indexed_column
116    )* CLOSE_PAR (WHERE_ expr)?
117;
118
119indexed_column
120    : (column_name | expr) (COLLATE_ collation_name)? asc_desc?
121;
122
123create_table_stmt
124    : CREATE_ (TEMP_ | TEMPORARY_)? TABLE_ (IF_ NOT_ EXISTS_)? (schema_name DOT)? table_name (
125        OPEN_PAR column_def (COMMA column_def)*? (COMMA table_constraint)* CLOSE_PAR (
126            WITHOUT_ row_ROW_ID = IDENTIFIER
127        )?
128        | AS_ select_stmt
129    )
130;
131
132column_def
133    : column_name type_name? column_constraint*
134;
135
136type_name
137    : name+? (
138        OPEN_PAR signed_number CLOSE_PAR
139        | OPEN_PAR signed_number COMMA signed_number CLOSE_PAR
140    )?
141;
142
143column_constraint
144    : (CONSTRAINT_ name)? (
145        (PRIMARY_ KEY_ asc_desc? conflict_clause? AUTOINCREMENT_?)
146        | (NOT_? NULL_ | UNIQUE_) conflict_clause?
147        | CHECK_ OPEN_PAR expr CLOSE_PAR
148        | DEFAULT_ (signed_number | literal_value | OPEN_PAR expr CLOSE_PAR)
149        | COLLATE_ collation_name
150        | foreign_key_clause
151        | (GENERATED_ ALWAYS_)? AS_ OPEN_PAR expr CLOSE_PAR (STORED_ | VIRTUAL_)?
152    )
153;
154
155signed_number
156    : (PLUS | MINUS)? NUMERIC_LITERAL
157;
158
159table_constraint
160    : (CONSTRAINT_ name)? (
161        (PRIMARY_ KEY_ | UNIQUE_) OPEN_PAR indexed_column (COMMA indexed_column)* CLOSE_PAR conflict_clause?
162        | CHECK_ OPEN_PAR expr CLOSE_PAR
163        | FOREIGN_ KEY_ OPEN_PAR column_name (COMMA column_name)* CLOSE_PAR foreign_key_clause
164    )
165;
166
167foreign_key_clause
168    : REFERENCES_ foreign_table (OPEN_PAR column_name (COMMA column_name)* CLOSE_PAR)? (
169        ON_ (DELETE_ | UPDATE_) (
170            SET_ (NULL_ | DEFAULT_)
171            | CASCADE_
172            | RESTRICT_
173            | NO_ ACTION_
174        )
175        | MATCH_ name
176    )* (NOT_? DEFERRABLE_ (INITIALLY_ (DEFERRED_ | IMMEDIATE_))?)?
177;
178
179conflict_clause
180    : ON_ CONFLICT_ (ROLLBACK_ | ABORT_ | FAIL_ | IGNORE_ | REPLACE_)
181;
182
183create_trigger_stmt
184    : CREATE_ (TEMP_ | TEMPORARY_)? TRIGGER_ (IF_ NOT_ EXISTS_)? (schema_name DOT)? trigger_name (
185        BEFORE_
186        | AFTER_
187        | INSTEAD_ OF_
188    )? (DELETE_ | INSERT_ | UPDATE_ (OF_ column_name ( COMMA column_name)*)?) ON_ table_name (
189        FOR_ EACH_ ROW_
190    )? (WHEN_ expr)? BEGIN_ (
191        (update_stmt | insert_stmt | delete_stmt | select_stmt) SCOL
192    )+ END_
193;
194
195create_view_stmt
196    : CREATE_ (TEMP_ | TEMPORARY_)? VIEW_ (IF_ NOT_ EXISTS_)? (schema_name DOT)? view_name (
197        OPEN_PAR column_name (COMMA column_name)* CLOSE_PAR
198    )? AS_ select_stmt
199;
200
201create_virtual_table_stmt
202    : CREATE_ VIRTUAL_ TABLE_ (IF_ NOT_ EXISTS_)? (schema_name DOT)? table_name USING_ module_name (
203        OPEN_PAR module_argument (COMMA module_argument)* CLOSE_PAR
204    )?
205;
206
207with_clause
208    : WITH_ RECURSIVE_? cte_table_name AS_ OPEN_PAR select_stmt CLOSE_PAR (
209        COMMA cte_table_name AS_ OPEN_PAR select_stmt CLOSE_PAR
210    )*
211;
212
213cte_table_name
214    : table_name (OPEN_PAR column_name ( COMMA column_name)* CLOSE_PAR)?
215;
216
217recursive_cte
218    : cte_table_name AS_ OPEN_PAR initial_select UNION_ ALL_? recursive_select CLOSE_PAR
219;
220
221common_table_expression
222    : table_name (OPEN_PAR column_name ( COMMA column_name)* CLOSE_PAR)? AS_ OPEN_PAR select_stmt CLOSE_PAR
223;
224
225delete_stmt
226    : with_clause? DELETE_ FROM_ qualified_table_name (WHERE_ expr)? returning_clause?
227;
228
229delete_stmt_limited
230    : with_clause? DELETE_ FROM_ qualified_table_name (WHERE_ expr)? returning_clause? (
231        order_by_stmt? limit_stmt
232    )?
233;
234
235detach_stmt
236    : DETACH_ DATABASE_? schema_name
237;
238
239drop_stmt
240    : DROP_ object = (INDEX_ | TABLE_ | TRIGGER_ | VIEW_) (IF_ EXISTS_)? (
241        schema_name DOT
242    )? any_name
243;
244
245/*
246 SQLite understands the following binary operators, in order from highest to lowest precedence:
247    ||
248    * / %
249    + -
250    << >> & |
251    < <= > >=
252    = == != <> IS IS NOT IS DISTINCT FROM IS NOT DISTINCT FROM IN LIKE GLOB MATCH REGEXP
253    AND
254    OR
255 */
256expr
257    : literal_value
258    | BIND_PARAMETER
259    | ((schema_name DOT)? table_name DOT)? column_name
260    | unary_operator expr
261    | expr PIPE2 expr
262    | expr ( STAR | DIV | MOD) expr
263    | expr ( PLUS | MINUS) expr
264    | expr ( LT2 | GT2 | AMP | PIPE) expr
265    | expr ( LT | LT_EQ | GT | GT_EQ) expr
266    | expr (
267        ASSIGN
268        | EQ
269        | NOT_EQ1
270        | NOT_EQ2
271        | IS_
272        | IS_ NOT_
273        | IS_ DISTINCT_ FROM_
274        | IS_ NOT_ DISTINCT_ FROM_
275        | IN_
276        | LIKE_
277        | GLOB_
278        | MATCH_
279        | REGEXP_
280    ) expr
281    | expr AND_ expr
282    | expr OR_ expr
283    | function_name OPEN_PAR ((DISTINCT_? comma_separated_expr) | STAR)? CLOSE_PAR filter_clause? over_clause?
284    | OPEN_PAR comma_separated_expr CLOSE_PAR
285    | CAST_ OPEN_PAR expr AS_ type_name CLOSE_PAR
286    | expr COLLATE_ collation_name
287    | expr NOT_? (LIKE_ | GLOB_ | REGEXP_ | MATCH_) expr (ESCAPE_ expr)?
288    | expr ( ISNULL_ | NOTNULL_ | NOT_ NULL_)
289    | expr IS_ NOT_? expr
290    | expr NOT_? BETWEEN_ expr AND_ expr
291    | expr NOT_? IN_ (
292        OPEN_PAR (select_stmt | comma_separated_expr)? CLOSE_PAR
293        | ( schema_name DOT)? table_name
294        | (schema_name DOT)? table_function_name OPEN_PAR (comma_separated_expr)? CLOSE_PAR
295    )
296    | ((NOT_)? EXISTS_)? OPEN_PAR select_stmt CLOSE_PAR
297    | CASE_ expr? (WHEN_ expr THEN_ expr)+ (ELSE_ expr)? END_
298    | raise_function
299;
300
301comma_separated_expr
302    : expr ( COMMA expr )*
303;
304
305raise_function
306    : RAISE_ OPEN_PAR (IGNORE_ | (ROLLBACK_ | ABORT_ | FAIL_) COMMA error_message) CLOSE_PAR
307;
308
309literal_value
310    : NUMERIC_LITERAL
311    | STRING_LITERAL
312    | BLOB_LITERAL
313    | NULL_
314    | TRUE_
315    | FALSE_
316    | CURRENT_TIME_
317    | CURRENT_DATE_
318    | CURRENT_TIMESTAMP_
319;
320
321value_row
322    : OPEN_PAR comma_separated_expr CLOSE_PAR
323;
324
325values_clause
326    : VALUES_ value_row (COMMA value_row)*
327;
328
329insert_stmt
330    : with_clause? (
331        INSERT_
332        | REPLACE_
333        | INSERT_ OR_ ( REPLACE_ | ROLLBACK_ | ABORT_ | FAIL_ | IGNORE_)
334    ) INTO_ (schema_name DOT)? table_name (AS_ table_alias)? (
335        OPEN_PAR column_name ( COMMA column_name)* CLOSE_PAR
336    )? (( ( values_clause | select_stmt) upsert_clause?) | DEFAULT_ VALUES_) returning_clause?
337;
338
339returning_clause
340    : RETURNING_ result_column (COMMA result_column)*
341;
342
343upsert_clause
344    : ON_ CONFLICT_ (
345        OPEN_PAR indexed_column (COMMA indexed_column)* CLOSE_PAR (WHERE_ expr)?
346    )? DO_ (
347        NOTHING_
348        | UPDATE_ SET_ (
349            (column_name | column_name_list) ASSIGN expr (
350                COMMA (column_name | column_name_list) ASSIGN expr
351            )* (WHERE_ expr)?
352        )
353    )
354;
355
356pragma_stmt
357    : PRAGMA_ (schema_name DOT)? pragma_name (
358        ASSIGN pragma_value
359        | OPEN_PAR pragma_value CLOSE_PAR
360    )?
361;
362
363pragma_value
364    : signed_number
365    | name
366    | STRING_LITERAL
367;
368
369reindex_stmt
370    : REINDEX_ (collation_name | (schema_name DOT)? (table_name | index_name))?
371;
372
373select_stmt
374    : common_table_stmt? select_core (compound_operator select_core)* order_by_stmt? limit_stmt?
375;
376
377join_clause
378    : table_or_subquery (join_operator table_or_subquery join_constraint?)*
379;
380
381select_core
382    : (
383        SELECT_ (DISTINCT_ | ALL_)? result_column (COMMA result_column)* (
384            FROM_ (table_or_subquery (COMMA table_or_subquery)* | join_clause)
385        )? (WHERE_ whereExpr = expr)? (
386            GROUP_ BY_ groupByExpr += expr (COMMA groupByExpr += expr)* (
387                HAVING_ havingExpr = expr
388            )?
389        )? (WINDOW_ window_name AS_ window_defn ( COMMA window_name AS_ window_defn)*)?
390    )
391    | values_clause
392;
393
394factored_select_stmt
395    : select_stmt
396;
397
398simple_select_stmt
399    : common_table_stmt? select_core order_by_stmt? limit_stmt?
400;
401
402compound_select_stmt
403    : common_table_stmt? select_core (
404        (UNION_ ALL_? | INTERSECT_ | EXCEPT_) select_core
405    )+ order_by_stmt? limit_stmt?
406;
407
408table_or_subquery
409    : (
410        (schema_name DOT)? table_name (AS_? table_alias)? (
411            INDEXED_ BY_ index_name
412            | NOT_ INDEXED_
413        )?
414    )
415    | (schema_name DOT)? table_function_name OPEN_PAR expr (COMMA expr)* CLOSE_PAR (
416        AS_? table_alias
417    )?
418    | OPEN_PAR (table_or_subquery (COMMA table_or_subquery)* | join_clause) CLOSE_PAR
419    | OPEN_PAR select_stmt CLOSE_PAR (AS_? table_alias)?
420;
421
422result_column
423    : STAR
424    | table_name DOT STAR
425    | expr ( AS_? column_alias)?
426;
427
428join_operator
429    : COMMA
430    | NATURAL_? ((LEFT_ | RIGHT_ | FULL_) OUTER_? | INNER_ | CROSS_)? JOIN_
431;
432
433join_constraint
434    : ON_ expr
435    | USING_ OPEN_PAR column_name ( COMMA column_name)* CLOSE_PAR
436;
437
438compound_operator
439    : UNION_ ALL_?
440    | INTERSECT_
441    | EXCEPT_
442;
443
444update_stmt
445    : with_clause? UPDATE_ (OR_ (ROLLBACK_ | ABORT_ | REPLACE_ | FAIL_ | IGNORE_))? qualified_table_name SET_ (
446        column_name
447        | column_name_list
448    ) ASSIGN expr (COMMA (column_name | column_name_list) ASSIGN expr)* (
449        FROM_ (table_or_subquery (COMMA table_or_subquery)* | join_clause)
450    )? (WHERE_ expr)? returning_clause?
451;
452
453column_name_list
454    : OPEN_PAR column_name (COMMA column_name)* CLOSE_PAR
455;
456
457update_stmt_limited
458    : with_clause? UPDATE_ (OR_ (ROLLBACK_ | ABORT_ | REPLACE_ | FAIL_ | IGNORE_))? qualified_table_name SET_ (
459        column_name
460        | column_name_list
461    ) ASSIGN expr (COMMA (column_name | column_name_list) ASSIGN expr)* (WHERE_ expr)? returning_clause? (
462        order_by_stmt? limit_stmt
463    )?
464;
465
466qualified_table_name
467    : (schema_name DOT)? table_name (AS_ alias)? (
468        INDEXED_ BY_ index_name
469        | NOT_ INDEXED_
470    )?
471;
472
473vacuum_stmt
474    : VACUUM_ schema_name? (INTO_ filename)?
475;
476
477filter_clause
478    : FILTER_ OPEN_PAR WHERE_ expr CLOSE_PAR
479;
480
481window_defn
482    : OPEN_PAR base_window_name? (PARTITION_ BY_ expr (COMMA expr)*)? (
483        ORDER_ BY_ ordering_term (COMMA ordering_term)*
484    ) frame_spec? CLOSE_PAR
485;
486
487over_clause
488    : OVER_ (
489        window_name
490        | OPEN_PAR base_window_name? (PARTITION_ BY_ expr (COMMA expr)*)? (
491            ORDER_ BY_ ordering_term (COMMA ordering_term)*
492        )? frame_spec? CLOSE_PAR
493    )
494;
495
496frame_spec
497    : frame_clause (EXCLUDE_ ( NO_ OTHERS_ | CURRENT_ ROW_ | GROUP_ | TIES_))?
498;
499
500frame_clause
501    : (RANGE_ | ROWS_ | GROUPS_) (
502        frame_single
503        | BETWEEN_ frame_left AND_ frame_right
504    )
505;
506
507simple_function_invocation
508    : simple_func OPEN_PAR (expr (COMMA expr)* | STAR) CLOSE_PAR
509;
510
511aggregate_function_invocation
512    : aggregate_func OPEN_PAR (DISTINCT_? expr (COMMA expr)* | STAR)? CLOSE_PAR filter_clause?
513;
514
515window_function_invocation
516    : window_function OPEN_PAR (expr (COMMA expr)* | STAR)? CLOSE_PAR filter_clause? OVER_ (
517        window_defn
518        | window_name
519    )
520;
521
522common_table_stmt
523    : //additional structures
524    WITH_ RECURSIVE_? common_table_expression (COMMA common_table_expression)*
525;
526
527order_by_stmt
528    : ORDER_ BY_ ordering_term (COMMA ordering_term)*
529;
530
531limit_stmt
532    : LIMIT_ expr ((OFFSET_ | COMMA) expr)?
533;
534
535ordering_term
536    : expr (COLLATE_ collation_name)? asc_desc? (NULLS_ (FIRST_ | LAST_))?
537;
538
539asc_desc
540    : ASC_
541    | DESC_
542;
543
544frame_left
545    : expr PRECEDING_
546    | expr FOLLOWING_
547    | CURRENT_ ROW_
548    | UNBOUNDED_ PRECEDING_
549;
550
551frame_right
552    : expr PRECEDING_
553    | expr FOLLOWING_
554    | CURRENT_ ROW_
555    | UNBOUNDED_ FOLLOWING_
556;
557
558frame_single
559    : expr PRECEDING_
560    | UNBOUNDED_ PRECEDING_
561    | CURRENT_ ROW_
562;
563
564// unknown
565
566window_function
567    : (FIRST_VALUE_ | LAST_VALUE_) OPEN_PAR expr CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc frame_clause?
568        CLOSE_PAR
569    | (CUME_DIST_ | PERCENT_RANK_) OPEN_PAR CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr? CLOSE_PAR
570    | (DENSE_RANK_ | RANK_ | ROW_NUMBER_) OPEN_PAR CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc CLOSE_PAR
571    | (LAG_ | LEAD_) OPEN_PAR expr offset? default_value? CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc CLOSE_PAR
572    | NTH_VALUE_ OPEN_PAR expr COMMA signed_number CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc frame_clause?
573        CLOSE_PAR
574    | NTILE_ OPEN_PAR expr CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc CLOSE_PAR
575;
576
577offset
578    : COMMA signed_number
579;
580
581default_value
582    : COMMA signed_number
583;
584
585partition_by
586    : PARTITION_ BY_ expr+
587;
588
589order_by_expr
590    : ORDER_ BY_ expr+
591;
592
593order_by_expr_asc_desc
594    : ORDER_ BY_ expr_asc_desc
595;
596
597expr_asc_desc
598    : expr asc_desc? (COMMA expr asc_desc?)*
599;
600
601initial_select
602    : select_stmt
603;
604
605recursive_select
606    : select_stmt
607;
608
609unary_operator
610    : MINUS
611    | PLUS
612    | TILDE
613    | NOT_
614;
615
616error_message
617    : STRING_LITERAL
618;
619
620module_argument
621    :
622    expr
623    | column_def
624;
625
626column_alias
627    : IDENTIFIER
628    | STRING_LITERAL
629;
630
631keyword
632    : ABORT_
633    | ACTION_
634    | ADD_
635    | AFTER_
636    | ALL_
637    | ALTER_
638    | ANALYZE_
639    | AND_
640    | AS_
641    | ASC_
642    | ATTACH_
643    | AUTOINCREMENT_
644    | BEFORE_
645    | BEGIN_
646    | BETWEEN_
647    | BY_
648    | CASCADE_
649    | CASE_
650    | CAST_
651    | CHECK_
652    | COLLATE_
653    | COLUMN_
654    | COMMIT_
655    | CONFLICT_
656    | CONSTRAINT_
657    | CREATE_
658    | CROSS_
659    | CURRENT_DATE_
660    | CURRENT_TIME_
661    | CURRENT_TIMESTAMP_
662    | DATABASE_
663    | DEFAULT_
664    | DEFERRABLE_
665    | DEFERRED_
666    | DELETE_
667    | DESC_
668    | DETACH_
669    | DISTINCT_
670    | DROP_
671    | EACH_
672    | ELSE_
673    | END_
674    | ESCAPE_
675    | EXCEPT_
676    | EXCLUSIVE_
677    | EXISTS_
678    | EXPLAIN_
679    | FAIL_
680    | FOR_
681    | FOREIGN_
682    | FROM_
683    | FULL_
684    | GLOB_
685    | GROUP_
686    | HAVING_
687    | IF_
688    | IGNORE_
689    | IMMEDIATE_
690    | IN_
691    | INDEX_
692    | INDEXED_
693    | INITIALLY_
694    | INNER_
695    | INSERT_
696    | INSTEAD_
697    | INTERSECT_
698    | INTO_
699    | IS_
700    | ISNULL_
701    | JOIN_
702    | KEY_
703    | LEFT_
704    | LIKE_
705    | LIMIT_
706    | MATCH_
707    | NATURAL_
708    | NO_
709    | NOT_
710    | NOTNULL_
711    | NULL_
712    | OF_
713    | OFFSET_
714    | ON_
715    | OR_
716    | ORDER_
717    | OUTER_
718    | PLAN_
719    | PRAGMA_
720    | PRIMARY_
721    | QUERY_
722    | RAISE_
723    | RECURSIVE_
724    | REFERENCES_
725    | REGEXP_
726    | REINDEX_
727    | RELEASE_
728    | RENAME_
729    | REPLACE_
730    | RESTRICT_
731    | RIGHT_
732    | ROLLBACK_
733    | ROW_
734    | ROWS_
735    | SAVEPOINT_
736    | SELECT_
737    | SET_
738    | TABLE_
739    | TEMP_
740    | TEMPORARY_
741    | THEN_
742    | TO_
743    | TRANSACTION_
744    | TRIGGER_
745    | UNION_
746    | UNIQUE_
747    | UPDATE_
748    | USING_
749    | VACUUM_
750    | VALUES_
751    | VIEW_
752    | VIRTUAL_
753    | WHEN_
754    | WHERE_
755    | WITH_
756    | WITHOUT_
757    | FIRST_VALUE_
758    | OVER_
759    | PARTITION_
760    | RANGE_
761    | PRECEDING_
762    | UNBOUNDED_
763    | CURRENT_
764    | FOLLOWING_
765    | CUME_DIST_
766    | DENSE_RANK_
767    | LAG_
768    | LAST_VALUE_
769    | LEAD_
770    | NTH_VALUE_
771    | NTILE_
772    | PERCENT_RANK_
773    | RANK_
774    | ROW_NUMBER_
775    | GENERATED_
776    | ALWAYS_
777    | STORED_
778    | TRUE_
779    | FALSE_
780    | WINDOW_
781    | NULLS_
782    | FIRST_
783    | LAST_
784    | FILTER_
785    | GROUPS_
786    | EXCLUDE_
787;
788
789name
790    : any_name
791;
792
793function_name
794    : any_name
795;
796
797schema_name
798    : any_name
799;
800
801table_name
802    : any_name
803;
804
805table_or_index_name
806    : any_name
807;
808
809column_name
810    : any_name
811;
812
813collation_name
814    : any_name
815;
816
817foreign_table
818    : any_name
819;
820
821index_name
822    : any_name
823;
824
825trigger_name
826    : any_name
827;
828
829view_name
830    : any_name
831;
832
833module_name
834    : any_name
835;
836
837pragma_name
838    : any_name
839;
840
841savepoint_name
842    : any_name
843;
844
845table_alias
846    : IDENTIFIER
847    | STRING_LITERAL
848    | OPEN_PAR table_alias CLOSE_PAR
849;
850
851transaction_name
852    : any_name
853;
854
855window_name
856    : any_name
857;
858
859alias
860    : any_name
861;
862
863filename
864    : any_name
865;
866
867base_window_name
868    : any_name
869;
870
871simple_func
872    : any_name
873;
874
875aggregate_func
876    : any_name
877;
878
879table_function_name
880    : any_name
881;
882
883any_name
884    : IDENTIFIER
885    | keyword
886    | STRING_LITERAL
887    | OPEN_PAR any_name CLOSE_PAR
888;