This is an automated email from the ASF dual-hosted git repository.

jackylk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/carbondata.git


The following commit(s) were added to refs/heads/master by this push:
     new 05f02bd  [CARBONDATA-3342] Fix the IllegalArgumentException when using 
filter and result is null.
05f02bd is described below

commit 05f02bde570ec94ee977a6732327773530cc5253
Author: xubo245 <xub...@huawei.com>
AuthorDate: Wed Mar 20 22:54:20 2019 +0800

    [CARBONDATA-3342] Fix the IllegalArgumentException when using filter and 
result is null.
    
    This PR fixs the IllegalArgumentException when using filter and result is 
null.
    
    This closes #3273
---
 .../hadoop/util/CarbonVectorizedRecordReader.java  |  3 ++
 .../apache/carbondata/sdk/file/CarbonReader.java   | 22 +++++++++++----
 .../apache/carbondata/sdk/file/utils/SDKUtil.java  |  4 +--
 .../carbondata/sdk/file/CarbonReaderTest.java      | 32 ++++++++++++++++++++++
 4 files changed, 53 insertions(+), 8 deletions(-)

diff --git 
a/hadoop/src/main/java/org/apache/carbondata/hadoop/util/CarbonVectorizedRecordReader.java
 
b/hadoop/src/main/java/org/apache/carbondata/hadoop/util/CarbonVectorizedRecordReader.java
index 132ea6a..54f4bf7 100644
--- 
a/hadoop/src/main/java/org/apache/carbondata/hadoop/util/CarbonVectorizedRecordReader.java
+++ 
b/hadoop/src/main/java/org/apache/carbondata/hadoop/util/CarbonVectorizedRecordReader.java
@@ -135,6 +135,9 @@ public class CarbonVectorizedRecordReader extends 
AbstractRecordReader<Object> {
     if (iterator.hasNext()) {
       iterator.processNextBatch(carbonColumnarBatch);
       numBatched = carbonColumnarBatch.getActualSize();
+      if (numBatched == 0) {
+        return nextBatch();
+      }
       batchIdx = 0;
       return true;
     }
diff --git 
a/sdk/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonReader.java 
b/sdk/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonReader.java
index dcbbc9b..204c36d 100644
--- a/sdk/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonReader.java
+++ b/sdk/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonReader.java
@@ -57,19 +57,23 @@ public class CarbonReader<T> {
    * Call {@link #builder(String)} to construct an instance
    */
   CarbonReader(List<RecordReader<Void, T>> readers) {
-    if (readers.size() == 0) {
-      throw new IllegalArgumentException("no reader");
-    }
     this.initialise = true;
     this.readers = readers;
     this.index = 0;
-    this.currentReader = readers.get(0);
+    if (0 == readers.size()) {
+      this.currentReader = null;
+    } else {
+      this.currentReader = readers.get(0);
+    }
   }
 
   /**
    * Return true if has next row
    */
   public boolean hasNext() throws IOException, InterruptedException {
+    if (0 == readers.size() || currentReader == null) {
+      return false;
+    }
     validateReader();
     if (currentReader.nextKeyValue()) {
       return true;
@@ -87,9 +91,13 @@ public class CarbonReader<T> {
         readers.set(index, null);
         index++;
         currentReader = readers.get(index);
-        return currentReader.nextKeyValue();
+        boolean hasNext = currentReader.nextKeyValue();
+        if (hasNext) {
+          return true;
+        }
       }
     }
+    return false;
   }
 
   /**
@@ -242,7 +250,9 @@ public class CarbonReader<T> {
     CarbonProperties.getInstance()
         .addProperty(CarbonCommonConstants.DETAIL_QUERY_BATCH_SIZE,
             
String.valueOf(CarbonCommonConstants.DETAIL_QUERY_BATCH_SIZE_DEFAULT));
-    this.currentReader.close();
+    if (null != this.currentReader) {
+      this.currentReader.close();
+    }
     this.initialise = false;
   }
 
diff --git 
a/sdk/sdk/src/main/java/org/apache/carbondata/sdk/file/utils/SDKUtil.java 
b/sdk/sdk/src/main/java/org/apache/carbondata/sdk/file/utils/SDKUtil.java
index 7f9fe88..0362374 100644
--- a/sdk/sdk/src/main/java/org/apache/carbondata/sdk/file/utils/SDKUtil.java
+++ b/sdk/sdk/src/main/java/org/apache/carbondata/sdk/file/utils/SDKUtil.java
@@ -26,8 +26,8 @@ import org.apache.carbondata.core.datastore.impl.FileFactory;
 import org.apache.hadoop.conf.Configuration;
 
 public class SDKUtil {
-  public static ArrayList listFiles(String sourceImageFolder, final String 
suf) {
-    return listFiles(sourceImageFolder, suf, new Configuration(true));
+  public static ArrayList listFiles(String sourceFolder, final String suf) {
+    return listFiles(sourceFolder, suf, new Configuration(true));
   }
 
   public static ArrayList listFiles(String sourceImageFolder,
diff --git 
a/sdk/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java 
b/sdk/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java
index 15032c2..b108b47 100644
--- a/sdk/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java
+++ b/sdk/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java
@@ -2528,4 +2528,36 @@ public class CarbonReaderTest extends TestCase {
     FileUtils.deleteDirectory(new File(path));
   }
 
+  @Test
+  public void testReadWithFilterNonResult() throws IOException, 
InterruptedException {
+    String path = "./testWriteFiles";
+    FileUtils.deleteDirectory(new File(path));
+    Field[] fields = new Field[2];
+    fields[0] = new Field("name", DataTypes.STRING);
+    fields[1] = new Field("age", DataTypes.INT);
+
+    TestUtil.writeFilesAndVerify(200, new Schema(fields), path);
+
+    ColumnExpression columnExpression = new ColumnExpression("age", 
DataTypes.INT);
+
+    EqualToExpression equalToExpression = new 
EqualToExpression(columnExpression,
+      new LiteralExpression("-11", DataTypes.INT));
+    CarbonReader reader = CarbonReader
+      .builder(path, "_temp")
+      .projection(new String[]{"name", "age"})
+      .filter(equalToExpression)
+      .build();
+
+    int i = 0;
+    while (reader.hasNext()) {
+      Assert.assertTrue(false);
+      i++;
+    }
+    Assert.assertEquals(i, 0);
+
+    reader.close();
+
+    FileUtils.deleteDirectory(new File(path));
+  }
+
 }

Reply via email to