Fix Query handling for inheritance, and cost computations.
authorBruce Momjian
Thu, 18 Dec 1997 03:03:41 +0000 (03:03 +0000)
committerBruce Momjian
Thu, 18 Dec 1997 03:03:41 +0000 (03:03 +0000)
src/backend/nodes/copyfuncs.c
src/backend/optimizer/plan/createplan.c
src/backend/optimizer/plan/planmain.c
src/backend/optimizer/prep/prepunion.c

index 5d848df5ab46cc20f77043aa0e4df4b272cdec45..1e2373c25f1859d10c8d91cd5d3411eea5b2fb29 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.16 1997/11/25 21:59:40 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.17 1997/12/18 03:03:31 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -516,7 +516,7 @@ _copyAgg(Agg *from)
    CopyTempFields((Temp *) from, (Temp *) newnode);
 
    newnode->numAgg = from->numAgg;
-   newnode->aggs = malloc(sizeof(Aggreg *));
+    newnode->aggs = palloc(sizeof(Aggreg *));
    for (i = 0; i < from->numAgg; i++)
    {
        newnode->aggs[i] = copyObject(from->aggs[i]);
@@ -1519,7 +1519,7 @@ static Query *
 _copyQuery(Query *from)
 {
    Query      *newnode = makeNode(Query);
-
+   
    newnode->commandType = from->commandType;
    newnode->resultRelation = from->resultRelation;
    /* probably should dup this string instead of just pointing */
@@ -1555,6 +1555,11 @@ _copyQuery(Query *from)
    Node_Copy(from, newnode, targetList);
    Node_Copy(from, newnode, qual);
 
+   Node_Copy(from, newnode, groupClause);
+   Node_Copy(from, newnode, havingQual); /* currently ignored */
+
+   Node_Copy(from, newnode, Aggreg);
+
    return newnode;
 }
 
index 00898ded097b31272f2b8ef6362b12f3ee6aba51..2be872f9302694abcf022f502264b65bd89e5f5d 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.16 1997/11/25 21:59:56 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.17 1997/12/18 03:03:35 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -943,7 +943,7 @@ make_seqscan(List *qptlist,
    SeqScan    *node = makeNode(SeqScan);
    Plan       *plan = &node->plan;
 
-   plan->cost = 0.0;
+    plan->cost = (lefttree ? lefttree->cost : 0);
    plan->state = (EState *) NULL;
    plan->targetlist = qptlist;
    plan->qual = qpqual;
@@ -989,7 +989,8 @@ make_nestloop(List *qptlist,
    NestLoop   *node = makeNode(NestLoop);
    Plan       *plan = &node->join;
 
-   plan->cost = 0.0;
+    plan->cost = (lefttree ? lefttree->cost : 0) +
+        (righttree ? righttree->cost : 0);
    plan->state = (EState *) NULL;
    plan->targetlist = qptlist;
    plan->qual = qpqual;
@@ -1010,6 +1011,8 @@ make_hashjoin(List *tlist,
    HashJoin   *node = makeNode(HashJoin);
    Plan       *plan = &node->join;
 
+    plan->cost = (lefttree ? lefttree->cost : 0) +
+        (righttree ? righttree->cost : 0);
    plan->cost = 0.0;
    plan->state = (EState *) NULL;
    plan->targetlist = tlist;
@@ -1031,6 +1034,7 @@ make_hash(List *tlist, Var *hashkey, Plan *lefttree)
    Hash       *node = makeNode(Hash);
    Plan       *plan = &node->plan;
 
+    plan->cost = (lefttree ? lefttree->cost : 0);
    plan->cost = 0.0;
    plan->state = (EState *) NULL;
    plan->targetlist = tlist;
@@ -1058,7 +1062,8 @@ make_mergesort(List *tlist,
    MergeJoin  *node = makeNode(MergeJoin);
    Plan       *plan = &node->join;
 
-   plan->cost = 0.0;
+    plan->cost = (lefttree ? lefttree->cost : 0) +
+        (righttree ? righttree->cost : 0);
    plan->state = (EState *) NULL;
    plan->targetlist = tlist;
    plan->qual = qpqual;
@@ -1078,7 +1083,7 @@ make_sort(List *tlist, Oid tempid, Plan *lefttree, int keycount)
    Sort       *node = makeNode(Sort);
    Plan       *plan = &node->plan;
 
-   plan->cost = 0.0;
+    plan->cost = (lefttree ? lefttree->cost : 0);
    plan->state = (EState *) NULL;
    plan->targetlist = tlist;
    plan->qual = NIL;
@@ -1099,7 +1104,7 @@ make_material(List *tlist,
    Material   *node = makeNode(Material);
    Plan       *plan = &node->plan;
 
-   plan->cost = 0.0;
+    plan->cost = (lefttree ? lefttree->cost : 0);
    plan->state = (EState *) NULL;
    plan->targetlist = tlist;
    plan->qual = NIL;
@@ -1137,7 +1142,7 @@ make_group(List *tlist,
 {
    Group      *node = makeNode(Group);
 
-   node->plan.cost = 0.0;
+    node->plan.cost = (lefttree ? lefttree->plan.cost : 0);
    node->plan.state = (EState *) NULL;
    node->plan.qual = NULL;
    node->plan.targetlist = tlist;
@@ -1164,7 +1169,7 @@ make_unique(List *tlist, Plan *lefttree, char *uniqueAttr)
    Unique     *node = makeNode(Unique);
    Plan       *plan = &node->plan;
 
-   plan->cost = 0.0;
+    plan->cost = (lefttree ? lefttree->cost : 0);
    plan->state = (EState *) NULL;
    plan->targetlist = tlist;
    plan->qual = NIL;
index fe499341010ddcb49e96414eedb2391bacd1f725..a841b64063a63c75a064c7177c7327f05dff50ee 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.8 1997/09/25 12:21:15 vadim Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.9 1997/12/18 03:03:38 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -362,7 +362,7 @@ make_result(List *tlist,
    Plan       *plan = &node->plan;
 
    tlist = generate_fjoin(tlist);
-   plan->cost = 0.0;
+    plan->cost = (subplan ? subplan->cost : 0);
    plan->state = (EState *) NULL;
    plan->targetlist = tlist;
    plan->lefttree = subplan;
index 00dd4079780f2c72a330e664ae1ff5c3c35d65e5..e5346c388d78dc2ec041b41ffb9fa60da9814cff 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.9 1997/11/25 22:00:10 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.10 1997/12/18 03:03:41 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -241,6 +241,9 @@ plan_union_query(List *relids,
 /*     new_root->uniqueFlag = false; */
        new_root->uniqueFlag = NULL;
        new_root->sortClause = NULL;
+       new_root->groupClause = NULL;
+       new_root->qry_numAgg = 0;
+       new_root->qry_aggs = NULL;
        fix_parsetree_attnums(rt_index,
                              rt_entry->relid,
                              relid,