mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
Repair oversight in 8.2 change that improved the handling of "pseudoconstant"
WHERE clauses. createplan.c is now willing to stick a gating Result node almost anywhere in the plan tree, and in particular one can wind up directly underneath a MergeJoin node. This means it had better be willing to handle Mark/Restore. Fortunately, that's trivial in such cases, since we can just pass off the call to the input node (which the planner has previously ensured can handle Mark/Restore). Per report from Phil Frost.
This commit is contained in:
@ -38,7 +38,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/executor/nodeResult.c,v 1.37 2007/02/02 00:07:03 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/executor/nodeResult.c,v 1.38 2007/02/15 03:07:13 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -166,6 +166,36 @@ ExecResult(ResultState *node)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* ExecResultMarkPos
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
void
|
||||
ExecResultMarkPos(ResultState *node)
|
||||
{
|
||||
PlanState *outerPlan = outerPlanState(node);
|
||||
|
||||
if (outerPlan != NULL)
|
||||
ExecMarkPos(outerPlan);
|
||||
else
|
||||
elog(DEBUG2, "Result nodes do not support mark/restore");
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* ExecResultRestrPos
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
void
|
||||
ExecResultRestrPos(ResultState *node)
|
||||
{
|
||||
PlanState *outerPlan = outerPlanState(node);
|
||||
|
||||
if (outerPlan != NULL)
|
||||
ExecRestrPos(outerPlan);
|
||||
else
|
||||
elog(ERROR, "Result nodes do not support mark/restore");
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* ExecInitResult
|
||||
*
|
||||
@ -180,8 +210,8 @@ ExecInitResult(Result *node, EState *estate, int eflags)
|
||||
ResultState *resstate;
|
||||
|
||||
/* check for unsupported flags */
|
||||
Assert(!(eflags & EXEC_FLAG_MARK));
|
||||
Assert(!(eflags & EXEC_FLAG_BACKWARD) || outerPlan(node) != NULL);
|
||||
Assert(!(eflags & (EXEC_FLAG_MARK | EXEC_FLAG_BACKWARD)) ||
|
||||
outerPlan(node) != NULL);
|
||||
|
||||
/*
|
||||
* create state structure
|
||||
|
Reference in New Issue
Block a user