Add support for Case exprs to fix_indxqual_references,
so that Case works in WHERE join clauses. Temporary patch --- this routine is one of many that ought to be changed to use centralized expression-tree- walking logic.
This commit is contained in:
parent
6b157f376a
commit
ecbfafbe0e
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.64 1999/07/27 03:51:03 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.65 1999/07/29 02:48:05 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -740,6 +740,37 @@ fix_indxqual_references(Node *clause, Path *index_path)
|
|||||||
|
|
||||||
return (Node *) newnode;
|
return (Node *) newnode;
|
||||||
}
|
}
|
||||||
|
else if (IsA(clause, CaseExpr))
|
||||||
|
{
|
||||||
|
CaseExpr *oldnode = (CaseExpr *) clause;
|
||||||
|
CaseExpr *newnode = makeNode(CaseExpr);
|
||||||
|
|
||||||
|
newnode->casetype = oldnode->casetype;
|
||||||
|
newnode->arg = oldnode->arg; /* XXX should always be null
|
||||||
|
* anyway ... */
|
||||||
|
newnode->args = (List *)
|
||||||
|
fix_indxqual_references((Node *) oldnode->args,
|
||||||
|
index_path);
|
||||||
|
newnode->defresult =
|
||||||
|
fix_indxqual_references(oldnode->defresult,
|
||||||
|
index_path);
|
||||||
|
|
||||||
|
return (Node *) newnode;
|
||||||
|
}
|
||||||
|
else if (IsA(clause, CaseWhen))
|
||||||
|
{
|
||||||
|
CaseWhen *oldnode = (CaseWhen *) clause;
|
||||||
|
CaseWhen *newnode = makeNode(CaseWhen);
|
||||||
|
|
||||||
|
newnode->expr =
|
||||||
|
fix_indxqual_references(oldnode->expr,
|
||||||
|
index_path);
|
||||||
|
newnode->result =
|
||||||
|
fix_indxqual_references(oldnode->result,
|
||||||
|
index_path);
|
||||||
|
|
||||||
|
return (Node *) newnode;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
elog(ERROR, "fix_indxqual_references: Cannot handle node type %d",
|
elog(ERROR, "fix_indxqual_references: Cannot handle node type %d",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user