summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrei Martsinchyk2015-03-08 16:37:27 +0000
committerPavan Deolasee2015-04-15 05:49:17 +0000
commit49e0e1cbc28140f30ee4ca6884f679b1020aedf7 (patch)
treea9924a3345f95b6c1b48526cd6b6471be9c5d0ee /src
parent630c4aad52737a25d6b6d3b0b6620a4236325ce9 (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.c4
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;