@@ -833,7 +833,21 @@ opt_boolean: TRUE_P { $$ = make_str("true"); }
833
833
| OFF { $$ = make_str(" off" ); }
834
834
;
835
835
836
- zone_value : StringConst { $$ = $1 ; }
836
+ /* Timezone values can be:
837
+ * - a string such as 'pst8pdt'
838
+ * - an integer or floating point number
839
+ * - a time interval per SQL99
840
+ */
841
+ zone_value : StringConst { $$ = $1 ; }
842
+ | ConstInterval StringConst opt_interval
843
+ {
844
+ $$ = cat_str(3 , $1 , $2 , $3 );
845
+ }
846
+ | ConstInterval ' (' PosIntConst ' )' StringConst opt_interval
847
+ {
848
+ $$ = cat_str(6 , $1 , make_str(" (" ), $3 , make_str(" )" ), $5 , $6 );
849
+ }
850
+ | NumConst { $$ = $1 ; }
837
851
| DEFAULT { $$ = make_str(" default" ); }
838
852
| LOCAL { $$ = make_str(" local" ); }
839
853
;
@@ -844,7 +858,7 @@ opt_encoding: StringConst { $$ = $1; }
844
858
;
845
859
846
860
ColId_or_Sconst : ColId { $$ = $1 ; }
847
- | SCONST { $$ = $1 ; }
861
+ | StringConst { $$ = $1 ; }
848
862
;
849
863
850
864
VariableShowStmt : SHOW ColId
@@ -2950,8 +2964,9 @@ Iresult: PosIntConst { $$ = atol($1); }
2950
2964
| Iresult ' %' Iresult { $$ = $1 % $3 ; }
2951
2965
;
2952
2966
2953
- SimpleTypename : ConstTypename { $$ = $1 ; }
2954
- | ConstInterval { $$ = $1 ; }
2967
+ SimpleTypename : ConstTypename { $$ = $1 ; }
2968
+ | ConstInterval opt_interval { $$ = cat2_str($1 , $2 ); }
2969
+ | ConstInterval ' (' PosIntConst ' )' opt_interval { $$ = cat_str(5 , $1 , make_str(" (" ), $3 , make_str(" )" ), $5 ); }
2955
2970
;
2956
2971
2957
2972
ConstTypename : Generic { $$ = $1 ; }
@@ -3120,9 +3135,9 @@ ConstDatetime: datetime
3120
3135
}
3121
3136
;
3122
3137
3123
- ConstInterval : INTERVAL opt_interval
3138
+ ConstInterval : INTERVAL
3124
3139
{
3125
- $$ = cat2_str( make_str(" interval" ), $2 );
3140
+ $$ = make_str(" interval" );
3126
3141
}
3127
3142
;
3128
3143
@@ -3139,15 +3154,20 @@ opt_timezone: WITH TIME ZONE { $$ = make_str("with time zone"); }
3139
3154
| /* EMPTY*/ { $$ = EMPTY; }
3140
3155
;
3141
3156
3142
- opt_interval : datetime { $$ = $1 ; }
3143
- | YEAR_P TO MONTH_P { $$ = make_str(" year to #month" ); }
3144
- | DAY_P TO HOUR_P { $$ = make_str(" day to hour" ); }
3145
- | DAY_P TO MINUTE_P { $$ = make_str(" day to minute" ); }
3146
- | DAY_P TO SECOND_P { $$ = make_str(" day to second" ); }
3147
- | HOUR_P TO MINUTE_P { $$ = make_str(" hour to minute" ); }
3148
- | MINUTE_P TO SECOND_P { $$ = make_str(" minute to second" ); }
3149
- | HOUR_P TO SECOND_P { $$ = make_str(" hour to second" ); }
3150
- | /* EMPTY*/ { $$ = EMPTY; }
3157
+ opt_interval : YEAR_P { $$ = make_str(" year" ); }
3158
+ | MONTH_P { $$ = make_str(" month" ); }
3159
+ | DAY_P { $$ = make_str(" day" ); }
3160
+ | HOUR_P { $$ = make_str(" hour" ); }
3161
+ | MINUTE_P { $$ = make_str(" minute" ); }
3162
+ | SECOND_P { $$ = make_str(" second" ); }
3163
+ | YEAR_P TO MONTH_P { $$ = make_str(" year to month" ); }
3164
+ | DAY_P TO HOUR_P { $$ = make_str(" day to hour" ); }
3165
+ | DAY_P TO MINUTE_P { $$ = make_str(" day to minute" ); }
3166
+ | DAY_P TO SECOND_P { $$ = make_str(" day to second" ); }
3167
+ | HOUR_P TO MINUTE_P { $$ = make_str(" hour to minute" ); }
3168
+ | MINUTE_P TO SECOND_P { $$ = make_str(" minute to second" ); }
3169
+ | HOUR_P TO SECOND_P { $$ = make_str(" hour to second" ); }
3170
+ | /* EMPTY*/ { $$ = EMPTY; }
3151
3171
;
3152
3172
3153
3173
@@ -3523,7 +3543,7 @@ extract_list: extract_arg FROM a_expr
3523
3543
*/
3524
3544
3525
3545
extract_arg : datetime { $$ = $1 ; }
3526
- | SCONST { $$ = $1 ; }
3546
+ | StringConst { $$ = $1 ; }
3527
3547
| IDENT { $$ = $1 ; }
3528
3548
;
3529
3549
@@ -3761,6 +3781,10 @@ AexprConst: PosAllConst
3761
3781
{
3762
3782
$$ = cat_str(3 , $1 , $2 , $3 );
3763
3783
}
3784
+ | ConstInterval ' (' PosIntConst ' )' StringConst opt_interval
3785
+ {
3786
+ $$ = cat_str(6 , $1 , make_str(" (" ), $3 , make_str(" )" ), $5 , $6 );
3787
+ }
3764
3788
| ParamNo
3765
3789
{ $$ = $1 ; }
3766
3790
| TRUE_P
@@ -5081,7 +5105,6 @@ ECPGColId: ident { $$ = $1; }
5081
5105
| TYPE_P { $$ = make_str(" type" ); }
5082
5106
| datetime { $$ = $1 ; }
5083
5107
| TokenId { $$ = $1 ; }
5084
- | INTERVAL { $$ = make_str(" interval" ); }
5085
5108
| NATIONAL { $$ = make_str(" national" ); }
5086
5109
| NONE { $$ = make_str(" none" ); }
5087
5110
| PATH_P { $$ = make_str(" path_p" ); }
@@ -5140,11 +5163,13 @@ ECPGColLabel: ECPGColId { $$ = $1; }
5140
5163
| GROUP { $$ = make_str(" group" ); }
5141
5164
| HAVING { $$ = make_str(" having" ); }
5142
5165
| ILIKE { $$ = make_str(" ilike" ); }
5166
+ | IN { $$ = make_str(" in" ); }
5143
5167
| INITIALLY { $$ = make_str(" initially" ); }
5144
5168
| INNER_P { $$ = make_str(" inner" ); }
5169
+ | INOUT { $$ = make_str(" inout" ); }
5145
5170
| INTERSECT { $$ = make_str(" intersect" ); }
5171
+ | INTERVAL { $$ = make_str(" interval" ); }
5146
5172
| INTO { $$ = make_str(" into" ); }
5147
- | INOUT { $$ = make_str(" inout" ); }
5148
5173
| JOIN { $$ = make_str(" join" ); }
5149
5174
| LEADING { $$ = make_str(" leading" ); }
5150
5175
| LEFT { $$ = make_str(" left" ); }
0 commit comments