@@ -192,8 +192,8 @@ make_name(void)
192
192
PARTIAL ,PATH_P ,POSITION ,PRECISION ,PRIMARY ,PRIOR ,PRIVILEGES ,PROCEDURE ,PUBLIC ,
193
193
READ ,REFERENCES ,RELATIVE ,REVOKE ,RIGHT ,ROLLBACK ,
194
194
SCHEMA ,SCROLL ,SECOND_P ,SELECT ,SESSION ,SESSION_USER ,SET ,SOME ,SUBSTRING ,
195
- TABLE ,TEMPORARY ,THEN ,TIME ,TIMESTAMP , TIMEZONE_HOUR ,
196
- TIMEZONE_MINUTE , TO ,TRAILING ,TRANSACTION ,TRIM ,TRUE_P ,
195
+ TABLE ,TEMPORARY ,THEN ,TIME ,TIMESTAMP
196
+ TO ,TRAILING ,TRANSACTION ,TRIM ,TRUE_P ,
197
197
UNENCRYPTED ,UNION ,UNIQUE ,UNKNOWN ,UPDATE ,USER ,USING ,
198
198
VALUES ,VARCHAR ,VARYING ,VIEW ,
199
199
WHEN ,WHERE ,WITH ,WITHOUT ,WORK ,YEAR_P ,ZONE
@@ -335,7 +335,7 @@ make_name(void)
335
335
%type <str> opt_level opt_lock lock_type OptGroupList OptGroupElem
336
336
%type <str> OptConstrFromTable OptTempTableName StringConst
337
337
%type <str> constraints_set_list constraints_set_namelist
338
- %type <str> constraints_set_mode comment_type
338
+ %type <str> constraints_set_mode comment_type opt_empty_parentheses
339
339
%type <str> CreateGroupStmt AlterGroupStmt DropGroupStmt key_delete
340
340
%type <str> opt_force key_update CreateSchemaStmt PosIntStringConst
341
341
%type <str> IntConst PosIntConst grantee_list func_type opt_or_replace
@@ -1693,7 +1693,7 @@ comment_text: StringConst{ $$ = $1; }
1693
1693
1694
1694
GrantStmt :GRANT privileges ON opt_table relation_name_list TO grantee_list opt_with_grant
1695
1695
{
1696
- $$ = cat_str(8 , make_str(" grant" ),$2 , make_str(" on" ),$4 ,$5 , make_str(" to" ),$7 );
1696
+ $$ = cat_str(7 , make_str(" grant" ),$2 , make_str(" on" ),$4 ,$5 , make_str(" to" ),$7 );
1697
1697
}
1698
1698
;
1699
1699
@@ -3064,19 +3064,19 @@ bit: BIT opt_varying
3064
3064
* The following implements CHAR() and VARCHAR().
3065
3065
*- ay 6/95
3066
3066
*/
3067
- Character :character ' (' PosIntConst ' )'
3067
+ Character :character ' (' PosIntConst ' )' opt_charset
3068
3068
{
3069
- $$ = cat_str(4 ,$1 , make_str(" (" ),$3 , make_str(" )" ));
3069
+ $$ = cat_str(5 ,$1 , make_str(" (" ),$3 , make_str(" )" ), $5 );
3070
3070
}
3071
- | character
3071
+ | character opt_charset
3072
3072
{
3073
- $$ =$1 ;
3073
+ $$ =cat2_str( $1 , $2 ) ;
3074
3074
}
3075
3075
;
3076
3076
3077
- character :CHARACTER opt_varying opt_charset
3077
+ character :CHARACTER opt_varying
3078
3078
{
3079
- $$ =cat_str( 3 , make_str(" character" ),$2 , $3 );
3079
+ $$ =cat2_str( make_str(" character" ),$2 );
3080
3080
}
3081
3081
| CHAR opt_varying {$$ = cat2_str(make_str(" char" ),$2 ); }
3082
3082
| VARCHAR {$$ = make_str(" varchar" ); }
@@ -3101,10 +3101,18 @@ ConstDatetime: datetime
3101
3101
{
3102
3102
$$ =$1 ;
3103
3103
}
3104
+ | TIMESTAMP ' (' PosIntConst ' )' opt_timezone
3105
+ {
3106
+ $$ = cat_str(4 , make_str(" timestamp(" ),$3 , make_str(" )" ),$5 );
3107
+ }
3104
3108
| TIMESTAMP opt_timezone
3105
3109
{
3106
3110
$$ = cat2_str(make_str(" timestamp" ),$2 );
3107
3111
}
3112
+ | TIME ' (' PosIntConst ' )' opt_timezone
3113
+ {
3114
+ $$ = cat_str(4 , make_str(" time(" ),$3 , make_str(" )" ),$5 );
3115
+ }
3108
3116
| TIME opt_timezone
3109
3117
{
3110
3118
$$ = cat2_str(make_str(" time" ),$2 );
@@ -3439,36 +3447,24 @@ c_expr: attr
3439
3447
{$$ = cat2_str($1 , make_str(" (*)" )); }
3440
3448
| CURRENT_DATE
3441
3449
{$$ = make_str(" current_date" ); }
3442
- | CURRENT_TIME
3443
- {$$ = make_str(" current_time" ); }
3450
+ | CURRENT_TIME opt_empty_parentheses
3451
+ {$$ =cat2_str( make_str(" current_time" ), $2 ); }
3444
3452
| CURRENT_TIME ' (' PosIntConst ' )'
3445
3453
{
3446
- if (atol($3 ) !=0 )
3447
- {
3448
- sprintf (errortext," CURRENT_TIME(%s) precision not implemented; backend will use zero instead" , $3 );
3449
- mmerror (ET_NOTICE, errortext);
3450
- }
3451
-
3452
3454
$$ = make_str(" current_time" );
3453
3455
}
3454
- | CURRENT_TIMESTAMP
3455
- {$$ = make_str(" current_timestamp" ); }
3456
+ | CURRENT_TIMESTAMP opt_empty_parentheses
3457
+ {$$ =cat2_str( make_str(" current_timestamp" ), $2 ); }
3456
3458
| CURRENT_TIMESTAMP ' (' PosIntConst ' )'
3457
3459
{
3458
- if (atol($3 ) !=0 )
3459
- {
3460
- sprintf (errortext," CURRENT_TIMESTAMP(%s) precision not implemented; backend will use zero instead" , $3 );
3461
- mmerror (ET_NOTICE, errortext);
3462
- }
3463
-
3464
3460
$$ = make_str(" current_timestamp" );
3465
3461
}
3466
- | CURRENT_USER
3467
- {$$ = make_str(" current_user" ); }
3468
- | SESSION_USER
3469
- {$$ = make_str(" session_user" ); }
3470
- | USER
3471
- {$$ = make_str(" user" ); }
3462
+ | CURRENT_USER opt_empty_parentheses
3463
+ {$$ =cat2_str( make_str(" current_user" ), $2 ); }
3464
+ | SESSION_USER opt_empty_parentheses
3465
+ {$$ =cat2_str( make_str(" session_user" ), $2 ); }
3466
+ | USER opt_empty_parentheses
3467
+ {$$ =cat2_str( make_str(" user" ), $2 ); }
3472
3468
| EXTRACT ' (' extract_list ' )'
3473
3469
{$$ = cat_str(3 , make_str(" extract(" ),$3 , make_str(" )" )); }
3474
3470
| POSITION ' (' position_list ' )'
@@ -3528,8 +3524,6 @@ extract_list: extract_arg FROM a_expr
3528
3524
extract_arg :datetime {$$ =$1 ; }
3529
3525
| SCONST {$$ =$1 ; }
3530
3526
| IDENT {$$ =$1 ; }
3531
- | TIMEZONE_HOUR {$$ = make_str(" timezone_hour" ); }
3532
- | TIMEZONE_MINUTE {$$ = make_str(" timezone_minute" ); }
3533
3527
;
3534
3528
3535
3529
/* position_list uses b_expr not a_expr to avoid conflict with general IN*/
@@ -3663,6 +3657,8 @@ attrs: attr_name
3663
3657
{$$ = make2_str($1 , make_str(" .*" )); }
3664
3658
;
3665
3659
3660
+ opt_empty_parentheses :' (' ' )' {$$ = make_str(" ()" ); }
3661
+ | /* EMPTY*/ {$$ = EMPTY; }
3666
3662
3667
3663
/* ****************************************************************************
3668
3664
*
@@ -5063,8 +5059,6 @@ TokenId: ABSOLUTE{ $$ = make_str("absolute"); }
5063
5059
| TEMP {$$ = make_str(" temp" ); }
5064
5060
| TEMPLATE {$$ = make_str(" template" ); }
5065
5061
| TEMPORARY {$$ = make_str(" temporary" ); }
5066
- | TIMEZONE_HOUR {$$ = make_str(" timezone_hour" ); }
5067
- | TIMEZONE_MINUTE {$$ = make_str(" timezone_minute" ); }
5068
5062
| TOAST {$$ = make_str(" toast" ); }
5069
5063
| TRIGGER {$$ = make_str(" trigger" ); }
5070
5064
| TRUNCATE {$$ = make_str(" truncate" ); }
@@ -5092,8 +5086,6 @@ ECPGColId: ident{ $$ = $1; }
5092
5086
| NATIONAL {$$ = make_str(" national" ); }
5093
5087
| NONE {$$ = make_str(" none" ); }
5094
5088
| PATH_P {$$ = make_str(" path_p" ); }
5095
- | TIME {$$ = make_str(" time" ); }
5096
- | TIMESTAMP {$$ = make_str(" timestamp" ); }
5097
5089
| ECPGKeywords {$$ =$1 ; }
5098
5090
;
5099
5091
@@ -5195,6 +5187,8 @@ ECPGColLabel: ECPGColId{ $$ = $1; }
5195
5187
| SUBSTRING {$$ = make_str(" substring" ); }
5196
5188
| TABLE {$$ = make_str(" table" ); }
5197
5189
| THEN {$$ = make_str(" then" ); }
5190
+ | TIME {$$ = make_str(" time" ); }
5191
+ | TIMESTAMP {$$ = make_str(" timestamp" ); }
5198
5192
| TO {$$ = make_str(" to" ); }
5199
5193
| TRANSACTION {$$ = make_str(" transaction" ); }
5200
5194
| TRIM {$$ = make_str(" trim" ); }