CINXE.COM
From a6dc33debeb87eee8659aed1e99265286bd53e0d Mon Sep 17 00:00:00 2001 From: Mehant Baid <mehantr@gmail.com> Date: Wed, 29 Apr 2015 10:38:52 -0700 Subject: [PATCH] DRILL-2433: Add support for implicit casting between date and timestamp in join condition --- .../apache/drill/exec/physical/impl/join/JoinUtils.java | 6 ++++++ .../exec/physical/impl/join/TestHashJoinAdvanced.java | 11 +++++++++++ .../exec/physical/impl/join/TestMergeJoinAdvanced.java | 11 +++++++++++ .../src/test/resources/parquet/timestamp_table.parquet | Bin 0 -> 183 bytes 4 files changed, 28 insertions(+) create mode 100644 exec/java-exec/src/test/resources/parquet/timestamp_table.parquet diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/JoinUtils.java b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/JoinUtils.java index 5ed5d27..b8fc5bc 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/JoinUtils.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/JoinUtils.java @@ -137,6 +137,12 @@ public class JoinUtils { return true; } + // allow implicit cast if input types are date/ timestamp + if ((input1 == TypeProtos.MinorType.DATE || input1 == TypeProtos.MinorType.TIMESTAMP) && + (input2 == TypeProtos.MinorType.DATE || input2 == TypeProtos.MinorType.TIMESTAMP)) { + return true; + } + // allow implicit cast if both the input types are varbinary/ varchar if ((input1 == TypeProtos.MinorType.VARCHAR || input1 == TypeProtos.MinorType.VARBINARY) && (input2 == TypeProtos.MinorType.VARCHAR || input2 == TypeProtos.MinorType.VARBINARY)) { diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestHashJoinAdvanced.java b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestHashJoinAdvanced.java index 905fd1b..a70a3f8 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestHashJoinAdvanced.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestHashJoinAdvanced.java @@ -114,5 +114,16 @@ public class TestHashJoinAdvanced extends BaseTestQuery { .baselineColumns("bigint_col") .baselineValues(1l) .go(); + + query = "select count(*) col1 from " + + "(select t1.date_opt from cp.`parquet/date_dictionary.parquet` t1, cp.`parquet/timestamp_table.parquet` t2 " + + "where t1.date_opt = t2.timestamp_col)"; // join condition contains date and timestamp + + testBuilder() + .sqlQuery(query) + .unOrdered() + .baselineColumns("col1") + .baselineValues(4l) + .go(); } } 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 a092ca7..c706638 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 @@ -61,5 +61,16 @@ public class TestMergeJoinAdvanced extends BaseTestQuery { .baselineColumns("bigint_col") .baselineValues(1l) .go(); + + query = "select count(*) col1 from " + + "(select t1.date_opt from cp.`parquet/date_dictionary.parquet` t1, cp.`parquet/timestamp_table.parquet` t2 " + + "where t1.date_opt = t2.timestamp_col)"; // join condition contains date and timestamp + + testBuilder() + .sqlQuery(query) + .unOrdered() + .baselineColumns("col1") + .baselineValues(4l) + .go(); } } diff --git a/exec/java-exec/src/test/resources/parquet/timestamp_table.parquet b/exec/java-exec/src/test/resources/parquet/timestamp_table.parquet new file mode 100644 index 0000000000000000000000000000000000000000..14ad79f1225274c2c236ba916d554df436ba0cb8 GIT binary patch literal 183 zcmWG=3^EjD5ET#=(Gg_=GB`vzWF$BkUby}8V_;xFu*85o1`ZjRgea4wjt5IoetwB4 z6N4y=DuV=XNoH<paY<rsL40z4j;auY7?Y%oq>LJej3|qwDhGoknhH@SF($Dju{1Rf j8-y(g7T7+ZJQITkS3zP?VQFfKZf+4n1<(}%KqmtL80jXJ literal 0 HcmV?d00001 -- 1.8.5.2 (Apple Git-48)