mirror of
https://github.com/postgres/postgres.git
synced 2025-04-29 13:56:47 +03:00
BitmapHeapScan: postpone setting can_skip_fetch
Set BitmapHeapScanState->can_skip_fetch in BitmapHeapNext() instead of in ExecInitBitmapHeapScan(). This is a preliminary step to pushing the skip fetch optimization into heap AM code. Author: Melanie Plageman Reviewed-by: Tomas Vondra, Andres Freund, Heikki Linnakangas Discussion: https://postgr.es/m/CAAKRu_ZwCwWFeL_H3ia26bP2e7HiKLWt0ZmGXPVwPO6uXq0vaA%40mail.gmail.com
This commit is contained in:
parent
74eaf66f98
commit
fe1431e39c
@ -105,6 +105,16 @@ BitmapHeapNext(BitmapHeapScanState *node)
|
||||
*/
|
||||
if (!node->initialized)
|
||||
{
|
||||
/*
|
||||
* We can potentially skip fetching heap pages if we do not need any
|
||||
* columns of the table, either for checking non-indexable quals or
|
||||
* for returning data. This test is a bit simplistic, as it checks
|
||||
* the stronger condition that there's no qual or return tlist at all.
|
||||
* But in most cases it's probably not worth working harder than that.
|
||||
*/
|
||||
node->can_skip_fetch = (node->ss.ps.plan->qual == NIL &&
|
||||
node->ss.ps.plan->targetlist == NIL);
|
||||
|
||||
if (!pstate)
|
||||
{
|
||||
tbm = (TIDBitmap *) MultiExecProcNode(outerPlanState(node));
|
||||
@ -743,16 +753,7 @@ ExecInitBitmapHeapScan(BitmapHeapScan *node, EState *estate, int eflags)
|
||||
scanstate->shared_tbmiterator = NULL;
|
||||
scanstate->shared_prefetch_iterator = NULL;
|
||||
scanstate->pstate = NULL;
|
||||
|
||||
/*
|
||||
* We can potentially skip fetching heap pages if we do not need any
|
||||
* columns of the table, either for checking non-indexable quals or for
|
||||
* returning data. This test is a bit simplistic, as it checks the
|
||||
* stronger condition that there's no qual or return tlist at all. But in
|
||||
* most cases it's probably not worth working harder than that.
|
||||
*/
|
||||
scanstate->can_skip_fetch = (node->scan.plan.qual == NIL &&
|
||||
node->scan.plan.targetlist == NIL);
|
||||
scanstate->can_skip_fetch = false;
|
||||
|
||||
/*
|
||||
* Miscellaneous initialization
|
||||
|
Loading…
x
Reference in New Issue
Block a user