postgres.git / summary / log / commit / refs
commit 244b4a37eb8e253e5221477534c2a2f0a9c23630
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun Sep 17 19:28:51 2017 +0000
First released in: 11.0, 9.5.10, 9.6.6, 10.0
Allow rel_is_distinct_for() to look through RelabelType below OpExpr.
This lets it do the right thing for, eg, varchar columns.
Back-patch to 9.5 where this logic appeared.
David Rowley, per report from Kim Rose Carlsen
Discussion: https://postgr.es/m/VI1PR05MB17091F9A9876528055D6A827C76D0@VI1PR05MB1709.eurprd05.prod.outlook.com
src/backend/optimizer/plan/analyzejoins.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c
index 34317fe7782..511603b5810 100644
--- a/src/backend/optimizer/plan/analyzejoins.c
+++ b/src/backend/optimizer/plan/analyzejoins.c
@@ -703,6 +703,14 @@ rel_is_distinct_for(PlannerInfo *root, RelOptInfo *rel, List *clause_list)
else
var = (Var *) get_leftop(rinfo->clause);
+ /*
+ * We may ignore any RelabelType node above the operand. (There
+ * won't be more than one, since eval_const_expressions() has been
+ * applied already.)
+ */
+ if (var && IsA(var, RelabelType))
+ var = (Var *) ((RelabelType *) var)->arg;
+
/*
* If inner side isn't a Var referencing a subquery output column,
* this clause doesn't help us.
[parent: 66fe509be016]