postgres.git / summary / log / commit / refs

commit    eeff6839633d97c03a43889ed7c83df81d513f08
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 d188d9724af..9b4c1033c93 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -345,6 +345,14 @@ join_is_removable(PlannerInfo *root, SpecialJoinInfo *sjinfo) 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: 825fac5d33a6]