1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-18 17:41:14 +03:00

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.
This commit is contained in:
Tom Lane 2004-02-27 21:42:10 +00:00
parent aed597102c
commit 36be19e3ed

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.91.2.1 2003/11/05 22:00:52 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.91.2.2 2004/02/27 21:42:10 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -768,11 +768,16 @@ process_implied_equality(Query *root,
errmsg("equality operator for types %s and %s should be merge-joinable, but isn't", errmsg("equality operator for types %s and %s should be merge-joinable, but isn't",
format_type_be(ltype), format_type_be(rtype)))); 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 */ clause = make_opclause(oprid(eq_operator), /* opno */
BOOLOID, /* opresulttype */ BOOLOID, /* opresulttype */
false, /* opretset */ false, /* opretset */
(Expr *) item1, (Expr *) copyObject(item1),
(Expr *) item2); (Expr *) copyObject(item2));
ReleaseSysCache(eq_operator); ReleaseSysCache(eq_operator);