OSDN Git Service

Allow UNION/UNION ALL in subselects.
authorBruce Momjian <bruce@momjian.us>
Wed, 15 Jul 1998 22:16:21 +0000 (22:16 +0000)
committerBruce Momjian <bruce@momjian.us>
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 8ce9881..6fa29ac 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 a1c21e8..aea1873 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 eb8c424..fa1e1ce 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 335cf4a..2825cf5 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 */