You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by pa...@apache.org on 2015/02/20 00:13:47 UTC

drill git commit: DRILL-2197: Fix no applicable constructor error in outer join with a map type

Repository: drill
Updated Branches:
  refs/heads/master d4dc295f1 -> 1ceddff66


DRILL-2197: Fix no applicable constructor error in outer join with a map type


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/1ceddff6
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/1ceddff6
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/1ceddff6

Branch: refs/heads/master
Commit: 1ceddff66d4d81344417af6563a09e756b34d9eb
Parents: d4dc295
Author: Parth Chandra <pc...@maprtech.com>
Authored: Wed Feb 18 22:13:49 2015 -0800
Committer: Parth Chandra <pc...@maprtech.com>
Committed: Thu Feb 19 11:01:48 2015 -0800

----------------------------------------------------------------------
 .../exec/physical/impl/join/HashJoinBatch.java  |  6 ++-
 .../physical/impl/join/TestJoinComplex.java     | 52 ++++++++++++++++++++
 .../resources/join/DRILL-2197-result-1.json     |  2 +
 .../resources/join/DRILL-2197-result-2.json     |  2 +
 .../src/test/resources/join/complex_1.json      | 39 +++++++++++++++
 .../src/test/resources/join/complex_2.json      | 19 +++++++
 6 files changed, 119 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/1ceddff6/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/HashJoinBatch.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/HashJoinBatch.java b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/HashJoinBatch.java
index dae8a03..43d46af 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/HashJoinBatch.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/HashJoinBatch.java
@@ -23,6 +23,7 @@ import java.util.List;
 import org.apache.drill.common.expression.FieldReference;
 import org.apache.drill.common.logical.data.JoinCondition;
 import org.apache.drill.common.logical.data.NamedExpression;
+import org.apache.drill.common.types.TypeProtos;
 import org.apache.drill.common.types.TypeProtos.DataMode;
 import org.apache.drill.common.types.TypeProtos.MajorType;
 import org.apache.drill.common.types.Types;
