aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan/setrefs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer/plan/setrefs.c')
-rw-r--r--src/backend/optimizer/plan/setrefs.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c
index 488fd2b9e37..3d3ad51c319 100644
--- a/src/backend/optimizer/plan/setrefs.c
+++ b/src/backend/optimizer/plan/setrefs.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.28 1998/10/08 18:29:29 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.29 1998/12/14 00:02:10 thomas Exp $
*
*-------------------------------------------------------------------------
*/
@@ -303,7 +303,7 @@ replace_clause_joinvar_refs(Expr *clause,
{
temp = (List *) replace_joinvar_refs((Var *) clause,
outer_tlist, inner_tlist);
- if (temp)
+ if (temp != NULL)
return temp;
else if (clause != NULL)
return (List *) clause;
@@ -402,6 +402,33 @@ replace_clause_joinvar_refs(Expr *clause,
inner_tlist);
return (List *) clause;
}
+ else if (IsA(clause, CaseExpr))
+ {
+ ((CaseExpr *) clause)->args =
+ (List *) replace_subclause_joinvar_refs(((CaseExpr *) clause)->args,
+ outer_tlist,
+ inner_tlist);
+
+ ((CaseExpr *) clause)->defresult =
+ (Node *) replace_clause_joinvar_refs((Expr *) ((CaseExpr *) clause)->defresult,
+ outer_tlist,
+ inner_tlist);
+ return (List *) clause;
+ }
+ else if (IsA(clause, CaseWhen))
+ {
+ ((CaseWhen *) clause)->expr =
+ (Node *) replace_clause_joinvar_refs((Expr *) ((CaseWhen *) clause)->expr,
+ outer_tlist,
+ inner_tlist);
+
+ ((CaseWhen *) clause)->result =
+ (Node *) replace_clause_joinvar_refs((Expr *) ((CaseWhen *) clause)->result,
+ outer_tlist,
+ inner_tlist);
+ return (List *) clause;
+ }
+
/* shouldn't reach here */
elog(ERROR, "replace_clause_joinvar_refs: unsupported clause %d",
nodeTag(clause));