@dbml/core 2.5.4 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/lib/model_structure/field.js +3 -1
  2. package/lib/parse/ANTLR/ASTGeneration/AST.js +246 -0
  3. package/lib/parse/ANTLR/ASTGeneration/ParserErrorListener.js +40 -0
  4. package/lib/parse/ANTLR/ASTGeneration/PostgresASTGen.js +1126 -0
  5. package/lib/parse/ANTLR/ASTGeneration/SyntaxError.js +47 -0
  6. package/lib/parse/ANTLR/ASTGeneration/index.js +32 -0
  7. package/lib/parse/ANTLR/ASTGeneration/postgres/PostgreSQLLexerBase.js +43 -0
  8. package/lib/parse/ANTLR/ASTGeneration/postgres/PostgreSQLParserBase.js +37 -0
  9. package/lib/parse/ANTLR/ASTGeneration/postgres/PostgresASTGen.js +1126 -0
  10. package/lib/parse/ANTLR/README.md +32 -0
  11. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexer.g4 +3044 -0
  12. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexer.interp +2074 -0
  13. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexer.js +882 -0
  14. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexer.tokens +1314 -0
  15. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLLexerBase.js +42 -0
  16. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParser.g4 +5506 -0
  17. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParser.interp +2182 -0
  18. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParser.js +3 -0
  19. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParser.tokens +1314 -0
  20. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParserBase.js +36 -0
  21. package/lib/parse/ANTLR/parsers/postgresql/PostgreSQLParserVisitor.js +5767 -0
  22. package/lib/parse/ANTLR/parsers/postgresql/README.md +10 -0
  23. package/lib/parse/Parser.js +9 -0
  24. package/lib/parse/dbml/parser.pegjs +2 -2
  25. package/lib/parse/dbmlParser.js +66 -103
  26. package/package.json +5 -2
  27. package/types/import/index.d.ts +1 -1
  28. package/types/parse/Parser.d.ts +1 -0
