aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2017-09-17 15:28:51 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2017-09-17 15:28:51 -0400
commiteeff6839633d97c03a43889ed7c83df81d513f08 (patch)
tree21259ccb9bddd1e90a898f019428276827970eca
parent825fac5d33a606a1410111c5be195e5af3a0c433 (diff)
downloadpostgresql-eeff6839633d97c03a43889ed7c83df81d513f08.tar.gz
postgresql-eeff6839633d97c03a43889ed7c83df81d513f08.zip
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
-rw-r--r--src/backend/optimizer/plan/analyzejoins.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c
index d188d9724af..9b4c1033c93 100644
--- a/src/backend/optimizer/plan/analyzejoins.c
+++ b/src/backend/optimizer/plan/analyzejoins.c
@@ -346,6 +346,14 @@ join_is_removable(PlannerInfo *root, SpecialJoinInfo *sjinfo)
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.
*/