diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2017-09-17 15:28:51 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2017-09-17 15:28:51 -0400 |
commit | 86e4ebb9af7ed07f11410d568e0fd72427f3b0e3 (patch) | |
tree | 4d2b60c2d050d10a34265c71d2161d056ed346f3 | |
parent | c0d21bdb86b1eadd25ae56f07729aa53e1ca64c0 (diff) | |
download | postgresql-86e4ebb9af7ed07f11410d568e0fd72427f3b0e3.tar.gz postgresql-86e4ebb9af7ed07f11410d568e0fd72427f3b0e3.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.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c index e28a8dc533e..614fd293ed1 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -618,6 +618,14 @@ rel_is_distinct_for(PlannerInfo *root, RelOptInfo *rel, List *clause_list) 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. */ |