You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by sm...@apache.org on 2015/12/02 23:48:19 UTC

drill git commit: DRILL-4145: Handle empty final field in Text reader correctly

Repository: drill
Updated Branches:
  refs/heads/master 36bd63786 -> 8f56250ae


DRILL-4145: Handle empty final field in Text reader correctly


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

Branch: refs/heads/master
Commit: 8f56250aeb29d5d21bcdc6c727cec89607150224
Parents: 36bd637
Author: Steven Phillips <sm...@apache.org>
Authored: Wed Dec 2 02:09:20 2015 -0800
Committer: Steven Phillips <sm...@apache.org>
Committed: Wed Dec 2 02:13:23 2015 -0800

----------------------------------------------------------------------
 .../store/easy/text/compliant/TextReader.java   |  1 +
 .../drill/exec/store/text/TestCsvHeader.java    | 27 ++++++++++++++++++++
 2 files changed, 28 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/8f56250a/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/text/compliant/TextReader.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/text/compliant/TextReader.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/text/compliant/TextReader.java
index 5d41254..82427bb 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/text/compliant/TextReader.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/text/compliant/TextReader.java
@@ -143,6 +143,7 @@ final class TextReader {
         if (ch != newLine) {
           ch = input.nextChar();
           if (ch == newLine) {
+            output.startField(fieldsWritten++);
             output.endEmptyField();
             break;
           }

http://git-wip-us.apache.org/repos/asf/drill/blob/8f56250a/exec/java-exec/src/test/java/org/apache/drill/exec/store/text/TestCsvHeader.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/store/text/TestCsvHeader.java b/exec/java-exec/src/test/java/org/apache/drill/exec/store/text/TestCsvHeader.java
index 92aa02b..0192ab8 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/store/text/TestCsvHeader.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/store/text/TestCsvHeader.java
@@ -18,10 +18,14 @@
 package org.apache.drill.exec.store.text;
 
 import org.apache.drill.BaseTestQuery;
+import org.apache.drill.TestBuilder;
 import org.apache.drill.common.util.FileUtils;
 import org.apache.drill.exec.exception.SchemaChangeException;
 import org.apache.drill.exec.rpc.user.QueryDataBatch;
 
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.util.List;
 
 import org.junit.Before;
@@ -162,6 +166,29 @@ public class TestCsvHeader extends BaseTestQuery{
     validateResults (batches, expectedOutput);
   }
 
+  @Test
+  public void testEmptyFinalColumn() throws Exception {
+    String dfs_temp = getDfsTestTmpSchemaLocation();
+    File table_dir = new File(dfs_temp, "emptyFinalColumn");
+    table_dir.mkdir();
+    BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(new File(table_dir, "a.csvh")));
+    os.write("field1,field2\n".getBytes());
+    for (int i = 0; i < 10000; i++) {
+      os.write("a,\n".getBytes());
+    }
+    os.flush();
+    os.close();
+    String query = "select * from dfs_test.tmp.emptyFinalColumn";
+      TestBuilder builder = testBuilder()
+              .sqlQuery(query)
+              .ordered()
+              .baselineColumns("field1", "field2");
+      for (int i = 0; i < 10000; i++) {
+        builder.baselineValues("a", "");
+      }
+      builder.go();
+  }
+
   private void validateResults (List<QueryDataBatch> batches, String expectedOutput) throws SchemaChangeException {
     String actualOutput = getResultString(batches, OUTPUT_DELIMITER);
     //for your and machine's eyes