@@ -412,7 +413,10 @@ public class HashJoinBatch extends AbstractRecordBatch<HashJoinPOP> {
 
         MajorType inputType = field.getType();
         MajorType outputType;
-        if (joinType == JoinRelType.LEFT && inputType.getMode() == DataMode.REQUIRED) {
+        // If left join, then the output type must be nullable. However, map types are
+        // not nullable so we must exclude them from the check below (see DRILL-2197).
+        if (joinType == JoinRelType.LEFT && inputType.getMode() == DataMode.REQUIRED
+            && inputType.getMinorType() != TypeProtos.MinorType.MAP) {
           outputType = Types.overrideMode(inputType, DataMode.OPTIONAL);
         } else {
           outputType = inputType;

http://git-wip-us.apache.org/repos/asf/drill/blob/1ceddff6/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestJoinComplex.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestJoinComplex.java b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestJoinComplex.java
new file mode 100644
index 0000000..cdda10e
--- /dev/null
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestJoinComplex.java
@@ -0,0 +1,52 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.drill.exec.physical.impl.join;
+
+
+import org.apache.drill.BaseTestQuery;
+import org.junit.Test;
+
+public class TestJoinComplex extends BaseTestQuery {
+
+
+  @Test //DRILL-2197 Left Self Join with complex type in projection
+  public void testLeftSelfHashJoinWithMap() throws Exception {
+    final String query = " select a.id, b.oooi.oa.oab.oabc oabc, b.ooof.oa.oab oab from cp.`join/complex_1.json` a left outer join cp.`join/complex_1.json` b on a.id=b.id order by a.id";
+
+    testBuilder()
+      .sqlQuery(query)
+      .unOrdered()
+      .jsonBaselineFile("join/DRILL-2197-result-1.json")
+      .build()
+      .run();
+  }
+
+  @Test //DRILL-2197 Left Join with complex type in projection
+  public void testLeftHashJoinWithMap() throws Exception {
+    final String query = " select a.id, b.oooi.oa.oab.oabc oabc, b.ooof.oa.oab oab from cp.`join/complex_1.json` a left outer join cp.`join/complex_2.json` b on a.id=b.id order by a.id";
+
+    testBuilder()
+      .sqlQuery(query)
+      .unOrdered()
+      .jsonBaselineFile("join/DRILL-2197-result-2.json")
+      .build()
+      .run();
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/drill/blob/1ceddff6/exec/java-exec/src/test/resources/join/DRILL-2197-result-1.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/join/DRILL-2197-result-1.json b/exec/java-exec/src/test/resources/join/DRILL-2197-result-1.json
new file mode 100644
index 0000000..3fceeb5
--- /dev/null
+++ b/exec/java-exec/src/test/resources/join/DRILL-2197-result-1.json
@@ -0,0 +1,2 @@
+{"id":1, "oabc":1, "oab":{"oabc":1.5678}}
+{"id":2, "oabc":2, "oab":{"oabc":2.5678}}

http://git-wip-us.apache.org/repos/asf/drill/blob/1ceddff6/exec/java-exec/src/test/resources/join/DRILL-2197-result-2.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/join/DRILL-2197-result-2.json b/exec/java-exec/src/test/resources/join/DRILL-2197-result-2.json
new file mode 100644
index 0000000..29a3022
--- /dev/null
+++ b/exec/java-exec/src/test/resources/join/DRILL-2197-result-2.json
@@ -0,0 +1,2 @@
+{"id":1, "oabc":1, "oab":{"oabc":1.5678}}
+{"id":2, "oabc":null, "oab":{}}

http://git-wip-us.apache.org/repos/asf/drill/blob/1ceddff6/exec/java-exec/src/test/resources/join/complex_1.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/join/complex_1.json b/exec/java-exec/src/test/resources/join/complex_1.json
new file mode 100644
index 0000000..01afc12
--- /dev/null
+++ b/exec/java-exec/src/test/resources/join/complex_1.json
@@ -0,0 +1,39 @@
+{"id":1,
+    "gbyi":0,
+    "gbyt":"soa",
+    "fl":1.6789,
+    "nul":"not null",
+    "bool":false,
+    "str":"This is row 1",
+    "sia":[1, 11, 101, 1001],
+    "sfa":[0.0, 1.01, 10.222, 10.0006789],
+    "sba":[-1, -9.8766, null, true, "text row 1"],
+    "soa":[{"in":1},{"in":1,"fl":1.12345}, {"in":1, "fl":10.12345, "nul":"not null"}, {"in":1, "fl":10.6789, "nul":"not null", "bool":true, "str":"here is a string at row 1"}],
+    "ooa":[{"in":1}, {"fl":{"f1":1.6789, "f2":54331.0}, "in":1}, {"a":{"aa":{"aaa":"aaa 1"}}, "b":{"bb":{"bbb":"bbb 1"}, "c":{"cc":"ccc 1"}}}],
+    "aaa":[[["aa0 1"], ["ab0 1"]], [["ba0 1"], ["bb0 1"]],[["ca0 1", "ca1 1"],["cb0 1", "cb1 1", "cb2 1"]]],
+    "saa":[-1, [-10, -9.3211], [1, [10.12345, "not null"], [1, 1.6789, "not null", true], [-1, 6779.0, "not null", false, "this is a short string 1"]]],
+    "oooi":{"oa":{"oab":{"oabc":1}}},
+    "ooof":{"oa":{"oab":{"oabc":1.5678}}},
+    "ooos":{"oa":{"oab":{"oabc":"ooos string 1"}}},
+    "oooa":{"oa":{"oab":{"oabc":[{"rowId":1}, {"rowValue1":1, "rowValue2":1}]}}}
+}
+{"id":2,
+    "gbyi":14,
+    "gbyt":"oooa",
+    "fl":2.6789,
+    "nul":null,
+    "bool":true,
+    "str":"This is row 2",
+    "sia":[2, 12, 102, 1002],
+    "sfa":[0.0, 2.01, 20.222, 20.0006789],
+    "sba":[-2, -19.8766, null, false, "text row 2"],
+    "soa":[{"in":2},{"in":2,"fl":2.12345}, {"in":2, "fl":20.12345, "nul":"not null"}, {"in":2, "fl":20.6789, "nul":null, "bool":false, "str":"here is a string at row 2"}],
+    "ooa":[{"in":2}, {"fl":{}, "in":2}, {"a":{"aa":{"aaa":"aaa 2"}}, "b":{"bb":{"bbb":"bbb 2"}, "c":{"cc":"ccc 2"}}}],
+    "aaa":[[["aa0 2"], ["ab0 2"]], [["ba0 2"], ["bb0 2"]],[["ca0 2", "ca1 2"],["cb0 2", "cb1 2", "cb2 2"]]],
+    "saa":[-2, [-20, -19.3211], [2, [20.12345, "not null"], [2, 2.6789, "not null", true], [-2, 6769.0, null, false, "this is a short string 2"]]],
+    "oooi":{"oa":{"oab":{"oabc":2}}},
+    "ooof":{"oa":{"oab":{"oabc":2.5678}}},
+    "ooos":{"oa":{"oab":{"oabc":"ooos string 2"}}},
+    "oooa":{"oa":{"oab":{"oabc":[{"rowId":2}, {"rowValue1":2, "rowValue2":2}]}}}
+}
+

http://git-wip-us.apache.org/repos/asf/drill/blob/1ceddff6/exec/java-exec/src/test/resources/join/complex_2.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/join/complex_2.json b/exec/java-exec/src/test/resources/join/complex_2.json
new file mode 100644
index 0000000..b46f9a0
--- /dev/null
+++ b/exec/java-exec/src/test/resources/join/complex_2.json
@@ -0,0 +1,19 @@
+{"id":1,
+    "gbyi":0,
+    "gbyt":"soa",
+    "fl":1.6789,
+    "nul":"not null",
+    "bool":false,
+    "str":"This is row 1",
+    "sia":[1, 11, 101, 1001],
+    "sfa":[0.0, 1.01, 10.222, 10.0006789],
+    "sba":[-1, -9.8766, null, true, "text row 1"],
+    "soa":[{"in":1},{"in":1,"fl":1.12345}, {"in":1, "fl":10.12345, "nul":"not null"}, {"in":1, "fl":10.6789, "nul":"not null", "bool":true, "str":"here is a string at row 1"}],
+    "ooa":[{"in":1}, {"fl":{"f1":1.6789, "f2":54331.0}, "in":1}, {"a":{"aa":{"aaa":"aaa 1"}}, "b":{"bb":{"bbb":"bbb 1"}, "c":{"cc":"ccc 1"}}}],
+    "aaa":[[["aa0 1"], ["ab0 1"]], [["ba0 1"], ["bb0 1"]],[["ca0 1", "ca1 1"],["cb0 1", "cb1 1", "cb2 1"]]],
+    "saa":[-1, [-10, -9.3211], [1, [10.12345, "not null"], [1, 1.6789, "not null", true], [-1, 6779.0, "not null", false, "this is a short string 1"]]],
+    "oooi":{"oa":{"oab":{"oabc":1}}},
+    "ooof":{"oa":{"oab":{"oabc":1.5678}}},
+    "ooos":{"oa":{"oab":{"oabc":"ooos string 1"}}},
+    "oooa":{"oa":{"oab":{"oabc":[{"rowId":1}, {"rowValue1":1, "rowValue2":1}]}}}
+}