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 START STATEMENT 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 START STATEMENT 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}, ---------------------------(end of broadcast)--------------------------- TIP 9: In versions below 8.0, the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match