summaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeNestloop.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/executor/nodeNestloop.c')
-rw-r--r--src/backend/executor/nodeNestloop.c18
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