You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@carbondata.apache.org by ra...@apache.org on 2018/11/30 16:34:17 UTC

[24/26] carbondata git commit: [HOTFIX] Fix ArrayOutOfBound exception when duplicate measure in projection column

[HOTFIX] Fix ArrayOutOfBound exception when duplicate measure in projection column

problem: ArrayOutOfBound exception when duplicate measure in the projection column

cause: In query executor, when the reusable buffer is formed. It was considering
only the unique values. Need to consider all the projections.

solution: consider all the projections, while forming a reusable buffer.

This closes #2964


Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo
Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/3ebb6e56
Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/3ebb6e56
Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/3ebb6e56

Branch: refs/heads/branch-1.5
Commit: 3ebb6e56763985c830299ea00918949a50bcedb5
Parents: d28f87c
Author: ajantha-bhat <aj...@gmail.com>
Authored: Thu Nov 29 17:12:56 2018 +0530
Committer: ravipesala <ra...@gmail.com>
Committed: Fri Nov 30 21:57:21 2018 +0530

----------------------------------------------------------------------
 .../scan/executor/impl/AbstractQueryExecutor.java     | 14 ++++++--------
 .../apache/carbondata/sdk/file/CarbonReaderTest.java  |  4 ++--
 2 files changed, 8 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/carbondata/blob/3ebb6e56/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/AbstractQueryExecutor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/AbstractQueryExecutor.java b/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/AbstractQueryExecutor.java
index 7c5287d..34de4b7 100644
--- a/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/AbstractQueryExecutor.java
+++ b/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/AbstractQueryExecutor.java
@@ -549,12 +549,9 @@ public abstract class AbstractQueryExecutor<E> implements QueryExecutor<E> {
     int[] dimensionChunkIndexes = QueryUtil.getDimensionChunkIndexes(projectDimensions,
         segmentProperties.getDimensionOrdinalToChunkMapping(),
         currentBlockFilterDimensions, allProjectionListDimensionIdexes);
-    int reusableBufferSize = segmentProperties.getDimensionOrdinalToChunkMapping().size()
-        < projectDimensions.size() ?
-        projectDimensions.size() :
-        segmentProperties.getDimensionOrdinalToChunkMapping().size();
-    ReusableDataBuffer[] dimensionBuffer =
-        new ReusableDataBuffer[reusableBufferSize];
+    int reusableBufferSize = Math.max(segmentProperties.getDimensionOrdinalToChunkMapping().size(),
+        projectDimensions.size());
+    ReusableDataBuffer[] dimensionBuffer = new ReusableDataBuffer[reusableBufferSize];
     for (int i = 0; i < dimensionBuffer.length; i++) {
       dimensionBuffer[i] = new ReusableDataBuffer();
     }
@@ -583,8 +580,9 @@ public abstract class AbstractQueryExecutor<E> implements QueryExecutor<E> {
         currentBlockQueryMeasures, expressionMeasures,
         segmentProperties.getMeasuresOrdinalToChunkMapping(), filterMeasures,
         allProjectionListMeasureIndexes);
-    ReusableDataBuffer[] measureBuffer =
-        new ReusableDataBuffer[segmentProperties.getMeasuresOrdinalToChunkMapping().size()];
+    reusableBufferSize = Math.max(segmentProperties.getMeasuresOrdinalToChunkMapping().size(),
+        allProjectionListMeasureIndexes.size());
+    ReusableDataBuffer[] measureBuffer = new ReusableDataBuffer[reusableBufferSize];
     for (int i = 0; i < measureBuffer.length; i++) {
       measureBuffer[i] = new ReusableDataBuffer();
     }

http://git-wip-us.apache.org/repos/asf/carbondata/blob/3ebb6e56/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java
----------------------------------------------------------------------
diff --git a/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java b/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java
index 9add0b9..4e11233 100644
--- a/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java
+++ b/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java
@@ -575,7 +575,7 @@ public class CarbonReaderTest extends TestCase {
 
     CarbonReader reader = CarbonReader
         .builder(path, "_temp")
-        .projection(new String[]{"name", "name", "age", "name"})
+        .projection(new String[]{"name", "age", "age", "name"})
         .build();
 
     // expected output after sorting
@@ -591,7 +591,7 @@ public class CarbonReaderTest extends TestCase {
       Object[] row = (Object[]) reader.readNextRow();
       // Default sort column is applied for dimensions. So, need  to validate accordingly
       Assert.assertEquals(name[i], row[0]);
-      Assert.assertEquals(name[i], row[1]);
+      Assert.assertEquals(age[i], row[1]);
       Assert.assertEquals(age[i], row[2]);
       Assert.assertEquals(name[i], row[3]);
       i++;