Allow UNION/UNION ALL in subselects.
authorBruce Momjian
Wed, 15 Jul 1998 22:16:21 +0000 (22:16 +0000)
committerBruce Momjian
Wed, 15 Jul 1998 22:16:21 +0000 (22:16 +0000)
src/backend/executor/execAmi.c
src/backend/executor/nodeAppend.c
src/backend/parser/gram.c
src/include/executor/nodeAppend.h

index 8ce988114adc880f627619b1141d89d78bf20441..6fa29ac6ec90dac6d150c18a8d9a710af84fb910 100644 (file)
@@ -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:
index a1c21e889399cc3644865c59e9d113c9d0c457f7..aea18739344f881837063b439e4d9e83ff18a599 100644 (file)
@@ -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);
+}
index eb8c424856a96dd6dc5a70f778325aee462d1254..fa1e1cef6cb7e6f8bb379f2b80d39c210933b7aa 100644 (file)
  *
  *
  * 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
index 335cf4a33a83ab8757b9630dfd12c9f63df09468..2825cf573f472b5802b40d8fe748997db434b8d7 100644 (file)
@@ -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 */