Clean up some code that had gotten a bit ugly through repeated revisions.

This commit is contained in:
Tom Lane 2004-04-02 21:05:32 +00:00
parent 27a4f06ade
commit b066d9e4bc
1 changed files with 10 additions and 13 deletions

View File

@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/backend/parser/analyze.c,v 1.297 2004/01/23 02:13:12 neilc Exp $
* $PostgreSQL: pgsql/src/backend/parser/analyze.c,v 1.298 2004/04/02 21:05:32 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -506,7 +506,8 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt,
List *sub_namespace;
List *icolumns;
List *attrnos;
List *attnos;
List *icols; /* to become ListCell */
List *attnos; /* to become ListCell */
List *tl;
qry->commandType = CMD_INSERT;
@ -665,39 +666,35 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt,
/*
* Prepare columns for assignment to target table.
*/
icols = icolumns;
attnos = attrnos;
/* cannot use foreach here because of possible lremove */
tl = qry->targetList;
while (tl)
foreach(tl, qry->targetList)
{
TargetEntry *tle = (TargetEntry *) lfirst(tl);
ResTarget *col;
/* must advance tl before lremove possibly pfree's it */
tl = lnext(tl);
if (icolumns == NIL || attnos == NIL)
if (icols == NIL || attnos == NIL)
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
errmsg("INSERT has more expressions than target columns")));
col = (ResTarget *) lfirst(icolumns);
col = (ResTarget *) lfirst(icols);
Assert(IsA(col, ResTarget));
Assert(!tle->resdom->resjunk);
updateTargetListEntry(pstate, tle, col->name, lfirsti(attnos),
col->indirection);
icolumns = lnext(icolumns);
icols = lnext(icols);
attnos = lnext(attnos);
}
/*
* Ensure that the targetlist has the same number of entries that were
* present in the columns list. Don't do the check unless an explicit
* columns list was given, though. statements.
* columns list was given, though.
*/
if (stmt->cols != NIL && (icolumns != NIL || attnos != NIL))
if (stmt->cols != NIL && (icols != NIL || attnos != NIL))
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
errmsg("INSERT has more target columns than expressions")));