where applicable.
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/optimizer/path/joinrels.c,v 1.74 2005/06/09 04:18:59 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/optimizer/path/joinrels.c,v 1.75 2005/07/28 22:27:00 tgl Exp $
*
*-------------------------------------------------------------------------
*/
{
List *result_rels = NIL;
List *new_rels;
- ListCell *nr;
ListCell *r;
int k;
* for subsequent passes, do not enter the same RelOptInfo into
* our output list multiple times.
*/
- foreach(nr, new_rels)
- {
- RelOptInfo *jrel = (RelOptInfo *) lfirst(nr);
-
- if (!list_member_ptr(result_rels, jrel))
- result_rels = lcons(jrel, result_rels);
- }
+ result_rels = list_concat_unique_ptr(result_rels, new_rels);
}
/*
jrel = make_join_rel(root, old_rel, new_rel,
JOIN_INNER);
/* Avoid making duplicate entries ... */
- if (jrel && !list_member_ptr(result_rels, jrel))
- result_rels = lcons(jrel, result_rels);
+ if (jrel)
+ result_rels = list_append_unique_ptr(result_rels,
+ jrel);
}
}
}
old_rel,
other_rels);
- foreach(nr, new_rels)
- {
- RelOptInfo *jrel = (RelOptInfo *) lfirst(nr);
-
- if (!list_member_ptr(result_rels, jrel))
- result_rels = lcons(jrel, result_rels);
- }
+ result_rels = list_concat_unique_ptr(result_rels, new_rels);
}
/*----------
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/optimizer/path/pathkeys.c,v 1.70 2005/07/03 18:26:32 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/optimizer/path/pathkeys.c,v 1.71 2005/07/28 22:27:00 tgl Exp $
*
*-------------------------------------------------------------------------
*/
newset = list_make2(item1, item2);
/* Found a set to merge into our new set */
- newset = list_union(newset, curset);
+ newset = list_concat_unique(newset, curset);
/*
* Remove old set from equi_key_list.
* canonicalized the keys, so that equivalent-key knowledge is
* used when deciding if an item is redundant.
*/
- if (!list_member_ptr(new_pathkeys, cpathkey))
- new_pathkeys = lappend(new_pathkeys, cpathkey);
+ new_pathkeys = list_append_unique_ptr(new_pathkeys, cpathkey);
}
return new_pathkeys;
}
* Eliminate redundant ordering info; could happen if query is
* such that index keys are equijoined...
*/
- if (!list_member_ptr(retval, cpathkey))
- retval = lappend(retval, cpathkey);
+ retval = list_append_unique_ptr(retval, cpathkey);
indexkeys++;
ordering++;
* pathkey, a simple ptrMember test is sufficient to detect
* redundant keys.
*/
- if (!list_member_ptr(pathkeys, pathkey))
- pathkeys = lappend(pathkeys, pathkey);
+ pathkeys = list_append_unique_ptr(pathkeys, pathkey);
}
return pathkeys;
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepunion.c,v 1.124 2005/06/10 02:21:05 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepunion.c,v 1.125 2005/07/28 22:27:00 tgl Exp $
*
*-------------------------------------------------------------------------
*/
List *
find_all_inheritors(Oid parentrel)
{
- List *examined_relids = NIL;
- List *unexamined_relids = list_make1_oid(parentrel);
+ List *rels_list;
+ ListCell *l;
- /*
- * While the queue of unexamined relids is nonempty, remove the first
- * element, mark it examined, and find its direct descendants. NB:
- * cannot use foreach(), since we modify the queue inside loop.
+ /*
+ * We build a list starting with the given rel and adding all direct and
+ * indirect children. We can use a single list as both the record of
+ * already-found rels and the agenda of rels yet to be scanned for more
+ * children. This is a bit tricky but works because the foreach() macro
+ * doesn't fetch the next list element until the bottom of the loop.
*/
- while (unexamined_relids != NIL)
+ rels_list = list_make1_oid(parentrel);
+
+ foreach(l, rels_list)
{
- Oid currentrel = linitial_oid(unexamined_relids);
+ Oid currentrel = lfirst_oid(l);
List *currentchildren;
- unexamined_relids = list_delete_first(unexamined_relids);
- examined_relids = lappend_oid(examined_relids, currentrel);
+ /* Get the direct children of this rel */
currentchildren = find_inheritance_children(currentrel);
/*
* into an infinite loop, though theoretically there can't be any
* cycles in the inheritance graph anyway.)
*/
- currentchildren = list_difference_oid(currentchildren, examined_relids);
- unexamined_relids = list_union_oid(unexamined_relids, currentchildren);
+ rels_list = list_concat_unique_oid(rels_list, currentchildren);
}
- return examined_relids;
+ return rels_list;
}
/*
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/optimizer/util/relnode.c,v 1.70 2005/06/09 04:19:00 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/optimizer/util/relnode.c,v 1.71 2005/07/28 22:27:00 tgl Exp $
*
*-------------------------------------------------------------------------
*/
* in, no great harm is done --- they'll be detected by
* redundant-clause testing when they reach a restriction list.)
*/
- if (!list_member_ptr(joinrel->joininfo, rinfo))
- joinrel->joininfo = lappend(joinrel->joininfo, rinfo);
+ joinrel->joininfo = list_append_unique_ptr(joinrel->joininfo,
+ rinfo);
}
}
}
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/backend/parser/analyze.c,v 1.322 2005/06/05 00:38:09 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/analyze.c,v 1.323 2005/07/28 22:27:00 tgl Exp $
*
*-------------------------------------------------------------------------
*/
switch (rte->rtekind)
{
case RTE_RELATION:
- if (!list_member_int(rowMarks, i)) /* avoid duplicates */
- rowMarks = lappend_int(rowMarks, i);
+ /* use list_append_unique to avoid duplicates */
+ rowMarks = list_append_unique_int(rowMarks, i);
rte->requiredPerms |= ACL_SELECT_FOR_UPDATE;
break;
case RTE_SUBQUERY:
switch (rte->rtekind)
{
case RTE_RELATION:
- if (!list_member_int(rowMarks, i)) /* avoid duplicates */
- rowMarks = lappend_int(rowMarks, i);
+ /* use list_append_unique to avoid duplicates */
+ rowMarks = list_append_unique_int(rowMarks, i);
rte->requiredPerms |= ACL_SELECT_FOR_UPDATE;
break;
case RTE_SUBQUERY:
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/rewrite/rewriteHandler.c,v 1.155 2005/06/28 05:08:59 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/rewrite/rewriteHandler.c,v 1.156 2005/07/28 22:27:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
if (rte->rtekind == RTE_RELATION)
{
- if (!list_member_int(qry->rowMarks, rti))
- qry->rowMarks = lappend_int(qry->rowMarks, rti);
+ qry->rowMarks = list_append_unique_int(qry->rowMarks, rti);
rte->requiredPerms |= ACL_SELECT_FOR_UPDATE;
}
else if (rte->rtekind == RTE_SUBQUERY)
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.122 2005/07/26 16:38:27 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.123 2005/07/28 22:27:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
* graph, we must test for having already seen this role.
* It is legal for instance to have both A->B and A->C->B.
*/
- if (!list_member_oid(roles_list, otherid))
- roles_list = lappend_oid(roles_list, otherid);
+ roles_list = list_append_unique_oid(roles_list, otherid);
}
ReleaseSysCacheList(memlist);
}
* graph, we must test for having already seen this role.
* It is legal for instance to have both A->B and A->C->B.
*/
- if (!list_member_oid(roles_list, otherid))
- roles_list = lappend_oid(roles_list, otherid);
+ roles_list = list_append_unique_oid(roles_list, otherid);
}
ReleaseSysCacheList(memlist);
}
break;
}
- if (!list_member_oid(roles_list, otherid))
- roles_list = lappend_oid(roles_list, otherid);
+ roles_list = list_append_unique_oid(roles_list, otherid);
}
ReleaseSysCacheList(memlist);
if (result)
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/backend/utils/init/flatfiles.c,v 1.12 2005/07/04 04:51:50 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/init/flatfiles.c,v 1.13 2005/07/28 22:27:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
* Now add all the new roles to roles_list.
*/
for (i = first_found; i <= last_found; i++)
- {
- Oid rolid = authmem_info[i].roleid;
-
- if (!list_member_oid(roles_list, rolid))
- roles_list = lappend_oid(roles_list, rolid);
- }
+ roles_list = list_append_unique_oid(roles_list,
+ authmem_info[i].roleid);
}
/*