diff options
Diffstat (limited to 'src/backend/optimizer/util/var.c')
-rw-r--r-- | src/backend/optimizer/util/var.c | 29 |
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; |