aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>1999-07-29 02:48:05 +0000
committerTom Lane <tgl@sss.pgh.pa.us>1999-07-29 02:48:05 +0000
commitecbfafbe0e80860ba1667438eb71865d72e4c4b0 (patch)
tree33d777e81bb8c93a6c66a7e7f316631cfb3d347e /src
parent6b157f376a52edd14d63b7826bdc299645832610 (diff)
downloadpostgresql-ecbfafbe0e80860ba1667438eb71865d72e4c4b0.tar.gz
postgresql-ecbfafbe0e80860ba1667438eb71865d72e4c4b0.zip
Add support for Case exprs to fix_indxqual_references,
so that Case works in WHERE join clauses. Temporary patch --- this routine is one of many that ought to be changed to use centralized expression-tree- walking logic.
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/plan/createplan.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index 18837cf2824..a358308a468 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.64 1999/07/27 03:51:03 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.65 1999/07/29 02:48:05 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -740,6 +740,37 @@ fix_indxqual_references(Node *clause, Path *index_path)
return (Node *) newnode;
}
+ else if (IsA(clause, CaseExpr))
+ {
+ CaseExpr *oldnode = (CaseExpr *) clause;
+ CaseExpr *newnode = makeNode(CaseExpr);
+
+ newnode->casetype = oldnode->casetype;
+ newnode->arg = oldnode->arg; /* XXX should always be null
+ * anyway ... */
+ newnode->args = (List *)
+ fix_indxqual_references((Node *) oldnode->args,
+ index_path);
+ newnode->defresult =
+ fix_indxqual_references(oldnode->defresult,
+ index_path);
+
+ return (Node *) newnode;
+ }
+ else if (IsA(clause, CaseWhen))
+ {
+ CaseWhen *oldnode = (CaseWhen *) clause;
+ CaseWhen *newnode = makeNode(CaseWhen);
+
+ newnode->expr =
+ fix_indxqual_references(oldnode->expr,
+ index_path);
+ newnode->result =
+ fix_indxqual_references(oldnode->result,
+ index_path);
+
+ return (Node *) newnode;
+ }
else
{
elog(ERROR, "fix_indxqual_references: Cannot handle node type %d",