You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@carbondata.apache.org by ja...@apache.org on 2020/04/30 10:01:34 UTC
[carbondata] branch master updated: [CARBONDATA-3342] Fix the
IllegalArgumentException when using filter and result is null.
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 <xu...@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));
+ }
+
}