diff options
author | Andrei Martsinchyk | 2015-03-08 16:37:27 +0000 |
---|---|---|
committer | Pavan Deolasee | 2015-04-15 05:49:17 +0000 |
commit | 49e0e1cbc28140f30ee4ca6884f679b1020aedf7 (patch) | |
tree | a9924a3345f95b6c1b48526cd6b6471be9c5d0ee /src | |
parent | 630c4aad52737a25d6b6d3b0b6620a4236325ce9 (diff) |
Join pushdown did not work properly if distribution/join columns were of
varchar datatype because they was typecasted to text.
Solution is to strip off RelabelType from the expression in join condition.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/optimizer/util/pathnode.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index cfda133805..13c77c8544 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -1202,6 +1202,8 @@ set_joinpath_distribution(PlannerInfo *root, JoinPath *pathnode) { EquivalenceMember *em = (EquivalenceMember *) lfirst(emc); Expr *var = (Expr *)em->em_expr; + if (IsA(var, RelabelType)) + var = ((RelabelType *) var)->arg; if (!found_outer) found_outer = equal(var, outerd->distributionExpr); @@ -1234,6 +1236,8 @@ set_joinpath_distribution(PlannerInfo *root, JoinPath *pathnode) em = (EquivalenceMember *) lfirst(emc); emvar = (Expr *)em->em_expr; + if (IsA(emvar, RelabelType)) + emvar = ((RelabelType *) emvar)->arg; if (equal(var, emvar)) { targetd->distributionExpr = (Node *) var; |