aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/prep/prepunion.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2009-05-12 00:56:05 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2009-05-12 00:56:05 +0000
commit0ada559187d167fceb0ce438f332fd50852d0c13 (patch)
tree94790f0a21c72426634e69578ee286444ea27ea3 /src/backend/optimizer/prep/prepunion.c
parent6480c143ee067544730993d03e0eb567f3acd71e (diff)
downloadpostgresql-0ada559187d167fceb0ce438f332fd50852d0c13.tar.gz
postgresql-0ada559187d167fceb0ce438f332fd50852d0c13.zip
Do some minor code refactoring in preparation for changing the APIs of
find_inheritance_children() and find_all_inheritors(). I got annoyed that these are buried inside the planner but mostly used elsewhere. So, create a new file catalog/pg_inherits.c and put them there, along with a couple of other functions that search pg_inherits. The code that modifies pg_inherits is (still) in tablecmds.c --- it's kind of entangled with unrelated code that modifies pg_depend and other stuff, so pulling it out seemed like a bigger change than I wanted to make right now. But this file provides a natural home for it if anyone ever gets around to that. This commit just moves code around; it doesn't change anything, except I succumbed to the temptation to make a couple of trivial optimizations in typeInheritsFrom().
Diffstat (limited to 'src/backend/optimizer/prep/prepunion.c')
-rw-r--r--src/backend/optimizer/prep/prepunion.c45
1 files changed, 2 insertions, 43 deletions
diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c
index 06f920561a2..a067ed36e69 100644
--- a/src/backend/optimizer/prep/prepunion.c
+++ b/src/backend/optimizer/prep/prepunion.c
@@ -22,7 +22,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepunion.c,v 1.168 2009/03/31 22:12:48 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepunion.c,v 1.169 2009/05/12 00:56:05 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -32,6 +32,7 @@
#include "access/heapam.h"
#include "access/sysattr.h"
#include "catalog/namespace.h"
+#include "catalog/pg_inherits.h"
#include "catalog/pg_type.h"
#include "miscadmin.h"
#include "nodes/makefuncs.h"
@@ -39,7 +40,6 @@
#include "optimizer/cost.h"
#include "optimizer/pathnode.h"
#include "optimizer/paths.h"
-#include "optimizer/plancat.h"
#include "optimizer/planmain.h"
#include "optimizer/planner.h"
#include "optimizer/prep.h"
@@ -1082,47 +1082,6 @@ generate_setop_grouplist(SetOperationStmt *op, List *targetlist)
/*
- * find_all_inheritors -
- * Returns a list of relation OIDs including the given rel plus
- * all relations that inherit from it, directly or indirectly.
- */
-List *
-find_all_inheritors(Oid parentrel)
-{
- List *rels_list;
- ListCell *l;
-
- /*
- * 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.
- */
- rels_list = list_make1_oid(parentrel);
-
- foreach(l, rels_list)
- {
- Oid currentrel = lfirst_oid(l);
- List *currentchildren;
-
- /* Get the direct children of this rel */
- currentchildren = find_inheritance_children(currentrel);
-
- /*
- * Add to the queue only those children not already seen. This avoids
- * making duplicate entries in case of multiple inheritance paths from
- * the same parent. (It'll also keep us from getting into an infinite
- * loop, though theoretically there can't be any cycles in the
- * inheritance graph anyway.)
- */
- rels_list = list_concat_unique_oid(rels_list, currentchildren);
- }
-
- return rels_list;
-}
-
-/*
* expand_inherited_tables
* Expand each rangetable entry that represents an inheritance set
* into an "append relation". At the conclusion of this process,