1111 *
1212 *
1313 * IDENTIFICATION
14- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.258 2001/10/03 20:54:21 tgl Exp $
14+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.259 2001/10/05 06:37:42 thomas Exp $
1515 *
1616 * HISTORY
1717 * AUTHORDATEMAJOR EVENT
@@ -4251,8 +4251,8 @@ ConstDatetime: datetime
42514251*/
42524252$$ ->timezone =$5 ;
42534253if (($3 <0 ) || ($3 >13 ))
4254- elog (ERROR," TIMESTAMP %s precision%d must be beween0 and %d" ,
4255- ($5 ?" WITH TIME ZONE" :" " ), 0, 13);
4254+ elog (ERROR," TIMESTAMP(%d) %s precision must be beween%d and %d" ,
4255+ $ 3 , ($5 ?" WITH TIME ZONE" :" " ), 0, 13);
42564256$$ ->typmod =$3 ;
42574257}
42584258| TIMESTAMP opt_timezone_x
@@ -4276,8 +4276,8 @@ ConstDatetime: datetime
42764276else
42774277$$ ->name = xlateSqlType(" time" );
42784278if (($3 <0 ) || ($3 >13 ))
4279- elog (ERROR," TIME %s precision%d must be beween0 and %d" ,
4280- ($5 ?" WITH TIME ZONE" :" " ), 0, 13);
4279+ elog (ERROR," TIME(%d) %s precision must be beween%d and %d" ,
4280+ $ 3 , ($5 ?" WITH TIME ZONE" :" " ), 0, 13);
42814281$$ ->typmod =$3 ;
42824282}
42834283| TIME opt_timezone
@@ -4911,7 +4911,7 @@ c_expr: attr
49114911*/
49124912A_Const *s = makeNode(A_Const);
49134913TypeName *t = makeNode(TypeName);
4914- FuncCall *n = makeNode(FuncCall );
4914+ TypeName *d = makeNode(TypeName );
49154915
49164916s->val.type = T_String;
49174917s->val.val.str =" now" ;
@@ -4921,12 +4921,12 @@ c_expr: attr
49214921t->setof =FALSE ;
49224922t->typmod = -1 ;
49234923
4924- n->funcname =xlateSqlType( " date " );
4925- n->args =makeList1(s );
4926- n->agg_star =FALSE ;
4927- n->agg_distinct =FALSE ;
4924+ d =makeNode(TypeName );
4925+ d->name =xlateSqlType( " date " );
4926+ d->setof =FALSE ;
4927+ d->typmod =- 1 ;
49284928
4929- $$ = (Node *)n ;
4929+ $$ = (Node *)makeTypeCast((Node *)s, d) ;
49304930}
49314931| CURRENT_TIME
49324932{
@@ -4936,7 +4936,7 @@ c_expr: attr
49364936*/
49374937A_Const *s = makeNode(A_Const);
49384938TypeName *t = makeNode(TypeName);
4939- FuncCall *n = makeNode(FuncCall );
4939+ TypeName *d = makeNode(TypeName );
49404940
49414941s->val.type = T_String;
49424942s->val.val.str =" now" ;
@@ -4946,12 +4946,12 @@ c_expr: attr
49464946t->setof =FALSE ;
49474947t->typmod = -1 ;
49484948
4949- n->funcname =xlateSqlType( " time " );
4950- n->args =makeList1(s );
4951- n->agg_star =FALSE ;
4952- n->agg_distinct =FALSE ;
4949+ d =makeNode(TypeName );
4950+ d->name =xlateSqlType( " time " );
4951+ d->setof =FALSE ;
4952+ d->typmod =0 ;
49534953
4954- $$ = (Node *)n ;
4954+ $$ = (Node *)makeTypeCast((Node *)s, d) ;
49554955}
49564956| CURRENT_TIME ' (' Iconst ' )'
49574957{
@@ -4961,7 +4961,7 @@ c_expr: attr
49614961*/
49624962A_Const *s = makeNode(A_Const);
49634963TypeName *t = makeNode(TypeName);
4964- FuncCall *n = makeNode(FuncCall );
4964+ TypeName *d = makeNode(TypeName );
49654965
49664966s->val.type = T_String;
49674967s->val.val.str =" now" ;
@@ -4971,26 +4971,25 @@ c_expr: attr
49714971t->setof =FALSE ;
49724972t->typmod = -1 ;
49734973
4974- n->funcname = xlateSqlType(" time" );
4975- n->args = makeList1(s);
4976- n->agg_star =FALSE ;
4977- n->agg_distinct =FALSE ;
4978-
4979- if ($3 !=0 )
4980- elog (NOTICE," CURRENT_TIME(%d) precision not implemented"
4981- " ; zero used instead" ,$3 );
4974+ d = makeNode(TypeName);
4975+ d->name = xlateSqlType(" timetz" );
4976+ d->setof =FALSE ;
4977+ if (($3 <0 ) || ($3 >13 ))
4978+ elog (ERROR," CURRENT_TIME(%d) precision must be between %d and %d" ,
4979+ $3 ,0 ,13 );
4980+ d->typmod =$3 ;
49824981
4983- $$ = (Node *)n ;
4982+ $$ = (Node *)makeTypeCast((Node *)s, d) ;
49844983}
49854984| CURRENT_TIMESTAMP
49864985{
49874986/*
4988- * Translate as "timestamp ('now'::text)".
4987+ * Translate as "timestamptz ('now'::text)".
49894988 * See comments for CURRENT_DATE.
49904989*/
49914990A_Const *s = makeNode(A_Const);
49924991TypeName *t = makeNode(TypeName);
4993- FuncCall *n = makeNode(FuncCall );
4992+ TypeName *d = makeNode(TypeName );
49944993
49954994s->val.type = T_String;
49964995s->val.val.str =" now" ;
@@ -5000,12 +4999,15 @@ c_expr: attr
50004999t->setof =FALSE ;
50015000t->typmod = -1 ;
50025001
5003- n->funcname = xlateSqlType(" timestamp" );
5004- n->args = makeList1(s);
5005- n->agg_star =FALSE ;
5006- n->agg_distinct =FALSE ;
5002+ /* SQL99 mandates a default precision of 6
5003+ * for timestamp. - thomas 2001-10-04
5004+ */
5005+ d = makeNode(TypeName);
5006+ d->name = xlateSqlType(" timestamptz" );
5007+ d->setof =FALSE ;
5008+ d->typmod =6 ;
50075009
5008- $$ = (Node *)n ;
5010+ $$ = (Node *)makeTypeCast((Node *)s, d) ;
50095011}
50105012| CURRENT_TIMESTAMP ' (' Iconst ' )'
50115013{
@@ -5015,7 +5017,7 @@ c_expr: attr
50155017*/
50165018A_Const *s = makeNode(A_Const);
50175019TypeName *t = makeNode(TypeName);
5018- FuncCall *n = makeNode(FuncCall );
5020+ TypeName *d = makeNode(TypeName );
50195021
50205022s->val.type = T_String;
50215023s->val.val.str =" now" ;
@@ -5025,16 +5027,15 @@ c_expr: attr
50255027t->setof =FALSE ;
50265028t->typmod = -1 ;
50275029
5028- n->funcname = xlateSqlType(" timestamp" );
5029- n->args = makeList1(s);
5030- n->agg_star =FALSE ;
5031- n->agg_distinct =FALSE ;
5032-
5033- if ($3 !=0 )
5034- elog (NOTICE," CURRENT_TIMESTAMP(%d) precision not implemented"
5035- " ; zero used instead" ,$3 );
5030+ d = makeNode(TypeName);
5031+ d->name = xlateSqlType(" timestamptz" );
5032+ d->setof =FALSE ;
5033+ if (($3 <0 ) || ($3 >13 ))
5034+ elog (ERROR," CURRENT_TIMESTAMP(%d) precision must be beween %d and %d" ,
5035+ $3 ,0 ,13 );
5036+ d->typmod =$3 ;
50365037
5037- $$ = (Node *)n ;
5038+ $$ = (Node *)makeTypeCast((Node *)s, d) ;
50385039}
50395040| CURRENT_USER
50405041{