@@ -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
@@ -446,6 +438,7 @@ arithmetic_primary
446
438
| functions_returning_numerics
447
439
| aggregate_expression
448
440
| case_expression
441
+ | cast_function
449
442
| function_invocation
450
443
| ' (' subquery ' )'
451
444
;
@@ -458,7 +451,6 @@ string_expression
458
451
| aggregate_expression
459
452
| case_expression
460
453
| function_invocation
461
- | string_expression op=' ||' string_expression
462
454
| ' (' subquery ' )'
463
455
| string_expression ' ||' string_expression
464
456
;
@@ -544,8 +536,8 @@ functions_returning_strings
544
536
| SUBSTRING ' (' string_expression ' ,' arithmetic_expression (' ,' arithmetic_expression)? ' )'
545
537
| TRIM ' (' ((trim_specification)? (trim_character)? FROM )? string_expression ' )'
546
538
| LOWER ' (' string_expression ' )'
547
- | REPLACE ' (' string_expression ' ,' string_expression ' ,' string_expression ' )'
548
539
| UPPER ' (' string_expression ' )'
540
+ | REPLACE ' (' string_expression ' ,' string_expression ' ,' string_expression ' )'
549
541
| LEFT ' (' string_expression ' ,' arithmetic_expression ' )'
550
542
| RIGHT ' (' string_expression ' ,' arithmetic_expression ' )'
551
543
;
@@ -556,6 +548,9 @@ trim_specification
556
548
| BOTH
557
549
;
558
550
551
+ cast_function
552
+ : CAST ' (' single_valued_path_expression (identification_variable)? identification_variable (' (' numeric_literal (' ,' numeric_literal)* ' )' )? ' )'
553
+ ;
559
554
560
555
function_invocation
561
556
: FUNCTION ' (' function_name (' ,' function_arg)* ' )'
@@ -620,9 +615,6 @@ nullif_expression
620
615
: NULLIF ' (' scalar_expression ' ,' scalar_expression ' )'
621
616
;
622
617
623
- cast_expression
624
- : CAST ' (' string_expression AS type_literal ' )'
625
- ;
626
618
627
619
/* ******************
628
620
Gaps in the spec.
@@ -636,6 +628,7 @@ trim_character
636
628
identification_variable
637
629
: IDENTIFICATION_VARIABLE
638
630
| f=(COUNT
631
+ | AS
639
632
| DATE
640
633
| FROM
641
634
| INNER
@@ -651,6 +644,7 @@ identification_variable
651
644
| TIME
652
645
| TYPE
653
646
| VALUE )
647
+ | type_literal
654
648
;
655
649
656
650
constructor_name
@@ -678,6 +672,9 @@ pattern_value
678
672
679
673
date_time_timestamp_literal
680
674
: STRINGLITERAL
675
+ | DATELITERAL
676
+ | TIMELITERAL
677
+ | TIMESTAMPLITERAL
681
678
;
682
679
683
680
entity_type_literal
@@ -974,9 +971,10 @@ ON : O N;
974
971
OR : O R ;
975
972
ORDER : O R D E R ;
976
973
OUTER : O U T E R ;
974
+ POWER : P O W E R ;
975
+ REGEXP : R E G E X P ;
977
976
REPLACE : R E P L A C E ;
978
977
RIGHT : R I G H T ;
979
- POWER : P O W E R ;
980
978
ROUND : R O U N D ;
981
979
SELECT : S E L E C T ;
982
980
SET : S E T ;
@@ -1006,8 +1004,11 @@ NOT_EQUAL : '<>' | '!=' ;
1006
1004
1007
1005
CHARACTER : ' \' ' (~ (' \' ' | ' \\ ' )) ' \' ' ;
1008
1006
IDENTIFICATION_VARIABLE : (' a' .. ' z' | ' A' .. ' Z' | ' \u0080 ' .. ' \ufffe ' | ' $' | ' _' ) (' a' .. ' z' | ' A' .. ' Z' | ' \u0080 ' .. ' \ufffe ' | ' 0' .. ' 9' | ' $' | ' _' )* ;
1009
- STRINGLITERAL : ' \' ' (~ (' \' ' | ' \\ ' ))* ' \' ' ;
1007
+ STRINGLITERAL : ' \' ' (~ (' \' ' | ' \\ ' )| ' \\ ' )* ' \' ' ;
1010
1008
JAVASTRINGLITERAL : ' "' ( (' \\ ' [btnfr" ']) | ~('" ' ))* ' " ';
1011
1009
FLOATLITERAL : ('0' .. '9')* '.' ('0' .. '9')+ (E ('0' .. '9')+)* (F|D)?;
1012
1010
INTLITERAL : ('0' .. '9')+ ;
1013
- LONGLITERAL : ('0' .. '9')+L ;
1011
+ LONGLITERAL : ('0' .. '9')+ L;
1012
+ DATELITERAL : '{' D STRINGLITERAL '}';
1013
+ TIMELITERAL : '{' T STRINGLITERAL '}';
1014
+ TIMESTAMPLITERAL : '{' T S STRINGLITERAL '}';
0 commit comments