drill-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j..@apache.org
Subject [3/3] drill git commit: DRILL-2053: Fix incorrect query result when join CTE, by making Project operator use case-insensitive matching for columns in input data stream.
Date Thu, 09 Jul 2015 05:48:01 GMT
DRILL-2053: Fix incorrect query result when join CTE, by making Project operator use case-insensitive
matching for columns in input data stream.


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

Branch: refs/heads/master
Commit: 72f946964bb3a81253d2f9d484de45ff958724c9
Parents: f4bb535
Author: Jinfeng Ni <jni@apache.org>
Authored: Tue Jul 7 15:09:45 2015 -0700
Committer: Jinfeng Ni <jni@apache.org>
Committed: Wed Jul 8 20:38:16 2015 -0700

----------------------------------------------------------------------
 .../impl/project/ProjectRecordBatch.java         | 10 +++++-----
 .../java/org/apache/drill/TestStarQueries.java   | 19 +++++++++++++++++++
 2 files changed, 24 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/72f94696/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/project/ProjectRecordBatch.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/project/ProjectRecordBatch.java
b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/project/ProjectRecordBatch.java
index 946d117..b6e5dc0 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/project/ProjectRecordBatch.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/project/ProjectRecordBatch.java
@@ -597,7 +597,7 @@ public class ProjectRecordBatch extends AbstractSingleRecordBatch<Project>
{
       }
     }
     // input and output are the same
-    else if (expr.getPath().equals(ref.getPath()) && (!exprContainsStar || exprIsFirstWildcard))
{
+    else if (expr.getPath().equalsIgnoreCase(ref.getPath()) && (!exprContainsStar
|| exprIsFirstWildcard)) {
       if (exprContainsStar && exprHasPrefix) {
         assert exprPrefix != null;
 
@@ -618,7 +618,7 @@ public class ProjectRecordBatch extends AbstractSingleRecordBatch<Project>
{
             continue;
           }
           final String namePrefix = nameComponents[0];
-          if (exprPrefix.equals(namePrefix)) {
+          if (exprPrefix.equalsIgnoreCase(namePrefix)) {
             final String newName = incomingName;
             if (!result.outputMap.containsKey(newName)) {
               result.outputNames.set(k, newName);
@@ -684,12 +684,12 @@ public class ProjectRecordBatch extends AbstractSingleRecordBatch<Project>
{
         }
         final String namePrefix = components[0];
         final String nameSuffix = components[1];
-        if (exprPrefix.equals(namePrefix)) {
+        if (exprPrefix.equalsIgnoreCase(namePrefix)) {  // // case insensitive matching of
prefix.
           if (refContainsStar) {
             // remove the prefix from the incoming column names
             final String newName = getUniqueName(nameSuffix, result);  // for top level we
need to make names unique
             result.outputNames.set(k, newName);
-          } else if (exprSuffix.equals(nameSuffix)) {
+          } else if (exprSuffix.equalsIgnoreCase(nameSuffix)) { // case insensitive matching
of field name.
             // example: ref: $f1, expr: T0<PREFIX><column_name>
             final String newName = ref.getPath();
             result.outputNames.set(k, newName);
@@ -714,7 +714,7 @@ public class ProjectRecordBatch extends AbstractSingleRecordBatch<Project>
{
       for (final VectorWrapper<?> wrapper : incoming) {
         final ValueVector vvIn = wrapper.getValueVector();
         final String incomingName = vvIn.getField().getPath().getRootSegment().getPath();
-        if (expr.getPath().equals(incomingName)) {
+        if (expr.getPath().equalsIgnoreCase(incomingName)) {  // case insensitive matching
of field name.
           final String newName = ref.getPath();
           addToResultMaps(newName, result, true);
         }

http://git-wip-us.apache.org/repos/asf/drill/blob/72f94696/exec/java-exec/src/test/java/org/apache/drill/TestStarQueries.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestStarQueries.java b/exec/java-exec/src/test/java/org/apache/drill/TestStarQueries.java
index d9ec965..b9dcacd 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/TestStarQueries.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestStarQueries.java
@@ -23,6 +23,8 @@ import org.apache.drill.common.util.FileUtils;
 import org.apache.drill.common.util.TestTools;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
+
 public class TestStarQueries extends BaseTestQuery{
   static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(TestStarQueries.class);
   static final String WORKING_PATH = TestTools.getWorkingPath();
@@ -476,4 +478,21 @@ public class TestStarQueries extends BaseTestQuery{
 
   }
 
+  @Test   // DRILL-2053 : column name is case-insensitive when join a CTE with a regluar
table.
+  public void testCaseSenJoinCTEWithRegTab() throws Exception {
+    final String query1 = "with a as ( select * from cp.`tpch/nation.parquet` ) select *
from a, cp.`tpch/region.parquet` b where a.N_REGIONKEY = b.R_REGIONKEY";
+
+    int actualRecordCount = testSql(query1);
+    int expectedRecordCount = 25;
+    assertEquals(String.format("Received unexpected number of rows in output for query:\n%s\n
expected=%d, received=%s",
+        query1, expectedRecordCount, actualRecordCount), expectedRecordCount, actualRecordCount);
+
+    final String query2 = "with a as ( select * from cp.`tpch/nation.parquet` ) select *
from a, cp.`tpch/region.parquet` b where a.n_regionkey = b.r_regionkey";
+
+    actualRecordCount = testSql(query2);
+    expectedRecordCount = 25;
+    assertEquals(String.format("Received unexpected number of rows in output for query:\n%s\n
expected=%d, received=%s",
+        query2, expectedRecordCount, actualRecordCount), expectedRecordCount, actualRecordCount);
+  }
+
 }


Mime
View raw message