diff options
-rw-r--r-- | exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java | 7 | ||||
-rw-r--r-- | exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestMergeJoinAdvanced.java | 23 | ||||
-rwxr-xr-x | exec/java-exec/src/test/resources/join/j1/0_0_0.parquet | bin | 0 -> 9849 bytes | |||
-rwxr-xr-x | exec/java-exec/src/test/resources/join/j1/0_0_1.parquet | bin | 0 -> 1028 bytes | |||
-rwxr-xr-x | exec/java-exec/src/test/resources/join/j2/0_0_0.parquet | bin | 0 -> 2399 bytes |
5 files changed, 29 insertions, 1 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java index ee2ce7fdc..2e777f66b 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java @@ -378,8 +378,12 @@ public class MergeJoinBatch extends AbstractRecordBatch<MergeJoinPOP> { leftExpr[i] = materializeExpression(condition.getLeft(), lastLeftStatus, left, collector); rightExpr[i] = materializeExpression(condition.getRight(), lastRightStatus, right, collector); } - JoinUtils.addLeastRestrictiveCasts(leftExpr, left, rightExpr, right, context); + // if right side is empty, rightExpr will most likely default to NULLABLE INT which may cause the following + // call to throw an exception. In this case we can safely skip adding the casts + if (lastRightStatus != IterOutcome.NONE) { + JoinUtils.addLeastRestrictiveCasts(leftExpr, left, rightExpr, right, context); + } //generate doCompare() method ///////////////////////////////////////// generateDoCompare(cg, incomingRecordBatch, leftExpr, incomingLeftRecordBatch, rightExpr, @@ -561,4 +565,5 @@ public class MergeJoinBatch extends AbstractRecordBatch<MergeJoinPOP> { } return materializedExpr; } + } diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestMergeJoinAdvanced.java b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestMergeJoinAdvanced.java index c706638db..54539fd2e 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestMergeJoinAdvanced.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestMergeJoinAdvanced.java @@ -18,6 +18,9 @@ package org.apache.drill.exec.physical.impl.join; import org.apache.drill.BaseTestQuery; +import org.apache.drill.common.util.TestTools; +import org.apache.drill.exec.ExecConstants; +import org.apache.drill.exec.planner.physical.PlannerSettings; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -73,4 +76,24 @@ public class TestMergeJoinAdvanced extends BaseTestQuery { .baselineValues(4l) .go(); } + + @Test + public void testFix2967() throws Exception { + setSessionOption(PlannerSettings.BROADCAST.getOptionName(), "false"); + setSessionOption(PlannerSettings.HASHJOIN.getOptionName(), "false"); + setSessionOption(ExecConstants.SLICE_TARGET, "1"); + setSessionOption(ExecConstants.MAX_WIDTH_PER_NODE_KEY, "23"); + + final String TEST_RES_PATH = TestTools.getWorkingPath() + "/src/test/resources"; + + try { + test("select * from dfs_test.`%s/join/j1` j1 left outer join dfs_test.`%s/join/j2` j2 on (j1.c_varchar = j2.c_varchar)", + TEST_RES_PATH, TEST_RES_PATH); + } finally { + setSessionOption(PlannerSettings.BROADCAST.getOptionName(), String.valueOf(PlannerSettings.BROADCAST.getDefault().bool_val)); + setSessionOption(PlannerSettings.HASHJOIN.getOptionName(), String.valueOf(PlannerSettings.HASHJOIN.getDefault().bool_val)); + setSessionOption(ExecConstants.SLICE_TARGET, String.valueOf(ExecConstants.SLICE_TARGET_DEFAULT)); + setSessionOption(ExecConstants.MAX_WIDTH_PER_NODE_KEY, String.valueOf(ExecConstants.MAX_WIDTH_PER_NODE.getDefault().num_val)); + } + } } diff --git a/exec/java-exec/src/test/resources/join/j1/0_0_0.parquet b/exec/java-exec/src/test/resources/join/j1/0_0_0.parquet Binary files differnew file mode 100755 index 000000000..395cab6a1 --- /dev/null +++ b/exec/java-exec/src/test/resources/join/j1/0_0_0.parquet diff --git a/exec/java-exec/src/test/resources/join/j1/0_0_1.parquet b/exec/java-exec/src/test/resources/join/j1/0_0_1.parquet Binary files differnew file mode 100755 index 000000000..62f7c075f --- /dev/null +++ b/exec/java-exec/src/test/resources/join/j1/0_0_1.parquet diff --git a/exec/java-exec/src/test/resources/join/j2/0_0_0.parquet b/exec/java-exec/src/test/resources/join/j2/0_0_0.parquet Binary files differnew file mode 100755 index 000000000..419de5e46 --- /dev/null +++ b/exec/java-exec/src/test/resources/join/j2/0_0_0.parquet |