aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/executor/execAmi.c6
-rw-r--r--src/backend/executor/nodeAppend.c27
-rw-r--r--src/backend/parser/gram.c2
-rw-r--r--src/include/executor/nodeAppend.h3
4 files changed, 33 insertions, 5 deletions
diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c
index 8ce988114ad..6fa29ac6ec9 100644
--- a/src/backend/executor/execAmi.c
+++ b/src/backend/executor/execAmi.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execAmi.c,v 1.21 1998/06/15 19:28:18 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execAmi.c,v 1.22 1998/07/15 22:16:17 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -369,6 +369,10 @@ ExecReScan(Plan *node, ExprContext *exprCtxt, Plan *parent)
ExecReScanMergeJoin((MergeJoin *) node, exprCtxt, parent);
break;
+ case T_Append:
+ ExecReScanAppend((Append *) node, exprCtxt, parent);
+ break;
+
/*
* Tee is never used
case T_Tee:
diff --git a/src/backend/executor/nodeAppend.c b/src/backend/executor/nodeAppend.c
index a1c21e88939..aea18739344 100644
--- a/src/backend/executor/nodeAppend.c
+++ b/src/backend/executor/nodeAppend.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/nodeAppend.c,v 1.13 1998/07/15 14:54:30 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/nodeAppend.c,v 1.14 1998/07/15 22:16:18 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -15,6 +15,7 @@
* ExecInitAppend - initialize the append node
* ExecProcAppend - retrieve the next tuple from the node
* ExecEndAppend - shut down the append node
+ * ExecReScanAppend - rescan the append node
*
* NOTES
* Each append node contains a list of one or more subplans which
@@ -34,7 +35,7 @@
* nil nil ... ... ...
* subplans
*
- * Append nodes are currently used to unions, and to support inheritance
+ * Append nodes are currently used for unions, and to support inheritance
* queries, where several relations need to be scanned.
* For example, in our standard person/student/employee/student-emp
* example, where student and employee inherit from person
@@ -500,3 +501,25 @@ ExecEndAppend(Append *node)
* appendstate->as_junkfilter_list here
*/
}
+void
+ExecReScanAppend(Append *node, ExprContext *exprCtxt, Plan *parent)
+{
+ AppendState *appendstate = node->appendstate;
+ int nplans = length(node->appendplans);
+ int i;
+
+ for (i = 0; i < nplans; i++)
+ {
+ Plan *rescanNode;
+
+ appendstate->as_whichplan = i;
+ rescanNode = (Plan *) nth(i, node->appendplans);
+ if (rescanNode->chgParam == NULL)
+ {
+ exec_append_initialize_next(node);
+ ExecReScan((Plan *)rescanNode, exprCtxt, (Plan *) node);
+ }
+ }
+ appendstate->as_whichplan = 0;
+ exec_append_initialize_next(node);
+}
diff --git a/src/backend/parser/gram.c b/src/backend/parser/gram.c
index eb8c424856a..fa1e1cef6cb 100644
--- a/src/backend/parser/gram.c
+++ b/src/backend/parser/gram.c
@@ -218,7 +218,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.15 1998/07/15 15:56:34 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.16 1998/07/15 22:16:18 momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
diff --git a/src/include/executor/nodeAppend.h b/src/include/executor/nodeAppend.h
index 335cf4a33a8..2825cf573f4 100644
--- a/src/include/executor/nodeAppend.h
+++ b/src/include/executor/nodeAppend.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: nodeAppend.h,v 1.7 1997/11/26 01:12:44 momjian Exp $
+ * $Id: nodeAppend.h,v 1.8 1998/07/15 22:16:21 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -21,5 +21,6 @@ extern bool ExecInitAppend(Append *node, EState *estate, Plan *parent);
extern int ExecCountSlotsAppend(Append *node);
extern TupleTableSlot *ExecProcAppend(Append *node);
extern void ExecEndAppend(Append *node);
+extern void ExecReScanAppend(Append *node, ExprContext *exprCtxt, Plan *parent);
#endif /* NODEAPPEND_H */