diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2004-02-27 21:42:10 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2004-02-27 21:42:10 +0000 |
commit | 36be19e3eded62d3aee4c907f5593b608076c8cd (patch) | |
tree | effa23e706f1e164d9b9dedc1f01e25fcdbee65c /src/backend/optimizer/plan/initsplan.c | |
parent | aed597102ca15ee8215574b923b0ad0190af3920 (diff) | |
download | postgresql-36be19e3eded62d3aee4c907f5593b608076c8cd.tar.gz postgresql-36be19e3eded62d3aee4c907f5593b608076c8cd.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.
Diffstat (limited to 'src/backend/optimizer/plan/initsplan.c')
-rw-r--r-- | src/backend/optimizer/plan/initsplan.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c index bff9b11df2f..859280686c2 100644 --- a/src/backend/optimizer/plan/initsplan.c +++ b/src/backend/optimizer/plan/initsplan.c @@ -8,7 +8,7 @@ * * * 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", 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); |