aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-02-27 21:42:00 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-02-27 21:42:00 +0000
commitf5d8f0bb19e0d10f3be0a9bec44b097d5d53ffd4 (patch)
tree730913aea58c27b3cf53af4dd4998b9d7fc2a2e3
parentf46a80c3625e394b174256e3a3a1ad931b1478da (diff)
downloadpostgresql-f5d8f0bb19e0d10f3be0a9bec44b097d5d53ffd4.tar.gz
postgresql-f5d8f0bb19e0d10f3be0a9bec44b097d5d53ffd4.zip
process_implied_equality must copy the substructure of the clauses it
is generating, to avoid problems when subselects are involved. Per report from Damon Hart.
-rw-r--r--src/backend/optimizer/plan/initsplan.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c
index c4412030cc0..46fde263456 100644
--- a/src/backend/optimizer/plan/initsplan.c
+++ b/src/backend/optimizer/plan/initsplan.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/optimizer/plan/initsplan.c,v 1.97 2004/01/05 05:07:35 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/optimizer/plan/initsplan.c,v 1.98 2004/02/27 21:42:00 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -756,11 +756,16 @@ process_implied_equality(Query *root,
errmsg("equality operator for types %s and %s should be merge-joinable, but isn't",
format_type_be(ltype), format_type_be(rtype))));
+ /*
+ * Now we can build the new clause. Copy to ensure it shares no
+ * substructure with original (this is necessary in case there are
+ * subselects in there...)
+ */
clause = make_opclause(oprid(eq_operator), /* opno */
BOOLOID, /* opresulttype */
false, /* opretset */
- (Expr *) item1,
- (Expr *) item2);
+ (Expr *) copyObject(item1),
+ (Expr *) copyObject(item2));
ReleaseSysCache(eq_operator);