Allow UNION/UNION ALL in subselects.
This commit is contained in:
parent
2077ce123b
commit
c1f1a2e03a
@ -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:
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user