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:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user