1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-10 17:42:29 +03:00

Implement CASE expression.

This commit is contained in:
Thomas G. Lockhart
1998-12-04 15:34:49 +00:00
parent 19740e2fff
commit bedd04a551
17 changed files with 779 additions and 110 deletions

View File

@@ -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;