Re: [GENERAL] Allowing SYSDATE to Work - Mailing list pgsql-hackers

From Matt Miller
Subject Re: [GENERAL] Allowing SYSDATE to Work
Date
Msg-id 1163808329.14079.276325895@webmail.messagingengine.com
Whole thread Raw
Responses Re: [GENERAL] Allowing SYSDATE to Work  (Josh Berkus <josh@agliodbs.com>)
Re: [GENERAL] Allowing SYSDATE to Work  ("Andrew Dunstan" <andrew@dunslane.net>)
Re: [GENERAL] Allowing SYSDATE to Work  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: [GENERAL] Allowing SYSDATE to Work  (Euler Taveira de Oliveira <euler@timbira.com>)
List pgsql-hackers
Redirecting from -general.

> > I'd like SYSDATE to work syntactically and semantically the same as
> > CURRENT_TIMESTAMP
>
> current_time and the like are hardcoded in the grammar.  You'd have to
> do the same for sysdate.

Okay, I patched.  The patch follows.  Please comment.  In particular,
I've just copied the CURRENT_TIMESTAMP code block in gram.y.  Is this
the best approach?  I saw similar code copying between a couple of the
other time-related functions in gram.y.  Can't keywords share code
blocks in bison?

I found it interesting that gram.c and parse.h already supported SYSDATE.
I patched only gram.y and keywords.c

> I'd question the hassle of having to patch all the Postgres
> installations you're going to want to run your code on.

Yeah, and I don't expect that they'll be a rush to commit this to head
anytime soon.  I'll be happy enough tracking this locally.  I think it's
a win for my situation.

===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.568
diff -c -r2.568 gram.y
*** gram.y      5 Nov 2006 22:42:09 -0000       2.568
--- gram.y      17 Nov 2006 23:36:35 -0000
***************
*** 419,425 ****       SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE       SHOW SIMILAR SIMPLE SMALLINT SOME STABLE
STARTSTATEMENT       STATISTICS STDIN STDOUT STORAGE STRICT_P SUBSTRING SUPERUSER_P SYMMETRIC
 
!       SYSID SYSTEM_P
       TABLE TABLESPACE TEMP TEMPLATE TEMPORARY THEN TIME TIMESTAMP       TO TRAILING TRANSACTION TREAT TRIGGER TRIM
TRUE_P
--- 419,425 ----       SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE       SHOW SIMILAR SIMPLE SMALLINT SOME STABLE
STARTSTATEMENT       STATISTICS STDIN STDOUT STORAGE STRICT_P SUBSTRING SUPERUSER_P SYMMETRIC
 
!       SYSDATE SYSID SYSTEM_P
       TABLE TABLESPACE TEMP TEMPLATE TEMPORARY THEN TIME TIMESTAMP       TO TRAILING TRANSACTION TREAT TRIGGER TRIM
TRUE_P
***************
*** 7540,7545 ****
--- 7540,7559 ----                                       n->location = @1;                                       $$ =
(Node*)n;                               }
 
+                       | SYSDATE
+                               {
+                                       /*
+                                        * Translate as "now()", since we have a function that
+                                        * does exactly what is needed.
+                                        */
+                                       FuncCall *n = makeNode(FuncCall);
+                                       n->funcname = SystemFuncName("now");
+                                       n->args = NIL;
+                                       n->agg_star = FALSE;
+                                       n->agg_distinct = FALSE;
+                                       n->location = @1;
+                                       $$ = (Node *)n;
+                               }                       | CURRENT_TIMESTAMP '(' Iconst ')'
{                                       /*
 
***************
*** 8893,8898 ****
--- 8907,8913 ----                       | SESSION_USER                       | SOME                       | SYMMETRIC
+                       | SYSDATE                       | TABLE                       | THEN                       |
TO
Index: keywords.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/parser/keywords.c,v
retrieving revision 1.177
diff -c -r1.177 keywords.c
*** keywords.c  7 Oct 2006 21:51:02 -0000       1.177
--- keywords.c  17 Nov 2006 23:36:35 -0000
***************
*** 324,329 ****
--- 324,330 ----       {"substring", SUBSTRING},       {"superuser", SUPERUSER_P},       {"symmetric", SYMMETRIC},
+       {"sysdate", SYSDATE},       {"sysid", SYSID},       {"system", SYSTEM_P},       {"table", TABLE},


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Proposal: syntax of operation with tsearch's configuration
Next
From: Josh Berkus
Date:
Subject: Re: [GENERAL] Allowing SYSDATE to Work