@@ -43,10 +43,6 @@ ql_statement
43
43
;
44
44
45
45
select_statement
46
- : select_query
47
- ;
48
-
49
- select_query
50
46
: select_clause from_clause (where_clause)? (groupby_clause)? (having_clause)? (orderby_clause)? (set_fuction)?
51
47
;
52
48
@@ -57,11 +53,7 @@ setOperator
57
53
;
58
54
59
55
set_fuction
60
- : setOperator set_function_select
61
- ;
62
-
63
- set_function_select
64
- : select_query
56
+ : setOperator select_statement
65
57
;
66
58
67
59
update_statement
95
87
;
96
88
97
89
fetch_join
98
- : join_spec FETCH join_association_path_expression
90
+ : join_spec FETCH join_association_path_expression AS ? identification_variable? join_condition?
99
91
;
100
92
101
93
join_spec
@@ -315,7 +307,7 @@ scalar_expression
315
307
| datetime_expression
316
308
| boolean_expression
317
309
| case_expression
318
- | cast_expression
310
+ | cast_function
319
311
| entity_type_expression
320
312
;
321
313
@@ -441,6 +433,7 @@ arithmetic_primary
441
433
| functions_returning_numerics
442
434
| aggregate_expression
443
435
| case_expression
436
+ | cast_function
444
437
| function_invocation
445
438
| ' (' subquery ' )'
446
439
;
@@ -453,7 +446,6 @@ string_expression
453
446
| aggregate_expression
454
447
| case_expression
455
448
| function_invocation
456
- | string_expression op=' ||' string_expression
457
449
| ' (' subquery ' )'
458
450
| string_expression ' ||' string_expression
459
451
;
@@ -539,8 +531,8 @@ functions_returning_strings
539
531
| SUBSTRING ' (' string_expression ' ,' arithmetic_expression (' ,' arithmetic_expression)? ' )'
540
532
| TRIM ' (' ((trim_specification)? (trim_character)? FROM )? string_expression ' )'
541
533
| LOWER ' (' string_expression ' )'
542
- | REPLACE ' (' string_expression ' ,' string_expression ' ,' string_expression ' )'
543
534
| UPPER ' (' string_expression ' )'
535
+ | REPLACE ' (' string_expression ' ,' string_expression ' ,' string_expression ' )'
544
536
| LEFT ' (' string_expression ' ,' arithmetic_expression ' )'
545
537
| RIGHT ' (' string_expression ' ,' arithmetic_expression ' )'
546
538
;
@@ -551,6 +543,9 @@ trim_specification
551
543
| BOTH
552
544
;
553
545
546
+ cast_function
547
+ : CAST ' (' single_valued_path_expression (identification_variable)? identification_variable (' (' numeric_literal (' ,' numeric_literal)* ' )' )? ' )'
548
+ ;
554
549
555
550
function_invocation
556
551
: FUNCTION ' (' function_name (' ,' function_arg)* ' )'
@@ -615,9 +610,6 @@ nullif_expression
615
610
: NULLIF ' (' scalar_expression ' ,' scalar_expression ' )'
616
611
;
617
612
618
- cast_expression
619
- : CAST ' (' string_expression AS type_literal ' )'
620
- ;
621
613
622
614
/* ******************
623
615
Gaps in the spec.
@@ -631,6 +623,7 @@ trim_character
631
623
identification_variable
632
624
: IDENTIFICATION_VARIABLE
633
625
| f=(COUNT
626
+ | AS
634
627
| DATE
635
628
| FROM
636
629
| INNER
@@ -646,6 +639,7 @@ identification_variable
646
639
| TIME
647
640
| TYPE
648
641
| VALUE )
642
+ | type_literal
649
643
;
650
644
651
645
constructor_name
@@ -673,6 +667,9 @@ pattern_value
673
667
674
668
date_time_timestamp_literal
675
669
: STRINGLITERAL
670
+ | DATELITERAL
671
+ | TIMELITERAL
672
+ | TIMESTAMPLITERAL
676
673
;
677
674
678
675
entity_type_literal
@@ -965,9 +962,10 @@ ON : O N;
965
962
OR : O R ;
966
963
ORDER : O R D E R ;
967
964
OUTER : O U T E R ;
965
+ POWER : P O W E R ;
966
+ REGEXP : R E G E X P ;
968
967
REPLACE : R E P L A C E ;
969
968
RIGHT : R I G H T ;
970
- POWER : P O W E R ;
971
969
ROUND : R O U N D ;
972
970
SELECT : S E L E C T ;
973
971
SET : S E T ;
@@ -997,8 +995,11 @@ NOT_EQUAL : '<>' | '!=' ;
997
995
998
996
CHARACTER : ' \' ' (~ (' \' ' | ' \\ ' )) ' \' ' ;
999
997
IDENTIFICATION_VARIABLE : (' a' .. ' z' | ' A' .. ' Z' | ' \u0080 ' .. ' \ufffe ' | ' $' | ' _' ) (' a' .. ' z' | ' A' .. ' Z' | ' \u0080 ' .. ' \ufffe ' | ' 0' .. ' 9' | ' $' | ' _' )* ;
1000
- STRINGLITERAL : ' \' ' (~ (' \' ' | ' \\ ' ))* ' \' ' ;
998
+ STRINGLITERAL : ' \' ' (~ (' \' ' | ' \\ ' )| ' \\ ' )* ' \' ' ;
1001
999
JAVASTRINGLITERAL : ' "' ( (' \\ ' [btnfr" ']) | ~('" ' ))* ' " ';
1002
1000
FLOATLITERAL : ('0' .. '9')* '.' ('0' .. '9')+ (E ('0' .. '9')+)* (F|D)?;
1003
1001
INTLITERAL : ('0' .. '9')+ ;
1004
- LONGLITERAL : ('0' .. '9')+L ;
1002
+ LONGLITERAL : ('0' .. '9')+ L;
1003
+ DATELITERAL : '{' D STRINGLITERAL '}';
1004
+ TIMELITERAL : '{' T STRINGLITERAL '}';
1005
+ TIMESTAMPLITERAL : '{' T S STRINGLITERAL '}';
0 commit comments