Commit 64a60590 authored by Neil Conway's avatar Neil Conway

A few minor list-related cleanups:

(1) Replace while loop with the new forboth() construct in
parser/analyze.c

(2) Replace lcons() with lappend() in SearchCatCacheList(). Since these
now have the same performance, there is no reason to prefer lcons() in
this case, and using lappend() leads to cleaner code.

(3) Improve the name of the second parameter to for_each_cell()
parent 0ed07d49
......@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/backend/parser/analyze.c,v 1.311 2004/08/29 05:06:44 momjian Exp $
* $PostgreSQL: pgsql/src/backend/parser/analyze.c,v 1.312 2004/09/27 04:12:02 neilc Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -2273,25 +2273,21 @@ getSetColTypes(ParseState *pstate, Node *node)
static void
applyColumnNames(List *dst, List *src)
{
ListCell *dst_item = list_head(dst);
ListCell *src_item = list_head(src);
ListCell *dst_item;
ListCell *src_item;
if (list_length(src) > list_length(dst))
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
errmsg("CREATE TABLE AS specifies too many column names")));
while (src_item != NULL && dst_item != NULL)
forboth(dst_item, dst, src_item, src)
{
TargetEntry *d = (TargetEntry *) lfirst(dst_item);
ColumnDef *s = (ColumnDef *) lfirst(src_item);
Assert(d->resdom && !d->resdom->resjunk);
d->resdom->resname = pstrdup(s->colname);
dst_item = lnext(dst_item);
src_item = lnext(src_item);
}
}
......
......@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/cache/catcache.c,v 1.116 2004/08/29 05:06:50 momjian Exp $
* $PostgreSQL: pgsql/src/backend/utils/cache/catcache.c,v 1.117 2004/09/27 04:12:02 neilc Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -1501,7 +1501,7 @@ SearchCatCacheList(CatCache *cache,
* worth fixing.
*/
ct->refcount++;
ctlist = lcons(ct, ctlist);
ctlist = lappend(ctlist, ct);
nmembers++;
}
......@@ -1522,16 +1522,17 @@ SearchCatCacheList(CatCache *cache,
cl->cl_magic = CL_MAGIC;
cl->my_cache = cache;
DLInitElem(&cl->cache_elem, (void *) cl);
DLInitElem(&cl->cache_elem, cl);
cl->refcount = 0; /* for the moment */
cl->dead = false;
cl->ordered = ordered;
cl->nkeys = nkeys;
cl->hash_value = lHashValue;
cl->n_members = nmembers;
/* The list is backwards because we built it with lcons */
Assert(nmembers == list_length(ctlist));
ctlist_item = list_head(ctlist);
for (i = nmembers; --i >= 0;)
for (i = 0; i < nmembers; i++)
{
cl->members[i] = ct = (CatCTup *) lfirst(ctlist_item);
Assert(ct->c_list == NULL);
......
......@@ -30,7 +30,7 @@
* Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/include/nodes/pg_list.h,v 1.49 2004/08/29 05:06:57 momjian Exp $
* $PostgreSQL: pgsql/src/include/nodes/pg_list.h,v 1.50 2004/09/27 04:12:03 neilc Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -167,8 +167,8 @@ extern int list_length(List *l);
* a convenience macro which loops through a list starting from a
* specified cell
*/
#define for_each_cell(cell, l) \
for ((cell) = (l); (cell) != NULL; (cell) = lnext(cell))
#define for_each_cell(cell, initcell) \
for ((cell) = (initcell); (cell) != NULL; (cell) = lnext(cell))
/*
* forboth -
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment