Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbd97e4e

Browse files
author
Thomas G. Lockhart
committed
Implement explicit date/time precision per SQL99 spec.
Use CAST() mechanism to define CURRENT_TIME and CURRENT_TIMESTAMP.
1 parentc24e5dd commitbd97e4e

File tree

1 file changed

+45
-44
lines changed

1 file changed

+45
-44
lines changed

‎src/backend/parser/gram.y

Lines changed: 45 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
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;
42534253
if (($3 <0) || ($3 >13))
4254-
elog(ERROR,"TIMESTAMP %s precision%dmust 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
|TIMESTAMPopt_timezone_x
@@ -4276,8 +4276,8 @@ ConstDatetime: datetime
42764276
else
42774277
$$->name = xlateSqlType("time");
42784278
if (($3 <0) || ($3 >13))
4279-
elog(ERROR,"TIME %s precision%dmust 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
|TIMEopt_timezone
@@ -4911,7 +4911,7 @@ c_expr: attr
49114911
*/
49124912
A_Const *s = makeNode(A_Const);
49134913
TypeName *t = makeNode(TypeName);
4914-
FuncCall *n = makeNode(FuncCall);
4914+
TypeName *d = makeNode(TypeName);
49154915

49164916
s->val.type = T_String;
49174917
s->val.val.str ="now";
@@ -4921,12 +4921,12 @@ c_expr: attr
49214921
t->setof =FALSE;
49224922
t->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
*/
49374937
A_Const *s = makeNode(A_Const);
49384938
TypeName *t = makeNode(TypeName);
4939-
FuncCall *n = makeNode(FuncCall);
4939+
TypeName *d = makeNode(TypeName);
49404940

49414941
s->val.type = T_String;
49424942
s->val.val.str ="now";
@@ -4946,12 +4946,12 @@ c_expr: attr
49464946
t->setof =FALSE;
49474947
t->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
*/
49624962
A_Const *s = makeNode(A_Const);
49634963
TypeName *t = makeNode(TypeName);
4964-
FuncCall *n = makeNode(FuncCall);
4964+
TypeName *d = makeNode(TypeName);
49654965

49664966
s->val.type = T_String;
49674967
s->val.val.str ="now";
@@ -4971,26 +4971,25 @@ c_expr: attr
49714971
t->setof =FALSE;
49724972
t->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
*/
49914990
A_Const *s = makeNode(A_Const);
49924991
TypeName *t = makeNode(TypeName);
4993-
FuncCall *n = makeNode(FuncCall);
4992+
TypeName *d = makeNode(TypeName);
49944993

49954994
s->val.type = T_String;
49964995
s->val.val.str ="now";
@@ -5000,12 +4999,15 @@ c_expr: attr
50004999
t->setof =FALSE;
50015000
t->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
*/
50165018
A_Const *s = makeNode(A_Const);
50175019
TypeName *t = makeNode(TypeName);
5018-
FuncCall *n = makeNode(FuncCall);
5020+
TypeName *d = makeNode(TypeName);
50195021

50205022
s->val.type = T_String;
50215023
s->val.val.str ="now";
@@ -5025,16 +5027,15 @@ c_expr: attr
50255027
t->setof =FALSE;
50265028
t->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
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp