>Turning nextval and currval into keywords is not an acceptable way to

>go about this.  That will risk breaking existing applications that use
>those names as column names.
>
>It should actually almost work to write sq.nextval as things stand,
>because Postgres has for a long time considered table.function and
>function(table) to be interchangeable notations for certain kinds of
>functions.  nextval doesn't seem to be one of that kind of function,
>at the moment.  I'd suggest leaving the grammar as it was, and taking a
>look at ParseFuncOrColumn in parse_func.c to see if you can't persuade
>it to accept the sequence functions in that style.

OK, good point. I tried to implement it somewhere else and ended up
extending transformAttr. Attached you'll find the patch.

Jeroen van Vianen
This commit is contained in:
Bruce Momjian 1999-12-16 20:07:41 +00:00
parent 99b8f84511
commit cf374febf5
1 changed files with 25 additions and 1 deletions

View File

@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.60 1999/12/10 07:37:35 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.61 1999/12/16 20:07:41 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@ -531,6 +531,30 @@ static Node *
transformAttr(ParseState *pstate, Attr *att, int precedence)
{
Node *basenode;
char * attribute;
/* Get the name of the first attribute */
if ((att != NULL) && (lfirst(att->attrs) != NULL))
{
/*
* Special case for name.nextval and name.currval, assume it's a
* sequence and transform to function call to nextval('name') and
* currval('name')
*/
attribute = pstrdup(((Value *) lfirst(att->attrs))->val.str);
if ((strcasecmp(attribute, "nextval") == 0) ||
(strcasecmp(attribute, "currval") == 0))
{
Value *s = makeNode(Value);
s->type = T_String;
s->val.str = att->relname;
return ParseFuncOrColumn(pstate, attribute,
lcons(make_const(s), NIL), false, false,
&pstate->p_last_resno, precedence);
}
}
basenode = ParseNestedFuncOrColumn(pstate, att, &pstate->p_last_resno,
precedence);