1
0
mirror of https://github.com/postgres/postgres.git synced 2025-09-09 13:09:39 +03:00

Make use of new list primitives list_append_unique and list_concat_unique

where applicable.
This commit is contained in:
Tom Lane
2005-07-28 22:27:02 +00:00
parent ef85f5fabc
commit 5d27bf20b4
8 changed files with 44 additions and 65 deletions

View File

@@ -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);
}
/*----------

View File

@@ -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;

View File

@@ -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;
}
/*

View File

@@ -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);
}
}
}