diff --git a/src/backend/distributed/planner/multi_physical_planner.c b/src/backend/distributed/planner/multi_physical_planner.c index 1488d1e94..9323a163a 100644 --- a/src/backend/distributed/planner/multi_physical_planner.c +++ b/src/backend/distributed/planner/multi_physical_planner.c @@ -3500,9 +3500,11 @@ CheckJoinBetweenColumns(OpExpr *joinClause) List *argumentList = joinClause->args; Node *leftArgument = (Node *) linitial(argumentList); Node *rightArgument = (Node *) lsecond(argumentList); + Node *strippedLeftArgument = strip_implicit_coercions(leftArgument); + Node *strippedRightArgument = strip_implicit_coercions(rightArgument); - NodeTag leftArgumentType = nodeTag(leftArgument); - NodeTag rightArgumentType = nodeTag(rightArgument); + NodeTag leftArgumentType = nodeTag(strippedLeftArgument); + NodeTag rightArgumentType = nodeTag(strippedRightArgument); if (leftArgumentType != T_Var || rightArgumentType != T_Var) { diff --git a/src/test/regress/expected/multi_join_pruning.out b/src/test/regress/expected/multi_join_pruning.out index 578964ac5..9627df180 100644 --- a/src/test/regress/expected/multi_join_pruning.out +++ b/src/test/regress/expected/multi_join_pruning.out @@ -89,13 +89,15 @@ DEBUG: join prunable for intervals [(a,3,b),(b,4,c)] and [(c,5,d),(d,6,e)] explain statements for distributed queries are currently unsupported (1 row) --- Large table joins between varchar columns do not work because of a bug we --- have. Currently, we require joins to be only on columns. Postgres adds a --- relabel to typecast varchars to text due to which our check fails and we --- error out. +-- Test that large table joins on partition varchar columns work EXPLAIN SELECT count(*) FROM varchar_partitioned_table table1, varchar_partitioned_table table2 WHERE table1.varchar_column = table2.varchar_column; -ERROR: cannot perform local joins that involve expressions -DETAIL: local joins can be performed between columns only +DEBUG: join prunable for intervals [BA1000U2AMO4ZGX,BZZXSP27F21T6] and [AA1000U2AMO4ZGX,AZZXSP27F21T6] +DEBUG: join prunable for intervals [AA1000U2AMO4ZGX,AZZXSP27F21T6] and [BA1000U2AMO4ZGX,BZZXSP27F21T6] + QUERY PLAN +---------------------------------------------------------------------- + explain statements for distributed queries are currently unsupported +(1 row) + SET client_min_messages TO NOTICE; diff --git a/src/test/regress/sql/multi_join_pruning.sql b/src/test/regress/sql/multi_join_pruning.sql index 293b05f4c..f2794d8d9 100644 --- a/src/test/regress/sql/multi_join_pruning.sql +++ b/src/test/regress/sql/multi_join_pruning.sql @@ -44,10 +44,7 @@ EXPLAIN SELECT count(*) FROM composite_partitioned_table table1, composite_partitioned_table table2 WHERE table1.composite_column = table2.composite_column; --- Large table joins between varchar columns do not work because of a bug we --- have. Currently, we require joins to be only on columns. Postgres adds a --- relabel to typecast varchars to text due to which our check fails and we --- error out. +-- Test that large table joins on partition varchar columns work EXPLAIN SELECT count(*) FROM varchar_partitioned_table table1, varchar_partitioned_table table2