diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index ee43be4195068c7c5e0e483974ac3cddc8731016..5b50de1494b04a06c390ad0979899702bd00c4e8 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -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);