From 4b89126ccc7bed5fd416a76134907cfff56647f4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 23 Apr 2005 01:29:15 +0000 Subject: [PATCH] Fix bogus EXPLAIN display of rowcount estimates for BitmapAnd and BitmapOr nodes. --- src/backend/optimizer/plan/createplan.c | 34 ++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index e7a695e572..21af9f7e3e 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -10,7 +10,7 @@ * * * 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) newlist = lappend(newlist, subplan); } 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 */ } else if (IsA(bitmapqual, BitmapOrPath)) @@ -957,31 +960,32 @@ create_bitmap_subplan(Query *root, Path *bitmapqual) newlist = lappend(newlist, subplan); } 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 */ } else if (IsA(bitmapqual, IndexPath)) { IndexPath *ipath = (IndexPath *) bitmapqual; IndexScan *iscan; - BitmapIndexScan *bscan; /* Use the regular indexscan plan build machinery... */ iscan = create_indexscan_plan(root, ipath, NIL, NIL); Assert(list_length(iscan->indxid) == 1); /* then convert to a bitmap indexscan */ - bscan = make_bitmap_indexscan(iscan->scan.scanrelid, - linitial_oid(iscan->indxid), - linitial(iscan->indxqual), - linitial(iscan->indxqualorig), - linitial(iscan->indxstrategy), - linitial(iscan->indxsubtype)); - bscan->scan.plan.startup_cost = 0.0; - bscan->scan.plan.total_cost = ipath->indextotalcost; - bscan->scan.plan.plan_rows = + plan = (Plan *) make_bitmap_indexscan(iscan->scan.scanrelid, + linitial_oid(iscan->indxid), + linitial(iscan->indxqual), + linitial(iscan->indxqualorig), + linitial(iscan->indxstrategy), + linitial(iscan->indxsubtype)); + plan->startup_cost = 0.0; + plan->total_cost = ipath->indextotalcost; + plan->plan_rows = clamp_row_est(ipath->indexselectivity * ipath->path.parent->tuples); - bscan->scan.plan.plan_width = 0; /* meaningless */ - plan = (Plan *) bscan; + plan->plan_width = 0; /* meaningless */ } else { -- 2.11.0