diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c index f51e492eca12bede6f1b124a37cb739adf131fd1..f4f2d779b0a3587c749ec4e1bfeb6ca1352233a4 100644 --- a/src/backend/optimizer/path/joinrels.c +++ b/src/backend/optimizer/path/joinrels.c @@ -8,7 +8,7 @@ * * * 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 $ * *------------------------------------------------------------------------- */ @@ -44,7 +44,6 @@ make_rels_by_joins(PlannerInfo *root, int level, List **joinrels) { List *result_rels = NIL; List *new_rels; - ListCell *nr; ListCell *r; int k; @@ -121,13 +120,7 @@ make_rels_by_joins(PlannerInfo *root, int level, List **joinrels) * 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); } /* @@ -182,8 +175,9 @@ make_rels_by_joins(PlannerInfo *root, int level, List **joinrels) 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); } } } @@ -224,13 +218,7 @@ make_rels_by_joins(PlannerInfo *root, int level, List **joinrels) 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); } /*---------- diff --git a/src/backend/optimizer/path/pathkeys.c b/src/backend/optimizer/path/pathkeys.c index 26ccfd9297edc313e024f5b9594091b16719e8ee..3e4bcffe2e85ab6062ae4856de5e001ad0fa04ad 100644 --- a/src/backend/optimizer/path/pathkeys.c +++ b/src/backend/optimizer/path/pathkeys.c @@ -11,7 +11,7 @@ * 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 $ * *------------------------------------------------------------------------- */ @@ -163,7 +163,7 @@ add_equijoined_keys(PlannerInfo *root, RestrictInfo *restrictinfo) 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. @@ -714,8 +714,7 @@ canonicalize_pathkeys(PlannerInfo *root, List *pathkeys) * 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; } @@ -1024,8 +1023,7 @@ build_index_pathkeys(PlannerInfo *root, * 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++; @@ -1467,8 +1465,7 @@ make_pathkeys_for_mergeclauses(PlannerInfo *root, * 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; diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index 1fedd9791cada261d3ef12a433f75ba29ffed60b..0521956235e329236d4bb26e532547872022dfb9 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -14,7 +14,7 @@ * * * 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 $ * *------------------------------------------------------------------------- */ @@ -706,21 +706,24 @@ tlist_same_datatypes(List *tlist, List *colTypes, bool junkOK) 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); /* @@ -730,11 +733,10 @@ find_all_inheritors(Oid parentrel) * 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; } /* diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c index d66796d5cce0c8012642015f2b8c6fdb5f850cab..e595749c2912ee852e8ab0a763a636ca0a08e9a8 100644 --- a/src/backend/optimizer/util/relnode.c +++ b/src/backend/optimizer/util/relnode.c @@ -8,7 +8,7 @@ * * * 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 $ * *------------------------------------------------------------------------- */ @@ -619,8 +619,8 @@ subbuild_joinrel_joinlist(RelOptInfo *joinrel, * 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); } } } diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 1c8fe6cf773012e6f202455fff154afbeeded896..a9211cfe93151dc5c05d7b42ba65a59ab424ec27 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -6,7 +6,7 @@ * 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 $ * *------------------------------------------------------------------------- */ @@ -2789,8 +2789,8 @@ transformLocking(Query *qry, List *lockedRels, bool forUpdate) 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: @@ -2826,8 +2826,8 @@ transformLocking(Query *qry, List *lockedRels, bool forUpdate) 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: diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 3677fd2ebac17312c101e6822ed7cd6a100e3941..428bf7ba44f8d3bdeefa7c4e4b2f94c82c69238a 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -7,7 +7,7 @@ * 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 $ * *------------------------------------------------------------------------- */ @@ -1001,8 +1001,7 @@ markQueryForLocking(Query *qry, bool forUpdate, bool skipOldNew) 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) diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index 48a24db182635d3b8ef1f7803eae55203172796c..d51162e7eed2a005042a8e37970e301d2df2c6f8 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -8,7 +8,7 @@ * * * 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 $ * *------------------------------------------------------------------------- */ @@ -2843,8 +2843,7 @@ has_privs_of_role(Oid member, Oid role) * 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); } @@ -2931,8 +2930,7 @@ is_member_of_role(Oid member, Oid role) * 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); } @@ -3024,8 +3022,7 @@ is_admin_of_role(Oid member, Oid role) 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) diff --git a/src/backend/utils/init/flatfiles.c b/src/backend/utils/init/flatfiles.c index e4b7154b93b283bad3206a741a04f674c303d67f..7087a9887d413a9b76751926eca9e10d7e1e4532 100644 --- a/src/backend/utils/init/flatfiles.c +++ b/src/backend/utils/init/flatfiles.c @@ -23,7 +23,7 @@ * 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 $ * *------------------------------------------------------------------------- */ @@ -571,12 +571,8 @@ write_auth_file(Relation rel_authid, Relation rel_authmem) * 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); } /*