Commit 4b89126c authored by Tom Lane's avatar Tom Lane

Fix bogus EXPLAIN display of rowcount estimates for BitmapAnd and

BitmapOr nodes.
parent bc843d39
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/optimizer/plan/createplan.c,v 1.183 2005/04/22 21:58:31 tgl Exp $ * $PostgreSQL: pgsql/src/backend/optimizer/plan/createplan.c,v 1.184 2005/04/23 01:29:15 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -941,7 +941,10 @@ create_bitmap_subplan(Query *root, Path *bitmapqual) ...@@ -941,7 +941,10 @@ create_bitmap_subplan(Query *root, Path *bitmapqual)
newlist = lappend(newlist, subplan); newlist = lappend(newlist, subplan);
} }
plan = (Plan *) make_bitmap_and(newlist); plan = (Plan *) make_bitmap_and(newlist);
copy_path_costsize(plan, bitmapqual); plan->startup_cost = apath->path.startup_cost;
plan->total_cost = apath->path.total_cost;
plan->plan_rows =
clamp_row_est(apath->bitmapselectivity * apath->path.parent->tuples);
plan->plan_width = 0; /* meaningless */ plan->plan_width = 0; /* meaningless */
} }
else if (IsA(bitmapqual, BitmapOrPath)) else if (IsA(bitmapqual, BitmapOrPath))
...@@ -957,31 +960,32 @@ create_bitmap_subplan(Query *root, Path *bitmapqual) ...@@ -957,31 +960,32 @@ create_bitmap_subplan(Query *root, Path *bitmapqual)
newlist = lappend(newlist, subplan); newlist = lappend(newlist, subplan);
} }
plan = (Plan *) make_bitmap_or(newlist); plan = (Plan *) make_bitmap_or(newlist);
copy_path_costsize(plan, bitmapqual); plan->startup_cost = opath->path.startup_cost;
plan->total_cost = opath->path.total_cost;
plan->plan_rows =
clamp_row_est(opath->bitmapselectivity * opath->path.parent->tuples);
plan->plan_width = 0; /* meaningless */ plan->plan_width = 0; /* meaningless */
} }
else if (IsA(bitmapqual, IndexPath)) else if (IsA(bitmapqual, IndexPath))
{ {
IndexPath *ipath = (IndexPath *) bitmapqual; IndexPath *ipath = (IndexPath *) bitmapqual;
IndexScan *iscan; IndexScan *iscan;
BitmapIndexScan *bscan;
/* Use the regular indexscan plan build machinery... */ /* Use the regular indexscan plan build machinery... */
iscan = create_indexscan_plan(root, ipath, NIL, NIL); iscan = create_indexscan_plan(root, ipath, NIL, NIL);
Assert(list_length(iscan->indxid) == 1); Assert(list_length(iscan->indxid) == 1);
/* then convert to a bitmap indexscan */ /* then convert to a bitmap indexscan */
bscan = make_bitmap_indexscan(iscan->scan.scanrelid, plan = (Plan *) make_bitmap_indexscan(iscan->scan.scanrelid,
linitial_oid(iscan->indxid), linitial_oid(iscan->indxid),
linitial(iscan->indxqual), linitial(iscan->indxqual),
linitial(iscan->indxqualorig), linitial(iscan->indxqualorig),
linitial(iscan->indxstrategy), linitial(iscan->indxstrategy),
linitial(iscan->indxsubtype)); linitial(iscan->indxsubtype));
bscan->scan.plan.startup_cost = 0.0; plan->startup_cost = 0.0;
bscan->scan.plan.total_cost = ipath->indextotalcost; plan->total_cost = ipath->indextotalcost;
bscan->scan.plan.plan_rows = plan->plan_rows =
clamp_row_est(ipath->indexselectivity * ipath->path.parent->tuples); clamp_row_est(ipath->indexselectivity * ipath->path.parent->tuples);
bscan->scan.plan.plan_width = 0; /* meaningless */ plan->plan_width = 0; /* meaningless */
plan = (Plan *) bscan;
} }
else else
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment