aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/util/var.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer/util/var.c')
-rw-r--r--src/backend/optimizer/util/var.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/backend/optimizer/util/var.c b/src/backend/optimizer/util/var.c
index 4f7b0b41b4d..3dade59a5ca 100644
--- a/src/backend/optimizer/util/var.c
+++ b/src/backend/optimizer/util/var.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.13 1998/09/01 03:24:00 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.14 1998/12/04 15:34:15 thomas Exp $
*
*-------------------------------------------------------------------------
*/
@@ -137,6 +137,21 @@ contain_var_clause(Node *clause)
else if (is_opclause(clause))
return (contain_var_clause((Node *) get_leftop((Expr *) clause)) ||
contain_var_clause((Node *) get_rightop((Expr *) clause)));
+ else if (case_clause(clause))
+ {
+ List *args;
+ CaseWhen *when;
+
+ foreach(args, ((CaseExpr *) clause)->args)
+ {
+ when = lfirst(args);
+ if (contain_var_clause(when->expr))
+ return TRUE;
+ if (contain_var_clause(when->result))
+ return TRUE;
+ }
+ return (contain_var_clause(((CaseExpr *) clause)->defresult));
+ }
return FALSE;
}
@@ -199,6 +214,18 @@ pull_var_clause(Node *clause)
else if (is_opclause(clause))
retval = nconc(pull_var_clause((Node *) get_leftop((Expr *) clause)),
pull_var_clause((Node *) get_rightop((Expr *) clause)));
+ else if (case_clause(clause))
+ {
+ List *temp;
+
+ foreach(temp, ((CaseExpr *) clause)->args)
+ {
+ retval = nconc(retval, pull_var_clause(((CaseWhen *) lfirst(temp))->expr));
+ retval = nconc(retval, pull_var_clause(((CaseWhen *) lfirst(temp))->result));
+ }
+
+ retval = nconc(retval, pull_var_clause(((CaseExpr *) clause)->defresult));
+ }
else
retval = NIL;