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++;