aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/util/var.c
diff options
context:
space:
mode:
authorThomas G. Lockhart <lockhart@fourpalms.org>1998-12-04 15:34:49 +0000
committerThomas G. Lockhart <lockhart@fourpalms.org>1998-12-04 15:34:49 +0000
commitbedd04a551c30350ebb8da2aa2596d16053b5d15 (patch)
treee682a8c3fa0a7d849793a7cc0abb101256e6cec5 /src/backend/optimizer/util/var.c
parent19740e2fff22e07244183ac0e888794e63016c89 (diff)
downloadpostgresql-bedd04a551c30350ebb8da2aa2596d16053b5d15.tar.gz
postgresql-bedd04a551c30350ebb8da2aa2596d16053b5d15.zip
Implement CASE expression.
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;