diff options
Diffstat (limited to 'src/backend/optimizer/util/pathnode.c')
-rw-r--r-- | src/backend/optimizer/util/pathnode.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 36843f834da..b51ec089347 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/pathnode.c,v 1.67 2000/10/05 19:48:27 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/pathnode.c,v 1.68 2000/11/12 00:36:59 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -391,6 +391,37 @@ create_tidscan_path(RelOptInfo *rel, List *tideval) } /* + * create_append_path + * Creates a path corresponding to an Append plan, returning the + * pathnode. + * + */ +AppendPath * +create_append_path(RelOptInfo *rel, List *subpaths) +{ + AppendPath *pathnode = makeNode(AppendPath); + List *l; + + pathnode->path.pathtype = T_Append; + pathnode->path.parent = rel; + pathnode->path.pathkeys = NIL; /* result is always considered unsorted */ + pathnode->subpaths = subpaths; + + pathnode->path.startup_cost = 0; + pathnode->path.total_cost = 0; + foreach(l, subpaths) + { + Path *subpath = (Path *) lfirst(l); + + if (l == subpaths) /* first node? */ + pathnode->path.startup_cost = subpath->startup_cost; + pathnode->path.total_cost += subpath->total_cost; + } + + return pathnode; +} + +/* * create_subqueryscan_path * Creates a path corresponding to a sequential scan of a subquery, * returning the pathnode. |