From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 25 Mar 2011 22:44:47 +0000 (-0400)
Subject: Fix failure to propagate collation in negate_clause().
X-Git-Tag: REL9_1_ALPHA5~15
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c8e993503d0f1a0cb8f187a136fb64cead9ba591;p=postgresql

Fix failure to propagate collation in negate_clause().

Turns out it was this, and not so much plpgsql, that was at fault in Stefan
Huehner's collation-error-in-a-trigger bug report of a couple weeks ago.
---

diff --git a/src/backend/optimizer/prep/prepqual.c b/src/backend/optimizer/prep/prepqual.c
index fbd6809724..10e00d90dd 100644
--- a/src/backend/optimizer/prep/prepqual.c
+++ b/src/backend/optimizer/prep/prepqual.c
@@ -104,6 +104,8 @@ negate_clause(Node *node)
 					newopexpr->opfuncid = InvalidOid;
 					newopexpr->opresulttype = opexpr->opresulttype;
 					newopexpr->opretset = opexpr->opretset;
+					newopexpr->opcollid = opexpr->opcollid;
+					newopexpr->inputcollid = opexpr->inputcollid;
 					newopexpr->args = opexpr->args;
 					newopexpr->location = opexpr->location;
 					return (Node *) newopexpr;
@@ -126,6 +128,7 @@ negate_clause(Node *node)
 					newopexpr->opno = negator;
 					newopexpr->opfuncid = InvalidOid;
 					newopexpr->useOr = !saopexpr->useOr;
+					newopexpr->inputcollid = saopexpr->inputcollid;
 					newopexpr->args = saopexpr->args;
 					newopexpr->location = saopexpr->location;
 					return (Node *) newopexpr;