diff options
Diffstat (limited to 'src/backend/executor/nodeNestloop.c')
-rw-r--r-- | src/backend/executor/nodeNestloop.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/backend/executor/nodeNestloop.c b/src/backend/executor/nodeNestloop.c index e205b218bdc..4611a809af5 100644 --- a/src/backend/executor/nodeNestloop.c +++ b/src/backend/executor/nodeNestloop.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/nodeNestloop.c,v 1.40 2005/11/22 18:17:10 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/executor/nodeNestloop.c,v 1.41 2006/02/28 04:10:27 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -272,10 +272,13 @@ ExecNestLoop(NestLoopState *node) * ---------------------------------------------------------------- */ NestLoopState * -ExecInitNestLoop(NestLoop *node, EState *estate) +ExecInitNestLoop(NestLoop *node, EState *estate, int eflags) { NestLoopState *nlstate; + /* check for unsupported flags */ + Assert(!(eflags & (EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK))); + NL1_printf("ExecInitNestLoop: %s\n", "initializing node"); @@ -309,9 +312,16 @@ ExecInitNestLoop(NestLoop *node, EState *estate) /* * initialize child nodes + * + * Tell the inner child that cheap rescans would be good. (This is + * unnecessary if we are doing nestloop with inner indexscan, because + * the rescan will always be with a fresh parameter --- but since + * nodeIndexscan doesn't actually care about REWIND, there's no point + * in dealing with that refinement.) */ - outerPlanState(nlstate) = ExecInitNode(outerPlan(node), estate); - innerPlanState(nlstate) = ExecInitNode(innerPlan(node), estate); + outerPlanState(nlstate) = ExecInitNode(outerPlan(node), estate, eflags); + innerPlanState(nlstate) = ExecInitNode(innerPlan(node), estate, + eflags | EXEC_FLAG_REWIND); #define NESTLOOP_NSLOTS 2 |