@@ -0,0 +1,3044 @@
1
+ /*
2
+ Original: https://github.com/antlr/grammars-v4/blob/master/sql/postgresql/PostgreSQLLexer.g4
3
+ Last updated: 2023-08-04
4
+ */
5
+
6
+ /*
7
+ based on
8
+ https://github.com/tunnelvisionlabs/antlr4-grammar-postgresql/blob/master/src/com/tunnelvisionlabs/postgresql/PostgreSqlLexer.g4
9
+ */
10
+
11
+ /*
12
+ * [The "MIT license"]
13
+ * Copyright (C) 2014 Sam Harwell, Tunnel Vision Laboratories, LLC
14
+ *
15
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
16
+ * of this software and associated documentation files (the "Software"), to deal
17
+ * in the Software without restriction, including without limitation the rights
18
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
19
+ * copies of the Software, and to permit persons to whom the Software is
20
+ * furnished to do so, subject to the following conditions:
21
+ *
22
+ * 1. The above copyright notice and this permission notice shall be included in
23
+ * all copies or substantial portions of the Software.
24
+ * 2. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
27
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
30
+ * DEALINGS IN THE SOFTWARE.
31
+ * 3. Except as contained in this notice, the name of Tunnel Vision
32
+ * Laboratories, LLC. shall not be used in advertising or otherwise to
33
+ * promote the sale, use or other dealings in this Software without prior
34
+ * written authorization from Tunnel Vision Laboratories, LLC.
35
+ */
36
+ lexer grammar PostgreSQLLexer;
37
+ /* Reference:
38
+ * http://www.postgresql.org/docs/9.3/static/sql-syntax-lexical.html
39
+ */
40
+
41
+ options {
42
+ superClass = PostgreSQLLexerBase;
43
+ caseInsensitive = true;
44
+ }
45
+
46
+ @ header
47
+ {
48
+ }
49
+ @ members
50
+ {
51
+ /* This field stores the tags which are used to detect the end of a dollar-quoted string literal.
52
+ */
53
+ }
54
+ //
55
+
56
+ // SPECIAL CHARACTERS (4.1.4)
57
+
58
+ //
59
+
60
+ // Note that Asterisk is a valid operator, but does not have the type Operator due to its syntactic use in locations
61
+
62
+ // that are not expressions.
63
+
64
+ Dollar
65
+ : '$'
66
+ ;
67
+
68
+ OPEN_PAREN
69
+ : '('
70
+ ;
71
+
72
+ CLOSE_PAREN
73
+ : ')'
74
+ ;
75
+
76
+ OPEN_BRACKET
77
+ : '['
78
+ ;
79
+
80
+ CLOSE_BRACKET
81
+ : ']'
82
+ ;
83
+
84
+ COMMA
85
+ : ','
86
+ ;
87
+
88
+ SEMI
89
+ : ';'
90
+ ;
91
+
92
+ COLON
93
+ : ':'
94
+ ;
95
+
96
+ STAR
97
+ : '*'
98
+ ;
99
+
100
+ EQUAL
101
+ : '='
102
+ ;
103
+
104
+ DOT
105
+ : '.'
106
+ ;
107
+ //NamedArgument : ':=';
108
+
109
+ PLUS
110
+ : '+'
111
+ ;
112
+
113
+ MINUS
114
+ : '-'
115
+ ;
116
+
117
+ SLASH
118
+ : '/'
119
+ ;
120
+
121
+ CARET
122
+ : '^'
123
+ ;
124
+
125
+ LT
126
+ : '<'
127
+ ;
128
+
129
+ GT
130
+ : '>'
131
+ ;
132
+
133
+ LESS_LESS
134
+ : '<<'
135
+ ;
136
+
137
+ GREATER_GREATER
138
+ : '>>'
139
+ ;
140
+
141
+ COLON_EQUALS
142
+ : ':='
143
+ ;
144
+
145
+ LESS_EQUALS
146
+ : '<='
147
+ ;
148
+
149
+ EQUALS_GREATER
150
+ : '=>'
151
+ ;
152
+
153
+ GREATER_EQUALS
154
+ : '>='
155
+ ;
156
+
157
+ DOT_DOT
158
+ : '..'
159
+ ;
160
+
161
+ NOT_EQUALS
162
+ : '<>'
163
+ ;
164
+
165
+ TYPECAST
166
+ : '::'
167
+ ;
168
+
169
+ PERCENT
170
+ : '%'
171
+ ;
172
+
173
+ PARAM
174
+ : '$' ([0-9])+
175
+ ;
176
+ //
177
+
178
+ // OPERATORS (4.1.3)
179
+
180
+ //
181
+
182
+ // this rule does not allow + or - at the end of a multi-character operator
183
+
184
+ Operator
185
+ : ((OperatorCharacter | ('+' | '-'
186
+ {checkLA('-')}?)+ (OperatorCharacter | '/'
187
+ {checkLA('*')}?) | '/'
188
+ {checkLA('*')}?)+ | // special handling for the single-character operators + and -
189
+ [+-])
190
+ //TODO somehow rewrite this part without using Actions
191
+
192
+ {
193
+ HandleLessLessGreaterGreater();
194
+ }
195
+ ;
196
+ /* This rule handles operators which end with + or -, and sets the token type to Operator. It is comprised of four
197
+ * parts, in order:
198
+ *
199
+ * 1. A prefix, which does not contain a character from the required set which allows + or - to appear at the end of
200
+ * the operator.
201
+ * 2. A character from the required set which allows + or - to appear at the end of the operator.
202
+ * 3. An optional sub-token which takes the form of an operator which does not include a + or - at the end of the
203
+ * sub-token.
204
+ * 4. A suffix sequence of + and - characters.
205
+ */
206
+
207
+
208
+ OperatorEndingWithPlusMinus
209
+ : (OperatorCharacterNotAllowPlusMinusAtEnd | '-'
210
+ {checkLA('-')}? | '/'
211
+ {checkLA('*')}?)* OperatorCharacterAllowPlusMinusAtEnd Operator? ('+' | '-'
212
+ {checkLA('-')}?)+ -> type (Operator)
213
+ ;
214
+ // Each of the following fragment rules omits the +, -, and / characters, which must always be handled in a special way
215
+
216
+ // by the operator rules above.
217
+
218
+ fragment OperatorCharacter
219
+ : [*<>=~!@%^&|`?#]
220
+ ;
221
+ // these are the operator characters that don't count towards one ending with + or -
222
+
223
+ fragment OperatorCharacterNotAllowPlusMinusAtEnd
224
+ : [*<>=+]
225
+ ;
226
+ // an operator may end with + or - if it contains one of these characters
227
+
228
+ fragment OperatorCharacterAllowPlusMinusAtEnd
229
+ : [~!@%^&|`?#]
230
+ ;
231
+ //
232
+
233
+ // KEYWORDS (Appendix C)
234
+
235
+ //
236
+
237
+ //
238
+
239
+ // reserved keywords
240
+
241
+ //
242
+
243
+ ALL
244
+ : 'ALL'
245
+ ;
246
+
247
+ ANALYSE
248
+ : 'ANALYSE'
249
+ ;
250
+
251
+ ANALYZE
252
+ : 'ANALYZE'
253
+ ;
254
+
255
+ AND
256
+ : 'AND'
257
+ ;
258
+
259
+ ANY
260
+ : 'ANY'
261
+ ;
262
+
263
+ ARRAY
264
+ : 'ARRAY'
265
+ ;
266
+
267
+ AS
268
+ : 'AS'
269
+ ;
270
+
271
+ ASC
272
+ : 'ASC'
273
+ ;
274
+
275
+ ASYMMETRIC
276
+ : 'ASYMMETRIC'
277
+ ;
278
+
279
+ BOTH
280
+ : 'BOTH'
281
+ ;
282
+
283
+ CASE
284
+ : 'CASE'
285
+ ;
286
+
287
+ CAST
288
+ : 'CAST'
289
+ ;
290
+
291
+ CHECK
292
+ : 'CHECK'
293
+ ;
294
+
295
+ COLLATE
296
+ : 'COLLATE'
297
+ ;
298
+
299
+ COLUMN
300
+ : 'COLUMN'
301
+ ;
302
+
303
+ CONSTRAINT
304
+ : 'CONSTRAINT'
305
+ ;
306
+
307
+ CREATE
308
+ : 'CREATE'
309
+ ;
310
+
311
+ CURRENT_CATALOG
312
+ : 'CURRENT_CATALOG'
313
+ ;
314
+
315
+ CURRENT_DATE
316
+ : 'CURRENT_DATE'
317
+ ;
318
+
319
+ CURRENT_ROLE
320
+ : 'CURRENT_ROLE'
321
+ ;
322
+
323
+ CURRENT_TIME
324
+ : 'CURRENT_TIME'
325
+ ;
326
+
327
+ CURRENT_TIMESTAMP
328
+ : 'CURRENT_TIMESTAMP'
329
+ ;
330
+
331
+ CURRENT_USER
332
+ : 'CURRENT_USER'
333
+ ;
334
+
335
+ DEFAULT
336
+ : 'DEFAULT'
337
+ ;
338
+
339
+ DEFERRABLE
340
+ : 'DEFERRABLE'
341
+ ;
342
+
343
+ DESC
344
+ : 'DESC'
345
+ ;
346
+
347
+ DISTINCT
348
+ : 'DISTINCT'
349
+ ;
350
+
351
+ DO
352
+ : 'DO'
353
+ ;
354
+
355
+ ELSE
356
+ : 'ELSE'
357
+ ;
358
+
359
+ EXCEPT
360
+ : 'EXCEPT'
361
+ ;
362
+
363
+ FALSE_P
364
+ : 'FALSE'
365
+ ;
366
+
367
+ FETCH
368
+ : 'FETCH'
369
+ ;
370
+
371
+ FOR
372
+ : 'FOR'
373
+ ;
374
+
375
+ FOREIGN
376
+ : 'FOREIGN'
377
+ ;
378
+
379
+ FROM
380
+ : 'FROM'
381
+ ;
382
+
383
+ GRANT
384
+ : 'GRANT'
385
+ ;
386
+
387
+ GROUP_P
388
+ : 'GROUP'
389
+ ;
390
+
391
+ HAVING
392
+ : 'HAVING'
393
+ ;
394
+
395
+ IN_P
396
+ : 'IN'
397
+ ;
398
+
399
+ INITIALLY
400
+ : 'INITIALLY'
401
+ ;
402
+
403
+ INTERSECT
404
+ : 'INTERSECT'
405
+ ;
406
+
407
+ INTO
408
+ : 'INTO'
409
+ ;
410
+
411
+ LATERAL_P
412
+ : 'LATERAL'
413
+ ;
414
+
415
+ LEADING
416
+ : 'LEADING'
417
+ ;
418
+
419
+ LIMIT
420
+ : 'LIMIT'
421
+ ;
422
+
423
+ LOCALTIME
424
+ : 'LOCALTIME'
425
+ ;
426
+
427
+ LOCALTIMESTAMP
428
+ : 'LOCALTIMESTAMP'
429
+ ;
430
+
431
+ NOT
432
+ : 'NOT'
433
+ ;
434
+
435
+ NULL_P
436
+ : 'NULL'
437
+ ;
438
+
439
+ OFFSET
440
+ : 'OFFSET'
441
+ ;
442
+
443
+ ON
444
+ : 'ON'
445
+ ;
446
+
447
+ ONLY
448
+ : 'ONLY'
449
+ ;
450
+
451
+ OR
452
+ : 'OR'
453
+ ;
454
+
455
+ ORDER
456
+ : 'ORDER'
457
+ ;
458
+
459
+ PLACING
460
+ : 'PLACING'
461
+ ;
462
+
463
+ PRIMARY
464
+ : 'PRIMARY'
465
+ ;
466
+
467
+ REFERENCES
468
+ : 'REFERENCES'
469
+ ;
470
+
471
+ RETURNING
472
+ : 'RETURNING'
473
+ ;
474
+
475
+ SELECT
476
+ : 'SELECT'
477
+ ;
478
+
479
+ SESSION_USER
480
+ : 'SESSION_USER'
481
+ ;
482
+
483
+ SOME
484
+ : 'SOME'
485
+ ;
486
+
487
+ SYMMETRIC
488
+ : 'SYMMETRIC'
489
+ ;
490
+
491
+ TABLE
492
+ : 'TABLE'
493
+ ;
494
+
495
+ THEN
496
+ : 'THEN'
497
+ ;
498
+
499
+ TO
500
+ : 'TO'
501
+ ;
502
+
503
+ TRAILING
504
+ : 'TRAILING'
505
+ ;
506
+
507
+ TRUE_P
508
+ : 'TRUE'
509
+ ;
510
+
511
+ UNION
512
+ : 'UNION'
513
+ ;
514
+
515
+ UNIQUE
516
+ : 'UNIQUE'
517
+ ;
518
+
519
+ USER
520
+ : 'USER'
521
+ ;
522
+
523
+ USING
524
+ : 'USING'
525
+ ;
526
+
527
+ VARIADIC
528
+ : 'VARIADIC'
529
+ ;
530
+
531
+ WHEN
532
+ : 'WHEN'
533
+ ;
534
+
535
+ WHERE
536
+ : 'WHERE'
537
+ ;
538
+
539
+ WINDOW
540
+ : 'WINDOW'
541
+ ;
542
+
543
+ WITH
544
+ : 'WITH'
545
+ ;
546
+
547
+ //
548
+
549
+ // reserved keywords (can be function or type)
550
+
551
+ //
552
+
553
+ AUTHORIZATION
554
+ : 'AUTHORIZATION'
555
+ ;
556
+
557
+ BINARY
558
+ : 'BINARY'
559
+ ;
560
+
561
+ COLLATION
562
+ : 'COLLATION'
563
+ ;
564
+
565
+ CONCURRENTLY
566
+ : 'CONCURRENTLY'
567
+ ;
568
+
569
+ CROSS
570
+ : 'CROSS'
571
+ ;
572
+
573
+ CURRENT_SCHEMA
574
+ : 'CURRENT_SCHEMA'
575
+ ;
576
+
577
+ FREEZE
578
+ : 'FREEZE'
579
+ ;
580
+
581
+ FULL
582
+ : 'FULL'
583
+ ;
584
+
585
+ ILIKE
586
+ : 'ILIKE'
587
+ ;
588
+
589
+ INNER_P
590
+ : 'INNER'
591
+ ;
592
+
593
+ IS
594
+ : 'IS'
595
+ ;
596
+
597
+ ISNULL
598
+ : 'ISNULL'
599
+ ;
600
+
601
+ JOIN
602
+ : 'JOIN'
603
+ ;
604
+
605
+ LEFT
606
+ : 'LEFT'
607
+ ;
608
+
609
+ LIKE
610
+ : 'LIKE'
611
+ ;
612
+
613
+ NATURAL
614
+ : 'NATURAL'
615
+ ;
616
+
617
+ NOTNULL
618
+ : 'NOTNULL'
619
+ ;
620
+
621
+ OUTER_P
622
+ : 'OUTER'
623
+ ;
624
+
625
+ OVER
626
+ : 'OVER'
627
+ ;
628
+
629
+ OVERLAPS
630
+ : 'OVERLAPS'
631
+ ;
632
+
633
+ RIGHT
634
+ : 'RIGHT'
635
+ ;
636
+
637
+ SIMILAR
638
+ : 'SIMILAR'
639
+ ;
640
+
641
+ VERBOSE
642
+ : 'VERBOSE'
643
+ ;
644
+ //
645
+
646
+ // non-reserved keywords
647
+
648
+ //
649
+
650
+ ABORT_P
651
+ : 'ABORT'
652
+ ;
653
+
654
+ ABSOLUTE_P
655
+ : 'ABSOLUTE'
656
+ ;
657
+
658
+ ACCESS
659
+ : 'ACCESS'
660
+ ;
661
+
662
+ ACTION
663
+ : 'ACTION'
664
+ ;
665
+
666
+ ADD_P
667
+ : 'ADD'
668
+ ;
669
+
670
+ ADMIN
671
+ : 'ADMIN'
672
+ ;
673
+
674
+ AFTER
675
+ : 'AFTER'
676
+ ;
677
+
678
+ AGGREGATE
679
+ : 'AGGREGATE'
680
+ ;
681
+
682
+ ALSO
683
+ : 'ALSO'
684
+ ;
685
+
686
+ ALTER
687
+ : 'ALTER'
688
+ ;
689
+
690
+ ALWAYS
691
+ : 'ALWAYS'
692
+ ;
693
+
694
+ ASSERTION
695
+ : 'ASSERTION'
696
+ ;
697
+
698
+ ASSIGNMENT
699
+ : 'ASSIGNMENT'
700
+ ;
701
+
702
+ AT
703
+ : 'AT'
704
+ ;
705
+
706
+ ATTRIBUTE
707
+ : 'ATTRIBUTE'
708
+ ;
709
+
710
+ BACKWARD
711
+ : 'BACKWARD'
712
+ ;
713
+
714
+ BEFORE
715
+ : 'BEFORE'
716
+ ;
717
+
718
+ BEGIN_P
719
+ : 'BEGIN'
720
+ ;
721
+
722
+ BY
723
+ : 'BY'
724
+ ;
725
+
726
+ CACHE
727
+ : 'CACHE'
728
+ ;
729
+
730
+ CALLED
731
+ : 'CALLED'
732
+ ;
733
+
734
+ CASCADE
735
+ : 'CASCADE'
736
+ ;
737
+
738
+ CASCADED
739
+ : 'CASCADED'
740
+ ;
741
+
742
+ CATALOG
743
+ : 'CATALOG'
744
+ ;
745
+
746
+ CHAIN
747
+ : 'CHAIN'
748
+ ;
749
+
750
+ CHARACTERISTICS
751
+ : 'CHARACTERISTICS'
752
+ ;
753
+
754
+ CHECKPOINT
755
+ : 'CHECKPOINT'
756
+ ;
757
+
758
+ CLASS
759
+ : 'CLASS'
760
+ ;
761
+
762
+ CLOSE
763
+ : 'CLOSE'
764
+ ;
765
+
766
+ CLUSTER
767
+ : 'CLUSTER'
768
+ ;
769
+
770
+ COMMENT
771
+ : 'COMMENT'
772
+ ;
773
+
774
+ COMMENTS
775
+ : 'COMMENTS'
776
+ ;
777
+
778
+ COMMIT
779
+ : 'COMMIT'
780
+ ;
781
+
782
+ COMMITTED
783
+ : 'COMMITTED'
784
+ ;
785
+
786
+ CONFIGURATION
787
+ : 'CONFIGURATION'
788
+ ;
789
+
790
+ CONNECTION
791
+ : 'CONNECTION'
792
+ ;
793
+
794
+ CONSTRAINTS
795
+ : 'CONSTRAINTS'
796
+ ;
797
+
798
+ CONTENT_P
799
+ : 'CONTENT'
800
+ ;
801
+
802
+ CONTINUE_P
803
+ : 'CONTINUE'
804
+ ;
805
+
806
+ CONVERSION_P
807
+ : 'CONVERSION'
808
+ ;
809
+
810
+ COPY
811
+ : 'COPY'
812
+ ;
813
+
814
+ COST
815
+ : 'COST'
816
+ ;
817
+
818
+ CSV
819
+ : 'CSV'
820
+ ;
821
+
822
+ CURSOR
823
+ : 'CURSOR'
824
+ ;
825
+
826
+ CYCLE
827
+ : 'CYCLE'
828
+ ;
829
+
830
+ DATA_P
831
+ : 'DATA'
832
+ ;
833
+
834
+ DATABASE
835
+ : 'DATABASE'
836
+ ;
837
+
838
+ DAY_P
839
+ : 'DAY'
840
+ ;
841
+
842
+ DEALLOCATE
843
+ : 'DEALLOCATE'
844
+ ;
845
+
846
+ DECLARE
847
+ : 'DECLARE'
848
+ ;
849
+
850
+ DEFAULTS
851
+ : 'DEFAULTS'
852
+ ;
853
+
854
+ DEFERRED
855
+ : 'DEFERRED'
856
+ ;
857
+
858
+ DEFINER
859
+ : 'DEFINER'
860
+ ;
861
+
862
+ DELETE_P
863
+ : 'DELETE'
864
+ ;
865
+
866
+ DELIMITER
867
+ : 'DELIMITER'
868
+ ;
869
+
870
+ DELIMITERS
871
+ : 'DELIMITERS'
872
+ ;
873
+
874
+ DICTIONARY
875
+ : 'DICTIONARY'
876
+ ;
877
+
878
+ DISABLE_P
879
+ : 'DISABLE'
880
+ ;
881
+
882
+ DISCARD
883
+ : 'DISCARD'
884
+ ;
885
+
886
+ DOCUMENT_P
887
+ : 'DOCUMENT'
888
+ ;
889
+
890
+ DOMAIN_P
891
+ : 'DOMAIN'
892
+ ;
893
+
894
+ DOUBLE_P
895
+ : 'DOUBLE'
896
+ ;
897
+
898
+ DROP
899
+ : 'DROP'
900
+ ;
901
+
902
+ EACH
903
+ : 'EACH'
904
+ ;
905
+
906
+ ENABLE_P
907
+ : 'ENABLE'
908
+ ;
909
+
910
+ ENCODING
911
+ : 'ENCODING'
912
+ ;
913
+
914
+ ENCRYPTED
915
+ : 'ENCRYPTED'
916
+ ;
917
+
918
+ ENUM_P
919
+ : 'ENUM'
920
+ ;
921
+
922
+ ESCAPE
923
+ : 'ESCAPE'
924
+ ;
925
+
926
+ EVENT
927
+ : 'EVENT'
928
+ ;
929
+
930
+ EXCLUDE
931
+ : 'EXCLUDE'
932
+ ;
933
+
934
+ EXCLUDING
935
+ : 'EXCLUDING'
936
+ ;
937
+
938
+ EXCLUSIVE
939
+ : 'EXCLUSIVE'
940
+ ;
941
+
942
+ EXECUTE
943
+ : 'EXECUTE'
944
+ ;
945
+
946
+ EXPLAIN
947
+ : 'EXPLAIN'
948
+ ;
949
+
950
+ EXTENSION
951
+ : 'EXTENSION'
952
+ ;
953
+
954
+ EXTERNAL
955
+ : 'EXTERNAL'
956
+ ;
957
+
958
+ FAMILY
959
+ : 'FAMILY'
960
+ ;
961
+
962
+ FIRST_P
963
+ : 'FIRST'
964
+ ;
965
+
966
+ FOLLOWING
967
+ : 'FOLLOWING'
968
+ ;
969
+
970
+ FORCE
971
+ : 'FORCE'
972
+ ;
973
+
974
+ FORWARD
975
+ : 'FORWARD'
976
+ ;
977
+
978
+ FUNCTION
979
+ : 'FUNCTION'
980
+ ;
981
+
982
+ FUNCTIONS
983
+ : 'FUNCTIONS'
984
+ ;
985
+
986
+ GLOBAL
987
+ : 'GLOBAL'
988
+ ;
989
+
990
+ GRANTED
991
+ : 'GRANTED'
992
+ ;
993
+
994
+ HANDLER
995
+ : 'HANDLER'
996
+ ;
997
+
998
+ HEADER_P
999
+ : 'HEADER'
1000
+ ;
1001
+
1002
+ HOLD
1003
+ : 'HOLD'
1004
+ ;
1005
+
1006
+ HOUR_P
1007
+ : 'HOUR'
1008
+ ;
1009
+
1010
+ IDENTITY_P
1011
+ : 'IDENTITY'
1012
+ ;
1013
+
1014
+ IF_P
1015
+ : 'IF'
1016
+ ;
1017
+
1018
+ IMMEDIATE
1019
+ : 'IMMEDIATE'
1020
+ ;
1021
+
1022
+ IMMUTABLE
1023
+ : 'IMMUTABLE'
1024
+ ;
1025
+
1026
+ IMPLICIT_P
1027
+ : 'IMPLICIT'
1028
+ ;
1029
+
1030
+ INCLUDING
1031
+ : 'INCLUDING'
1032
+ ;
1033
+
1034
+ INCREMENT
1035
+ : 'INCREMENT'
1036
+ ;
1037
+
1038
+ INDEX
1039
+ : 'INDEX'
1040
+ ;
1041
+
1042
+ INDEXES
1043
+ : 'INDEXES'
1044
+ ;
1045
+
1046
+ INHERIT
1047
+ : 'INHERIT'
1048
+ ;
1049
+
1050
+ INHERITS
1051
+ : 'INHERITS'
1052
+ ;
1053
+
1054
+ INLINE_P
1055
+ : 'INLINE'
1056
+ ;
1057
+
1058
+ INSENSITIVE
1059
+ : 'INSENSITIVE'
1060
+ ;
1061
+
1062
+ INSERT
1063
+ : 'INSERT'
1064
+ ;
1065
+
1066
+ INSTEAD
1067
+ : 'INSTEAD'
1068
+ ;
1069
+
1070
+ INVOKER
1071
+ : 'INVOKER'
1072
+ ;
1073
+
1074
+ ISOLATION
1075
+ : 'ISOLATION'
1076
+ ;
1077
+
1078
+ KEY
1079
+ : 'KEY'
1080
+ ;
1081
+
1082
+ LABEL
1083
+ : 'LABEL'
1084
+ ;
1085
+
1086
+ LANGUAGE
1087
+ : 'LANGUAGE'
1088
+ ;
1089
+
1090
+ LARGE_P
1091
+ : 'LARGE'
1092
+ ;
1093
+
1094
+ LAST_P
1095
+ : 'LAST'
1096
+ ;
1097
+ //LC_COLLATE : 'LC'_'COLLATE;
1098
+
1099
+ //LC_CTYPE : 'LC'_'CTYPE;
1100
+
1101
+ LEAKPROOF
1102
+ : 'LEAKPROOF'
1103
+ ;
1104
+
1105
+ LEVEL
1106
+ : 'LEVEL'
1107
+ ;
1108
+
1109
+ LISTEN
1110
+ : 'LISTEN'
1111
+ ;
1112
+
1113
+ LOAD
1114
+ : 'LOAD'
1115
+ ;
1116
+
1117
+ LOCAL
1118
+ : 'LOCAL'
1119
+ ;
1120
+
1121
+ LOCATION
1122
+ : 'LOCATION'
1123
+ ;
1124
+
1125
+ LOCK_P
1126
+ : 'LOCK'
1127
+ ;
1128
+
1129
+ MAPPING
1130
+ : 'MAPPING'
1131
+ ;
1132
+
1133
+ MATCH
1134
+ : 'MATCH'
1135
+ ;
1136
+
1137
+ MATCHED
1138
+ : 'MATCHED'
1139
+ ;
1140
+
1141
+ MATERIALIZED
1142
+ : 'MATERIALIZED'
1143
+ ;
1144
+
1145
+ MAXVALUE
1146
+ : 'MAXVALUE'
1147
+ ;
1148
+
1149
+ MERGE
1150
+ : 'MERGE'
1151
+ ;
1152
+
1153
+ MINUTE_P
1154
+ : 'MINUTE'
1155
+ ;
1156
+
1157
+ MINVALUE
1158
+ : 'MINVALUE'
1159
+ ;
1160
+
1161
+ MODE
1162
+ : 'MODE'
1163
+ ;
1164
+
1165
+ MONTH_P
1166
+ : 'MONTH'
1167
+ ;
1168
+
1169
+ MOVE
1170
+ : 'MOVE'
1171
+ ;
1172
+
1173
+ NAME_P
1174
+ : 'NAME'
1175
+ ;
1176
+
1177
+ NAMES
1178
+ : 'NAMES'
1179
+ ;
1180
+
1181
+ NEXT
1182
+ : 'NEXT'
1183
+ ;
1184
+
1185
+ NO
1186
+ : 'NO'
1187
+ ;
1188
+
1189
+ NOTHING
1190
+ : 'NOTHING'
1191
+ ;
1192
+
1193
+ NOTIFY
1194
+ : 'NOTIFY'
1195
+ ;
1196
+
1197
+ NOWAIT
1198
+ : 'NOWAIT'
1199
+ ;
1200
+
1201
+ NULLS_P
1202
+ : 'NULLS'
1203
+ ;
1204
+
1205
+ OBJECT_P
1206
+ : 'OBJECT'
1207
+ ;
1208
+
1209
+ OF
1210
+ : 'OF'
1211
+ ;
1212
+
1213
+ OFF
1214
+ : 'OFF'
1215
+ ;
1216
+
1217
+ OIDS
1218
+ : 'OIDS'
1219
+ ;
1220
+
1221
+ OPERATOR
1222
+ : 'OPERATOR'
1223
+ ;
1224
+
1225
+ OPTION
1226
+ : 'OPTION'
1227
+ ;
1228
+
1229
+ OPTIONS
1230
+ : 'OPTIONS'
1231
+ ;
1232
+
1233
+ OWNED
1234
+ : 'OWNED'
1235
+ ;
1236
+
1237
+ OWNER
1238
+ : 'OWNER'
1239
+ ;
1240
+
1241
+ PARSER
1242
+ : 'PARSER'
1243
+ ;
1244
+
1245
+ PARTIAL
1246
+ : 'PARTIAL'
1247
+ ;
1248
+
1249
+ PARTITION
1250
+ : 'PARTITION'
1251
+ ;
1252
+
1253
+ PASSING
1254
+ : 'PASSING'
1255
+ ;
1256
+
1257
+ PASSWORD
1258
+ : 'PASSWORD'
1259
+ ;
1260
+
1261
+ PLANS
1262
+ : 'PLANS'
1263
+ ;
1264
+
1265
+ PRECEDING
1266
+ : 'PRECEDING'
1267
+ ;
1268
+
1269
+ PREPARE
1270
+ : 'PREPARE'
1271
+ ;
1272
+
1273
+ PREPARED
1274
+ : 'PREPARED'
1275
+ ;
1276
+
1277
+ PRESERVE
1278
+ : 'PRESERVE'
1279
+ ;
1280
+
1281
+ PRIOR
1282
+ : 'PRIOR'
1283
+ ;
1284
+
1285
+ PRIVILEGES
1286
+ : 'PRIVILEGES'
1287
+ ;
1288
+
1289
+ PROCEDURAL
1290
+ : 'PROCEDURAL'
1291
+ ;
1292
+
1293
+ PROCEDURE
1294
+ : 'PROCEDURE'
1295
+ ;
1296
+
1297
+ PROGRAM
1298
+ : 'PROGRAM'
1299
+ ;
1300
+
1301
+ QUOTE
1302
+ : 'QUOTE'
1303
+ ;
1304
+
1305
+ RANGE
1306
+ : 'RANGE'
1307
+ ;
1308
+
1309
+ READ
1310
+ : 'READ'
1311
+ ;
1312
+
1313
+ REASSIGN
1314
+ : 'REASSIGN'
1315
+ ;
1316
+
1317
+ RECHECK
1318
+ : 'RECHECK'
1319
+ ;
1320
+
1321
+ RECURSIVE
1322
+ : 'RECURSIVE'
1323
+ ;
1324
+
1325
+ REF
1326
+ : 'REF'
1327
+ ;
1328
+
1329
+ REFRESH
1330
+ : 'REFRESH'
1331
+ ;
1332
+
1333
+ REINDEX
1334
+ : 'REINDEX'
1335
+ ;
1336
+
1337
+ RELATIVE_P
1338
+ : 'RELATIVE'
1339
+ ;
1340
+
1341
+ RELEASE
1342
+ : 'RELEASE'
1343
+ ;
1344
+
1345
+ RENAME
1346
+ : 'RENAME'
1347
+ ;
1348
+
1349
+ REPEATABLE
1350
+ : 'REPEATABLE'
1351
+ ;
1352
+
1353
+ REPLACE
1354
+ : 'REPLACE'
1355
+ ;
1356
+
1357
+ REPLICA
1358
+ : 'REPLICA'
1359
+ ;
1360
+
1361
+ RESET
1362
+ : 'RESET'
1363
+ ;
1364
+
1365
+ RESTART
1366
+ : 'RESTART'
1367
+ ;
1368
+
1369
+ RESTRICT
1370
+ : 'RESTRICT'
1371
+ ;
1372
+
1373
+ RETURNS
1374
+ : 'RETURNS'
1375
+ ;
1376
+
1377
+ REVOKE
1378
+ : 'REVOKE'
1379
+ ;
1380
+
1381
+ ROLE
1382
+ : 'ROLE'
1383
+ ;
1384
+
1385
+ ROLLBACK
1386
+ : 'ROLLBACK'
1387
+ ;
1388
+
1389
+ ROWS
1390
+ : 'ROWS'
1391
+ ;
1392
+
1393
+ RULE
1394
+ : 'RULE'
1395
+ ;
1396
+
1397
+ SAVEPOINT
1398
+ : 'SAVEPOINT'
1399
+ ;
1400
+
1401
+ SCHEMA
1402
+ : 'SCHEMA'
1403
+ ;
1404
+
1405
+ SCROLL
1406
+ : 'SCROLL'
1407
+ ;
1408
+
1409
+ SEARCH
1410
+ : 'SEARCH'
1411
+ ;
1412
+
1413
+ SECOND_P
1414
+ : 'SECOND'
1415
+ ;
1416
+
1417
+ SECURITY
1418
+ : 'SECURITY'
1419
+ ;
1420
+
1421
+ SEQUENCE
1422
+ : 'SEQUENCE'
1423
+ ;
1424
+
1425
+ SEQUENCES
1426
+ : 'SEQUENCES'
1427
+ ;
1428
+
1429
+ SERIALIZABLE
1430
+ : 'SERIALIZABLE'
1431
+ ;
1432
+
1433
+ SERVER
1434
+ : 'SERVER'
1435
+ ;
1436
+
1437
+ SESSION
1438
+ : 'SESSION'
1439
+ ;
1440
+
1441
+ SET
1442
+ : 'SET'
1443
+ ;
1444
+
1445
+ SHARE
1446
+ : 'SHARE'
1447
+ ;
1448
+
1449
+ SHOW
1450
+ : 'SHOW'
1451
+ ;
1452
+
1453
+ SIMPLE
1454
+ : 'SIMPLE'
1455
+ ;
1456
+
1457
+ SNAPSHOT
1458
+ : 'SNAPSHOT'
1459
+ ;
1460
+
1461
+ STABLE
1462
+ : 'STABLE'
1463
+ ;
1464
+
1465
+ STANDALONE_P
1466
+ : 'STANDALONE'
1467
+ ;
1468
+
1469
+ START
1470
+ : 'START'
1471
+ ;
1472
+
1473
+ STATEMENT
1474
+ : 'STATEMENT'
1475
+ ;
1476
+
1477
+ STATISTICS
1478
+ : 'STATISTICS'
1479
+ ;
1480
+
1481
+ STDIN
1482
+ : 'STDIN'
1483
+ ;
1484
+
1485
+ STDOUT
1486
+ : 'STDOUT'
1487
+ ;
1488
+
1489
+ STORAGE
1490
+ : 'STORAGE'
1491
+ ;
1492
+
1493
+ STRICT_P
1494
+ : 'STRICT'
1495
+ ;
1496
+
1497
+ STRIP_P
1498
+ : 'STRIP'
1499
+ ;
1500
+
1501
+ SYSID
1502
+ : 'SYSID'
1503
+ ;
1504
+
1505
+ SYSTEM_P
1506
+ : 'SYSTEM'
1507
+ ;
1508
+
1509
+ TABLES
1510
+ : 'TABLES'
1511
+ ;
1512
+
1513
+ TABLESPACE
1514
+ : 'TABLESPACE'
1515
+ ;
1516
+
1517
+ TEMP
1518
+ : 'TEMP'
1519
+ ;
1520
+
1521
+ TEMPLATE
1522
+ : 'TEMPLATE'
1523
+ ;
1524
+
1525
+ TEMPORARY
1526
+ : 'TEMPORARY'
1527
+ ;
1528
+
1529
+ TEXT_P
1530
+ : 'TEXT'
1531
+ ;
1532
+
1533
+ TRANSACTION
1534
+ : 'TRANSACTION'
1535
+ ;
1536
+
1537
+ TRIGGER
1538
+ : 'TRIGGER'
1539
+ ;
1540
+
1541
+ TRUNCATE
1542
+ : 'TRUNCATE'
1543
+ ;
1544
+
1545
+ TRUSTED
1546
+ : 'TRUSTED'
1547
+ ;
1548
+
1549
+ TYPE_P
1550
+ : 'TYPE'
1551
+ ;
1552
+
1553
+ TYPES_P
1554
+ : 'TYPES'
1555
+ ;
1556
+
1557
+ UNBOUNDED
1558
+ : 'UNBOUNDED'
1559
+ ;
1560
+
1561
+ UNCOMMITTED
1562
+ : 'UNCOMMITTED'
1563
+ ;
1564
+
1565
+ UNENCRYPTED
1566
+ : 'UNENCRYPTED'
1567
+ ;
1568
+
1569
+ UNKNOWN
1570
+ : 'UNKNOWN'
1571
+ ;
1572
+
1573
+ UNLISTEN
1574
+ : 'UNLISTEN'
1575
+ ;
1576
+
1577
+ UNLOGGED
1578
+ : 'UNLOGGED'
1579
+ ;
1580
+
1581
+ UNTIL
1582
+ : 'UNTIL'
1583
+ ;
1584
+
1585
+ UPDATE
1586
+ : 'UPDATE'
1587
+ ;
1588
+
1589
+ VACUUM
1590
+ : 'VACUUM'
1591
+ ;
1592
+
1593
+ VALID
1594
+ : 'VALID'
1595
+ ;
1596
+
1597
+ VALIDATE
1598
+ : 'VALIDATE'
1599
+ ;
1600
+
1601
+ VALIDATOR
1602
+ : 'VALIDATOR'
1603
+ ;
1604
+ //VALUE : 'VALUE;
1605
+
1606
+ VARYING
1607
+ : 'VARYING'
1608
+ ;
1609
+
1610
+ VERSION_P
1611
+ : 'VERSION'
1612
+ ;
1613
+
1614
+ VIEW
1615
+ : 'VIEW'
1616
+ ;
1617
+
1618
+ VOLATILE
1619
+ : 'VOLATILE'
1620
+ ;
1621
+
1622
+ WHITESPACE_P
1623
+ : 'WHITESPACE'
1624
+ ;
1625
+
1626
+ WITHOUT
1627
+ : 'WITHOUT'
1628
+ ;
1629
+
1630
+ WORK
1631
+ : 'WORK'
1632
+ ;
1633
+
1634
+ WRAPPER
1635
+ : 'WRAPPER'
1636
+ ;
1637
+
1638
+ WRITE
1639
+ : 'WRITE'
1640
+ ;
1641
+
1642
+ XML_P
1643
+ : 'XML'
1644
+ ;
1645
+
1646
+ YEAR_P
1647
+ : 'YEAR'
1648
+ ;
1649
+
1650
+ YES_P
1651
+ : 'YES'
1652
+ ;
1653
+
1654
+ ZONE
1655
+ : 'ZONE'
1656
+ ;
1657
+ //
1658
+
1659
+ // non-reserved keywords (can not be function or type)
1660
+
1661
+ //
1662
+
1663
+ BETWEEN
1664
+ : 'BETWEEN'
1665
+ ;
1666
+
1667
+ BIGINT
1668
+ : 'BIGINT'
1669
+ ;
1670
+
1671
+ BIT
1672
+ : 'BIT'
1673
+ ;
1674
+
1675
+ BOOLEAN_P
1676
+ : 'BOOLEAN'
1677
+ ;
1678
+
1679
+ CHAR_P
1680
+ : 'CHAR'
1681
+ ;
1682
+
1683
+ CHARACTER
1684
+ : 'CHARACTER'
1685
+ ;
1686
+
1687
+ COALESCE
1688
+ : 'COALESCE'
1689
+ ;
1690
+
1691
+ DEC
1692
+ : 'DEC'
1693
+ ;
1694
+
1695
+ DECIMAL_P
1696
+ : 'DECIMAL'
1697
+ ;
1698
+
1699
+ EXISTS
1700
+ : 'EXISTS'
1701
+ ;
1702
+
1703
+ EXTRACT
1704
+ : 'EXTRACT'
1705
+ ;
1706
+
1707
+ FLOAT_P
1708
+ : 'FLOAT'
1709
+ ;
1710
+
1711
+ GREATEST
1712
+ : 'GREATEST'
1713
+ ;
1714
+
1715
+ INOUT
1716
+ : 'INOUT'
1717
+ ;
1718
+
1719
+ INT_P
1720
+ : 'INT'
1721
+ ;
1722
+
1723
+ INTEGER
1724
+ : 'INTEGER'
1725
+ ;
1726
+
1727
+ INTERVAL
1728
+ : 'INTERVAL'
1729
+ ;
1730
+
1731
+ LEAST
1732
+ : 'LEAST'
1733
+ ;
1734
+
1735
+ NATIONAL
1736
+ : 'NATIONAL'
1737
+ ;
1738
+
1739
+ NCHAR
1740
+ : 'NCHAR'
1741
+ ;
1742
+
1743
+ NONE
1744
+ : 'NONE'
1745
+ ;
1746
+
1747
+ NULLIF
1748
+ : 'NULLIF'
1749
+ ;
1750
+
1751
+ NUMERIC
1752
+ : 'NUMERIC'
1753
+ ;
1754
+
1755
+ OVERLAY
1756
+ : 'OVERLAY'
1757
+ ;
1758
+
1759
+ POSITION
1760
+ : 'POSITION'
1761
+ ;
1762
+
1763
+ PRECISION
1764
+ : 'PRECISION'
1765
+ ;
1766
+
1767
+ REAL
1768
+ : 'REAL'
1769
+ ;
1770
+
1771
+ ROW
1772
+ : 'ROW'
1773
+ ;
1774
+
1775
+ SETOF
1776
+ : 'SETOF'
1777
+ ;
1778
+
1779
+ SMALLINT
1780
+ : 'SMALLINT'
1781
+ ;
1782
+
1783
+ SUBSTRING
1784
+ : 'SUBSTRING'
1785
+ ;
1786
+
1787
+ TIME
1788
+ : 'TIME'
1789
+ ;
1790
+
1791
+ TIMESTAMP
1792
+ : 'TIMESTAMP'
1793
+ ;
1794
+
1795
+ TREAT
1796
+ : 'TREAT'
1797
+ ;
1798
+
1799
+ TRIM
1800
+ : 'TRIM'
1801
+ ;
1802
+
1803
+ VALUES
1804
+ : 'VALUES'
1805
+ ;
1806
+
1807
+ VARCHAR
1808
+ : 'VARCHAR'
1809
+ ;
1810
+
1811
+ XMLATTRIBUTES
1812
+ : 'XMLATTRIBUTES'
1813
+ ;
1814
+
1815
+ XMLCOMMENT
1816
+ : 'XMLCOMMENT'
1817
+ ;
1818
+
1819
+ XMLAGG
1820
+ : 'XMLAGG'
1821
+ ;
1822
+
1823
+ XML_IS_WELL_FORMED
1824
+ : 'XML_IS_WELL_FORMED'
1825
+ ;
1826
+
1827
+ XML_IS_WELL_FORMED_DOCUMENT
1828
+ : 'XML_IS_WELL_FORMED_DOCUMENT'
1829
+ ;
1830
+
1831
+ XML_IS_WELL_FORMED_CONTENT
1832
+ : 'XML_IS_WELL_FORMED_CONTENT'
1833
+ ;
1834
+
1835
+ XPATH
1836
+ : 'XPATH'
1837
+ ;
1838
+
1839
+ XPATH_EXISTS
1840
+ : 'XPATH_EXISTS'
1841
+ ;
1842
+
1843
+ XMLCONCAT
1844
+ : 'XMLCONCAT'
1845
+ ;
1846
+
1847
+ XMLELEMENT
1848
+ : 'XMLELEMENT'
1849
+ ;
1850
+
1851
+ XMLEXISTS
1852
+ : 'XMLEXISTS'
1853
+ ;
1854
+
1855
+ XMLFOREST
1856
+ : 'XMLFOREST'
1857
+ ;
1858
+
1859
+ XMLPARSE
1860
+ : 'XMLPARSE'
1861
+ ;
1862
+
1863
+ XMLPI
1864
+ : 'XMLPI'
1865
+ ;
1866
+
1867
+ XMLROOT
1868
+ : 'XMLROOT'
1869
+ ;
1870
+
1871
+ XMLSERIALIZE
1872
+ : 'XMLSERIALIZE'
1873
+ ;
1874
+ //MISSED
1875
+
1876
+ CALL
1877
+ : 'CALL'
1878
+ ;
1879
+
1880
+ CURRENT_P
1881
+ : 'CURRENT'
1882
+ ;
1883
+
1884
+ ATTACH
1885
+ : 'ATTACH'
1886
+ ;
1887
+
1888
+ DETACH
1889
+ : 'DETACH'
1890
+ ;
1891
+
1892
+ EXPRESSION
1893
+ : 'EXPRESSION'
1894
+ ;
1895
+
1896
+ GENERATED
1897
+ : 'GENERATED'
1898
+ ;
1899
+
1900
+ LOGGED
1901
+ : 'LOGGED'
1902
+ ;
1903
+
1904
+ STORED
1905
+ : 'STORED'
1906
+ ;
1907
+
1908
+ INCLUDE
1909
+ : 'INCLUDE'
1910
+ ;
1911
+
1912
+ ROUTINE
1913
+ : 'ROUTINE'
1914
+ ;
1915
+
1916
+ TRANSFORM
1917
+ : 'TRANSFORM'
1918
+ ;
1919
+
1920
+ IMPORT_P
1921
+ : 'IMPORT'
1922
+ ;
1923
+
1924
+ POLICY
1925
+ : 'POLICY'
1926
+ ;
1927
+
1928
+ METHOD
1929
+ : 'METHOD'
1930
+ ;
1931
+
1932
+ REFERENCING
1933
+ : 'REFERENCING'
1934
+ ;
1935
+
1936
+ NEW
1937
+ : 'NEW'
1938
+ ;
1939
+
1940
+ OLD
1941
+ : 'OLD'
1942
+ ;
1943
+
1944
+ VALUE_P
1945
+ : 'VALUE'
1946
+ ;
1947
+
1948
+ SUBSCRIPTION
1949
+ : 'SUBSCRIPTION'
1950
+ ;
1951
+
1952
+ PUBLICATION
1953
+ : 'PUBLICATION'
1954
+ ;
1955
+
1956
+ OUT_P
1957
+ : 'OUT'
1958
+ ;
1959
+
1960
+ END_P
1961
+ : 'END'
1962
+ ;
1963
+
1964
+ ROUTINES
1965
+ : 'ROUTINES'
1966
+ ;
1967
+
1968
+ SCHEMAS
1969
+ : 'SCHEMAS'
1970
+ ;
1971
+
1972
+ PROCEDURES
1973
+ : 'PROCEDURES'
1974
+ ;
1975
+
1976
+ INPUT_P
1977
+ : 'INPUT'
1978
+ ;
1979
+
1980
+ SUPPORT
1981
+ : 'SUPPORT'
1982
+ ;
1983
+
1984
+ PARALLEL
1985
+ : 'PARALLEL'
1986
+ ;
1987
+
1988
+ SQL_P
1989
+ : 'SQL'
1990
+ ;
1991
+
1992
+ DEPENDS
1993
+ : 'DEPENDS'
1994
+ ;
1995
+
1996
+ OVERRIDING
1997
+ : 'OVERRIDING'
1998
+ ;
1999
+
2000
+ CONFLICT
2001
+ : 'CONFLICT'
2002
+ ;
2003
+
2004
+ SKIP_P
2005
+ : 'SKIP'
2006
+ ;
2007
+
2008
+ LOCKED
2009
+ : 'LOCKED'
2010
+ ;
2011
+
2012
+ TIES
2013
+ : 'TIES'
2014
+ ;
2015
+
2016
+ ROLLUP
2017
+ : 'ROLLUP'
2018
+ ;
2019
+
2020
+ CUBE
2021
+ : 'CUBE'
2022
+ ;
2023
+
2024
+ GROUPING
2025
+ : 'GROUPING'
2026
+ ;
2027
+
2028
+ SETS
2029
+ : 'SETS'
2030
+ ;
2031
+
2032
+ TABLESAMPLE
2033
+ : 'TABLESAMPLE'
2034
+ ;
2035
+
2036
+ ORDINALITY
2037
+ : 'ORDINALITY'
2038
+ ;
2039
+
2040
+ XMLTABLE
2041
+ : 'XMLTABLE'
2042
+ ;
2043
+
2044
+ COLUMNS
2045
+ : 'COLUMNS'
2046
+ ;
2047
+
2048
+ XMLNAMESPACES
2049
+ : 'XMLNAMESPACES'
2050
+ ;
2051
+
2052
+ ROWTYPE
2053
+ : 'ROWTYPE'
2054
+ ;
2055
+
2056
+ NORMALIZED
2057
+ : 'NORMALIZED'
2058
+ ;
2059
+
2060
+ WITHIN
2061
+ : 'WITHIN'
2062
+ ;
2063
+
2064
+ FILTER
2065
+ : 'FILTER'
2066
+ ;
2067
+
2068
+ GROUPS
2069
+ : 'GROUPS'
2070
+ ;
2071
+
2072
+ OTHERS
2073
+ : 'OTHERS'
2074
+ ;
2075
+
2076
+ NFC
2077
+ : 'NFC'
2078
+ ;
2079
+
2080
+ NFD
2081
+ : 'NFD'
2082
+ ;
2083
+
2084
+ NFKC
2085
+ : 'NFKC'
2086
+ ;
2087
+
2088
+ NFKD
2089
+ : 'NFKD'
2090
+ ;
2091
+
2092
+ UESCAPE
2093
+ : 'UESCAPE'
2094
+ ;
2095
+
2096
+ VIEWS
2097
+ : 'VIEWS'
2098
+ ;
2099
+
2100
+ NORMALIZE
2101
+ : 'NORMALIZE'
2102
+ ;
2103
+
2104
+ DUMP
2105
+ : 'DUMP'
2106
+ ;
2107
+
2108
+ PRINT_STRICT_PARAMS
2109
+ : 'PRINT_STRICT_PARAMS'
2110
+ ;
2111
+
2112
+ VARIABLE_CONFLICT
2113
+ : 'VARIABLE_CONFLICT'
2114
+ ;
2115
+
2116
+ ERROR
2117
+ : 'ERROR'
2118
+ ;
2119
+
2120
+ USE_VARIABLE
2121
+ : 'USE_VARIABLE'
2122
+ ;
2123
+
2124
+ USE_COLUMN
2125
+ : 'USE_COLUMN'
2126
+ ;
2127
+
2128
+ ALIAS
2129
+ : 'ALIAS'
2130
+ ;
2131
+
2132
+ CONSTANT
2133
+ : 'CONSTANT'
2134
+ ;
2135
+
2136
+ PERFORM
2137
+ : 'PERFORM'
2138
+ ;
2139
+
2140
+ GET
2141
+ : 'GET'
2142
+ ;
2143
+
2144
+ DIAGNOSTICS
2145
+ : 'DIAGNOSTICS'
2146
+ ;
2147
+
2148
+ STACKED
2149
+ : 'STACKED'
2150
+ ;
2151
+
2152
+ ELSIF
2153
+ : 'ELSIF'
2154
+ ;
2155
+
2156
+ WHILE
2157
+ : 'WHILE'
2158
+ ;
2159
+
2160
+ REVERSE
2161
+ : 'REVERSE'
2162
+ ;
2163
+
2164
+ FOREACH
2165
+ : 'FOREACH'
2166
+ ;
2167
+
2168
+ SLICE
2169
+ : 'SLICE'
2170
+ ;
2171
+
2172
+ EXIT
2173
+ : 'EXIT'
2174
+ ;
2175
+
2176
+ RETURN
2177
+ : 'RETURN'
2178
+ ;
2179
+
2180
+ QUERY
2181
+ : 'QUERY'
2182
+ ;
2183
+
2184
+ RAISE
2185
+ : 'RAISE'
2186
+ ;
2187
+
2188
+ SQLSTATE
2189
+ : 'SQLSTATE'
2190
+ ;
2191
+
2192
+ DEBUG
2193
+ : 'DEBUG'
2194
+ ;
2195
+
2196
+ LOG
2197
+ : 'LOG'
2198
+ ;
2199
+
2200
+ INFO
2201
+ : 'INFO'
2202
+ ;
2203
+
2204
+ NOTICE
2205
+ : 'NOTICE'
2206
+ ;
2207
+
2208
+ WARNING
2209
+ : 'WARNING'
2210
+ ;
2211
+
2212
+ EXCEPTION
2213
+ : 'EXCEPTION'
2214
+ ;
2215
+
2216
+ ASSERT
2217
+ : 'ASSERT'
2218
+ ;
2219
+
2220
+ LOOP
2221
+ : 'LOOP'
2222
+ ;
2223
+
2224
+ OPEN
2225
+ : 'OPEN'
2226
+ ;
2227
+ //
2228
+
2229
+ // IDENTIFIERS (4.1.1)
2230
+
2231
+ //
2232
+
2233
+ ABS
2234
+ : 'ABS'
2235
+ ;
2236
+
2237
+ CBRT
2238
+ : 'CBRT'
2239
+ ;
2240
+
2241
+ CEIL
2242
+ : 'CEIL'
2243
+ ;
2244
+
2245
+ CEILING
2246
+ : 'CEILING'
2247
+ ;
2248
+
2249
+ DEGREES
2250
+ : 'DEGREES'
2251
+ ;
2252
+
2253
+ DIV
2254
+ : 'DIV'
2255
+ ;
2256
+
2257
+ EXP
2258
+ : 'EXP'
2259
+ ;
2260
+
2261
+ FACTORIAL
2262
+ : 'FACTORIAL'
2263
+ ;
2264
+
2265
+ FLOOR
2266
+ : 'FLOOR'
2267
+ ;
2268
+
2269
+ GCD
2270
+ : 'GCD'
2271
+ ;
2272
+
2273
+ LCM
2274
+ : 'LCM'
2275
+ ;
2276
+
2277
+ LN
2278
+ : 'LN'
2279
+ ;
2280
+
2281
+ LOG10
2282
+ : 'LOG10'
2283
+ ;
2284
+
2285
+ MIN_SCALE
2286
+ : 'MIN_SCALE'
2287
+ ;
2288
+
2289
+ MOD
2290
+ : 'MOD'
2291
+ ;
2292
+
2293
+ PI
2294
+ : 'PI'
2295
+ ;
2296
+
2297
+ POWER
2298
+ : 'POWER'
2299
+ ;
2300
+
2301
+ RADIANS
2302
+ : 'RADIANS'
2303
+ ;
2304
+
2305
+ ROUND
2306
+ : 'ROUND'
2307
+ ;
2308
+
2309
+ SCALE
2310
+ : 'SCALE'
2311
+ ;
2312
+
2313
+ SIGN
2314
+ : 'SIGN'
2315
+ ;
2316
+
2317
+ SQRT
2318
+ : 'SQRT'
2319
+ ;
2320
+
2321
+ TRIM_SCALE
2322
+ : 'TRIM_SCALE'
2323
+ ;
2324
+
2325
+ TRUNC
2326
+ : 'TRUNC'
2327
+ ;
2328
+
2329
+ WIDTH_BUCKET
2330
+ : 'WIDTH_BUCKET'
2331
+ ;
2332
+
2333
+ RANDOM
2334
+ : 'RANDOM'
2335
+ ;
2336
+
2337
+ SETSEED
2338
+ : 'SETSEED'
2339
+ ;
2340
+
2341
+ ACOS
2342
+ : 'ACOS'
2343
+ ;
2344
+
2345
+ ACOSD
2346
+ : 'ACOSD'
2347
+ ;
2348
+
2349
+ ASIN
2350
+ : 'ASIN'
2351
+ ;
2352
+
2353
+ ASIND
2354
+ : 'ASIND'
2355
+ ;
2356
+
2357
+ ATAN
2358
+ : 'ATAN'
2359
+ ;
2360
+
2361
+ ATAND
2362
+ : 'ATAND'
2363
+ ;
2364
+
2365
+ ATAN2
2366
+ : 'ATAN2'
2367
+ ;
2368
+
2369
+ ATAN2D
2370
+ : 'ATAN2D'
2371
+ ;
2372
+
2373
+ COS
2374
+ : 'COS'
2375
+ ;
2376
+
2377
+ COSD
2378
+ : 'COSD'
2379
+ ;
2380
+
2381
+ COT
2382
+ : 'COT'
2383
+ ;
2384
+
2385
+ COTD
2386
+ : 'COTD'
2387
+ ;
2388
+
2389
+ SIN
2390
+ : 'SIN'
2391
+ ;
2392
+
2393
+ SIND
2394
+ : 'SIND'
2395
+ ;
2396
+
2397
+ TAN
2398
+ : 'TAN'
2399
+ ;
2400
+
2401
+ TAND
2402
+ : 'TAND'
2403
+ ;
2404
+
2405
+ SINH
2406
+ : 'SINH'
2407
+ ;
2408
+
2409
+ COSH
2410
+ : 'COSH'
2411
+ ;
2412
+
2413
+ TANH
2414
+ : 'TANH'
2415
+ ;
2416
+
2417
+ ASINH
2418
+ : 'ASINH'
2419
+ ;
2420
+
2421
+ ACOSH
2422
+ : 'ACOSH'
2423
+ ;
2424
+
2425
+ ATANH
2426
+ : 'ATANH'
2427
+ ;
2428
+
2429
+ BIT_LENGTH
2430
+ : 'BIT_LENGTH'
2431
+ ;
2432
+
2433
+ CHAR_LENGTH
2434
+ : 'CHAR_LENGTH'
2435
+ ;
2436
+
2437
+ CHARACTER_LENGTH
2438
+ : 'CHARACTER_LENGTH'
2439
+ ;
2440
+
2441
+ LOWER
2442
+ : 'LOWER'
2443
+ ;
2444
+
2445
+ OCTET_LENGTH
2446
+ : 'OCTET_LENGTH'
2447
+ ;
2448
+
2449
+ UPPER
2450
+ : 'UPPER'
2451
+ ;
2452
+
2453
+ ASCII
2454
+ : 'ASCII'
2455
+ ;
2456
+
2457
+ BTRIM
2458
+ : 'BTRIM'
2459
+ ;
2460
+
2461
+ CHR
2462
+ : 'CHR'
2463
+ ;
2464
+
2465
+ CONCAT
2466
+ : 'CONCAT'
2467
+ ;
2468
+
2469
+ CONCAT_WS
2470
+ : 'CONCAT_WS'
2471
+ ;
2472
+
2473
+ FORMAT
2474
+ : 'FORMAT'
2475
+ ;
2476
+
2477
+ INITCAP
2478
+ : 'INITCAP'
2479
+ ;
2480
+
2481
+ LENGTH
2482
+ : 'LENGTH'
2483
+ ;
2484
+
2485
+ LPAD
2486
+ : 'LPAD'
2487
+ ;
2488
+
2489
+ LTRIM
2490
+ : 'LTRIM'
2491
+ ;
2492
+
2493
+ MD5
2494
+ : 'MD5'
2495
+ ;
2496
+
2497
+ PARSE_IDENT
2498
+ : 'PARSE_IDENT'
2499
+ ;
2500
+
2501
+ PG_CLIENT_ENCODING
2502
+ : 'PG_CLIENT_ENCODING'
2503
+ ;
2504
+
2505
+ QUOTE_IDENT
2506
+ : 'QUOTE_IDENT'
2507
+ ;
2508
+
2509
+ QUOTE_LITERAL
2510
+ : 'QUOTE_LITERAL'
2511
+ ;
2512
+
2513
+ QUOTE_NULLABLE
2514
+ : 'QUOTE_NULLABLE'
2515
+ ;
2516
+
2517
+ REGEXP_COUNT
2518
+ : 'REGEXP_COUNT'
2519
+ ;
2520
+
2521
+ REGEXP_INSTR
2522
+ : 'REGEXP_INSTR'
2523
+ ;
2524
+
2525
+ REGEXP_LIKE
2526
+ : 'REGEXP_LIKE'
2527
+ ;
2528
+
2529
+ REGEXP_MATCH
2530
+ : 'REGEXP_MATCH'
2531
+ ;
2532
+
2533
+ REGEXP_MATCHES
2534
+ : 'REGEXP_MATCHES'
2535
+ ;
2536
+
2537
+ REGEXP_REPLACE
2538
+ : 'REGEXP_REPLACE'
2539
+ ;
2540
+
2541
+ REGEXP_SPLIT_TO_ARRAY
2542
+ : 'REGEXP_SPLIT_TO_ARRAY'
2543
+ ;
2544
+
2545
+ REGEXP_SPLIT_TO_TABLE
2546
+ : 'REGEXP_SPLIT_TO_TABLE'
2547
+ ;
2548
+
2549
+ REGEXP_SUBSTR
2550
+ : 'REGEXP_SUBSTR'
2551
+ ;
2552
+
2553
+ REPEAT
2554
+ : 'REPEAT'
2555
+ ;
2556
+
2557
+ RPAD
2558
+ : 'RPAD'
2559
+ ;
2560
+
2561
+ RTRIM
2562
+ : 'RTRIM'
2563
+ ;
2564
+
2565
+ SPLIT_PART
2566
+ : 'SPLIT_PART'
2567
+ ;
2568
+
2569
+ STARTS_WITH
2570
+ : 'STARTS_WITH'
2571
+ ;
2572
+
2573
+ STRING_TO_ARRAY
2574
+ : 'STRING_TO_ARRAY'
2575
+ ;
2576
+
2577
+ STRING_TO_TABLE
2578
+ : 'STRING_TO_TABLE'
2579
+ ;
2580
+
2581
+ STRPOS
2582
+ : 'STRPOS'
2583
+ ;
2584
+
2585
+ SUBSTR
2586
+ : 'SUBSTR'
2587
+ ;
2588
+
2589
+ TO_ASCII
2590
+ : 'TO_ASCII'
2591
+ ;
2592
+
2593
+ TO_HEX
2594
+ : 'TO_HEX'
2595
+ ;
2596
+
2597
+ TRANSLATE
2598
+ : 'TRANSLATE'
2599
+ ;
2600
+
2601
+ UNISTR
2602
+ : 'UNISTR'
2603
+ ;
2604
+
2605
+ AGE
2606
+ : 'AGE'
2607
+ ;
2608
+
2609
+ CLOCK_TIMESTAMP
2610
+ : 'CLOCK_TIMESTAMP'
2611
+ ;
2612
+
2613
+ DATE_BIN
2614
+ : 'DATE_BIN'
2615
+ ;
2616
+
2617
+ DATE_PART
2618
+ : 'DATE_PART'
2619
+ ;
2620
+
2621
+ DATE_TRUNC
2622
+ : 'DATE_TRUNC'
2623
+ ;
2624
+
2625
+ ISFINITE
2626
+ : 'ISFINITE'
2627
+ ;
2628
+
2629
+ JUSTIFY_DAYS
2630
+ : 'JUSTIFY_DAYS'
2631
+ ;
2632
+
2633
+ JUSTIFY_HOURS
2634
+ : 'JUSTIFY_HOURS'
2635
+ ;
2636
+
2637
+ JUSTIFY_INTERVAL
2638
+ : 'JUSTIFY_INTERVAL'
2639
+ ;
2640
+
2641
+ MAKE_DATE
2642
+ : 'MAKE_DATE'
2643
+ ;
2644
+
2645
+ MAKE_INTERVAL
2646
+ : 'MAKE_INTERVAL'
2647
+ ;
2648
+
2649
+ MAKE_TIME
2650
+ : 'MAKE_TIME'
2651
+ ;
2652
+
2653
+ MAKE_TIMESTAMP
2654
+ : 'MAKE_TIMESTAMP'
2655
+ ;
2656
+
2657
+ MAKE_TIMESTAMPTZ
2658
+ : 'MAKE_TIMESTAMPTZ'
2659
+ ;
2660
+
2661
+ NOW
2662
+ : 'NOW'
2663
+ ;
2664
+
2665
+ STATEMENT_TIMESTAMP
2666
+ : 'STATEMENT_TIMESTAMP'
2667
+ ;
2668
+
2669
+ TIMEOFDAY
2670
+ : 'TIMEOFDAY'
2671
+ ;
2672
+
2673
+ TRANSACTION_TIMESTAMP
2674
+ : 'TRANSACTION_TIMESTAMP'
2675
+ ;
2676
+
2677
+ TO_TIMESTAMP
2678
+ : 'TO_TIMESTAMP'
2679
+ ;
2680
+
2681
+ TO_CHAR
2682
+ : 'TO_CHAR'
2683
+ ;
2684
+
2685
+ TO_DATE
2686
+ : 'TO_DATE'
2687
+ ;
2688
+
2689
+ TO_NUMBER
2690
+ : 'TO_NUMBER'
2691
+ ;
2692
+
2693
+ Identifier
2694
+ : IdentifierStartChar IdentifierChar*
2695
+ ;
2696
+
2697
+ fragment IdentifierStartChar options { caseInsensitive=false; }
2698
+ : // these are the valid identifier start characters below 0x7F
2699
+ [a-zA-Z_]
2700
+ | // these are the valid characters from 0x80 to 0xFF
2701
+ [\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]
2702
+ | // these are the letters above 0xFF which only need a single UTF-16 code unit
2703
+ [\u0100-\uD7FF\uE000-\uFFFF]
2704
+ {charIsLetter()}?
2705
+ | // letters which require multiple UTF-16 code units
2706
+ [\uD800-\uDBFF] [\uDC00-\uDFFF]
2707
+ {
2708
+ CheckIfUtf32Letter()
2709
+ }?
2710
+
2711
+ ;
2712
+
2713
+ fragment IdentifierChar
2714
+ : StrictIdentifierChar
2715
+ | '$'
2716
+ ;
2717
+
2718
+ fragment StrictIdentifierChar
2719
+ : IdentifierStartChar
2720
+ | [0-9]
2721
+ ;
2722
+ /* Quoted Identifiers
2723
+ *
2724
+ * These are divided into four separate tokens, allowing distinction of valid quoted identifiers from invalid quoted
2725
+ * identifiers without sacrificing the ability of the lexer to reliably recover from lexical errors in the input.
2726
+ */
2727
+
2728
+
2729
+ QuotedIdentifier
2730
+ : UnterminatedQuotedIdentifier '"'
2731
+ ;
2732
+ // This is a quoted identifier which only contains valid characters but is not terminated
2733
+
2734
+ UnterminatedQuotedIdentifier
2735
+ : '"' ('""' | ~ [\u0000"])*
2736
+ ;
2737
+ // This is a quoted identifier which is terminated but contains a \u0000 character
2738
+
2739
+ InvalidQuotedIdentifier
2740
+ : InvalidUnterminatedQuotedIdentifier '"'
2741
+ ;
2742
+ // This is a quoted identifier which is unterminated and contains a \u0000 character
2743
+
2744
+ InvalidUnterminatedQuotedIdentifier
2745
+ : '"' ('""' | ~ '"')*
2746
+ ;
2747
+ /* Unicode Quoted Identifiers
2748
+ *
2749
+ * These are divided into four separate tokens, allowing distinction of valid Unicode quoted identifiers from invalid
2750
+ * Unicode quoted identifiers without sacrificing the ability of the lexer to reliably recover from lexical errors in
2751
+ * the input. Note that escape sequences are never checked as part of this determination due to the ability of users
2752
+ * to change the escape character with a UESCAPE clause following the Unicode quoted identifier.
2753
+ *
2754
+ * TODO: these rules assume "" is still a valid escape sequence within a Unicode quoted identifier.
2755
+ */
2756
+
2757
+
2758
+ UnicodeQuotedIdentifier
2759
+ : 'U' '&' QuotedIdentifier
2760
+ ;
2761
+ // This is a Unicode quoted identifier which only contains valid characters but is not terminated
2762
+
2763
+ UnterminatedUnicodeQuotedIdentifier
2764
+ : 'U' '&' UnterminatedQuotedIdentifier
2765
+ ;
2766
+ // This is a Unicode quoted identifier which is terminated but contains a \u0000 character
2767
+
2768
+ InvalidUnicodeQuotedIdentifier
2769
+ : 'U' '&' InvalidQuotedIdentifier
2770
+ ;
2771
+ // This is a Unicode quoted identifier which is unterminated and contains a \u0000 character
2772
+
2773
+ InvalidUnterminatedUnicodeQuotedIdentifier
2774
+ : 'U' '&' InvalidUnterminatedQuotedIdentifier
2775
+ ;
2776
+ //
2777
+
2778
+ // CONSTANTS (4.1.2)
2779
+
2780
+ //
2781
+
2782
+ // String Constants (4.1.2.1)
2783
+
2784
+ StringConstant
2785
+ : UnterminatedStringConstant '\''
2786
+ ;
2787
+
2788
+ UnterminatedStringConstant
2789
+ : '\'' ('\'\'' | ~ '\'')*
2790
+ ;
2791
+ // String Constants with C-style Escapes (4.1.2.2)
2792
+
2793
+ BeginEscapeStringConstant
2794
+ : 'E' '\'' -> more , pushMode (EscapeStringConstantMode)
2795
+ ;
2796
+ // String Constants with Unicode Escapes (4.1.2.3)
2797
+
2798
+ //
2799
+
2800
+ // Note that escape sequences are never checked as part of this token due to the ability of users to change the escape
2801
+
2802
+ // character with a UESCAPE clause following the Unicode string constant.
2803
+
2804
+ //
2805
+
2806
+ // TODO: these rules assume '' is still a valid escape sequence within a Unicode string constant.
2807
+
2808
+ UnicodeEscapeStringConstant
2809
+ : UnterminatedUnicodeEscapeStringConstant '\''
2810
+ ;
2811
+
2812
+ UnterminatedUnicodeEscapeStringConstant
2813
+ : 'U' '&' UnterminatedStringConstant
2814
+ ;
2815
+ // Dollar-quoted String Constants (4.1.2.4)
2816
+
2817
+ BeginDollarStringConstant
2818
+ : '$' Tag? '$'
2819
+ {pushTag();} -> pushMode (DollarQuotedStringMode)
2820
+ ;
2821
+ /* "The tag, if any, of a dollar-quoted string follows the same rules as an
2822
+ * unquoted identifier, except that it cannot contain a dollar sign."
2823
+ */
2824
+
2825
+
2826
+ fragment Tag
2827
+ : IdentifierStartChar StrictIdentifierChar*
2828
+ ;
2829
+ // Bit-strings Constants (4.1.2.5)
2830
+
2831
+ BinaryStringConstant
2832
+ : UnterminatedBinaryStringConstant '\''
2833
+ ;
2834
+
2835
+ UnterminatedBinaryStringConstant
2836
+ : 'B' '\'' [01]*
2837
+ ;
2838
+
2839
+ InvalidBinaryStringConstant
2840
+ : InvalidUnterminatedBinaryStringConstant '\''
2841
+ ;
2842
+
2843
+ InvalidUnterminatedBinaryStringConstant
2844
+ : 'B' UnterminatedStringConstant
2845
+ ;
2846
+
2847
+ HexadecimalStringConstant
2848
+ : UnterminatedHexadecimalStringConstant '\''
2849
+ ;
2850
+
2851
+ UnterminatedHexadecimalStringConstant
2852
+ : 'X' '\'' [0-9A-F]*
2853
+ ;
2854
+
2855
+ InvalidHexadecimalStringConstant
2856
+ : InvalidUnterminatedHexadecimalStringConstant '\''
2857
+ ;
2858
+
2859
+ InvalidUnterminatedHexadecimalStringConstant
2860
+ : 'X' UnterminatedStringConstant
2861
+ ;
2862
+ // Numeric Constants (4.1.2.6)
2863
+
2864
+ Integral
2865
+ : Digits
2866
+ ;
2867
+
2868
+ NumericFail
2869
+ : Digits '..'
2870
+ {HandleNumericFail();}
2871
+ ;
2872
+
2873
+ Numeric
2874
+ : Digits '.' Digits? /*? replaced with + to solve problem with DOT_DOT .. but this surely must be rewriten */
2875
+
2876
+ ('E' [+-]? Digits)?
2877
+ | '.' Digits ('E' [+-]? Digits)?
2878
+ | Digits 'E' [+-]? Digits
2879
+ ;
2880
+
2881
+ fragment Digits
2882
+ : [0-9]+
2883
+ ;
2884
+
2885
+ PLSQLVARIABLENAME
2886
+ : ':' [A-Z_] [A-Z_0-9$]*
2887
+ ;
2888
+
2889
+ PLSQLIDENTIFIER
2890
+ : ':"' ('\\' . | '""' | ~ ('"' | '\\'))* '"'
2891
+ ;
2892
+ //
2893
+
2894
+ // WHITESPACE (4.1)
2895
+
2896
+ //
2897
+
2898
+ Whitespace
2899
+ : [ \t]+ -> channel (HIDDEN)
2900
+ ;
2901
+
2902
+ Newline
2903
+ : ('\r' '\n'? | '\n') -> channel (HIDDEN)
2904
+ ;
2905
+ //
2906
+
2907
+ // COMMENTS (4.1.5)
2908
+
2909
+ //
2910
+
2911
+ LineComment
2912
+ : '--' ~ [\r\n]* -> channel (HIDDEN)
2913
+ ;
2914
+
2915
+ BlockComment
2916
+ : ('/*' ('/'* BlockComment | ~ [/*] | '/'+ ~ [/*] | '*'+ ~ [/*])* '*'* '*/') -> channel (HIDDEN)
2917
+ ;
2918
+
2919
+ UnterminatedBlockComment
2920
+ : '/*' ('/'* BlockComment | // these characters are not part of special sequences in a block comment
2921
+ ~ [/*] | // handle / or * characters which are not part of /* or */ and do not appear at the end of the file
2922
+ ('/'+ ~ [/*] | '*'+ ~ [/*]))*
2923
+ // Handle the case of / or * characters at the end of the file, or a nested unterminated block comment
2924
+ ('/'+ | '*'+ | '/'* UnterminatedBlockComment)?
2925
+ // Optional assertion to make sure this rule is working as intended
2926
+
2927
+ {
2928
+ UnterminatedBlockCommentDebugAssert();
2929
+ }
2930
+ ;
2931
+ //
2932
+
2933
+ // META-COMMANDS
2934
+
2935
+ //
2936
+
2937
+ // http://www.postgresql.org/docs/9.3/static/app-psql.html
2938
+
2939
+ MetaCommand
2940
+ : '\\' (~ [\r\n\\"] | '"' ~ [\r\n"]* '"')* ('"' ~ [\r\n"]*)?
2941
+ ;
2942
+
2943
+ EndMetaCommand
2944
+ : '\\\\'
2945
+ ;
2946
+ //
2947
+
2948
+ // ERROR
2949
+
2950
+ //
2951
+
2952
+ // Any character which does not match one of the above rules will appear in the token stream as an ErrorCharacter token.
2953
+
2954
+ // This ensures the lexer itself will never encounter a syntax error, so all error handling may be performed by the
2955
+
2956
+ // parser.
2957
+
2958
+ ErrorCharacter
2959
+ : .
2960
+ ;
2961
+
2962
+ mode EscapeStringConstantMode;
2963
+ EscapeStringConstant
2964
+ : EscapeStringText '\'' -> mode (AfterEscapeStringConstantMode)
2965
+ ;
2966
+
2967
+ UnterminatedEscapeStringConstant
2968
+ : EscapeStringText
2969
+ // Handle a final unmatched \ character appearing at the end of the file
2970
+ '\\'? EOF
2971
+ ;
2972
+
2973
+ fragment EscapeStringText options { caseInsensitive=false; }
2974
+ : ('\'\'' | '\\' ( // two-digit hex escapes are still valid when treated as single-digit escapes
2975
+ 'x' [0-9a-fA-F] |
2976
+ 'u' [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] |
2977
+ 'U' [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] | // Any character other than the Unicode escapes can follow a backslash. Some have special meaning,
2978
+ // but that doesn't affect the syntax.
2979
+ ~ [xuU]) | ~ ['\\])*
2980
+ ;
2981
+
2982
+ InvalidEscapeStringConstant
2983
+ : InvalidEscapeStringText '\'' -> mode (AfterEscapeStringConstantMode)
2984
+ ;
2985
+
2986
+ InvalidUnterminatedEscapeStringConstant
2987
+ : InvalidEscapeStringText
2988
+ // Handle a final unmatched \ character appearing at the end of the file
2989
+ '\\'? EOF
2990
+ ;
2991
+
2992
+ fragment InvalidEscapeStringText
2993
+ : ('\'\'' | '\\' . | ~ ['\\])*
2994
+ ;
2995
+
2996
+ mode AfterEscapeStringConstantMode;
2997
+ AfterEscapeStringConstantMode_Whitespace
2998
+ : Whitespace -> type (Whitespace) , channel (HIDDEN)
2999
+ ;
3000
+
3001
+ AfterEscapeStringConstantMode_Newline
3002
+ : Newline -> type (Newline) , channel (HIDDEN) , mode (AfterEscapeStringConstantWithNewlineMode)
3003
+ ;
3004
+
3005
+ AfterEscapeStringConstantMode_NotContinued
3006
+ :
3007
+ {} // intentionally empty
3008
+ -> skip , popMode
3009
+ ;
3010
+
3011
+ mode AfterEscapeStringConstantWithNewlineMode;
3012
+ AfterEscapeStringConstantWithNewlineMode_Whitespace
3013
+ : Whitespace -> type (Whitespace) , channel (HIDDEN)
3014
+ ;
3015
+
3016
+ AfterEscapeStringConstantWithNewlineMode_Newline
3017
+ : Newline -> type (Newline) , channel (HIDDEN)
3018
+ ;
3019
+
3020
+ AfterEscapeStringConstantWithNewlineMode_Continued
3021
+ : '\'' -> more , mode (EscapeStringConstantMode)
3022
+ ;
3023
+
3024
+ AfterEscapeStringConstantWithNewlineMode_NotContinued
3025
+ :
3026
+ {} // intentionally empty
3027
+ -> skip , popMode
3028
+ ;
3029
+
3030
+ mode DollarQuotedStringMode;
3031
+ DollarText
3032
+ : ~ '$'+
3033
+ //| '$'([0-9])+
3034
+ | // this alternative improves the efficiency of handling $ characters within a dollar-quoted string which are
3035
+
3036
+ // not part of the ending tag.
3037
+ '$' ~ '$'*
3038
+ ;
3039
+
3040
+ EndDollarStringConstant
3041
+ : ('$' Tag? '$')
3042
+ {isTag()}?
3043
+ {popTag();} -> popMode
3044
+ ;