From 6a165ad08d015b4df78a484e2657856aace5fae0 Mon Sep 17 00:00:00 2001 From: Indhumathi27 Date: Mon, 17 Sep 2018 12:32:49 +0530 Subject: [PATCH] [CARBONDATA-2940]Fix BufferUnderFlowException for ComplexPushDown --- .../core/datastore/blocklet/BlockletEncodedColumnPage.java | 2 +- .../scan/collector/impl/DictionaryBasedResultCollector.java | 3 +++ .../spark/testsuite/complexType/TestComplexDataType.scala | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/carbondata/core/datastore/blocklet/BlockletEncodedColumnPage.java b/core/src/main/java/org/apache/carbondata/core/datastore/blocklet/BlockletEncodedColumnPage.java index 135b1e24357..da4e211d0e7 100644 --- a/core/src/main/java/org/apache/carbondata/core/datastore/blocklet/BlockletEncodedColumnPage.java +++ b/core/src/main/java/org/apache/carbondata/core/datastore/blocklet/BlockletEncodedColumnPage.java @@ -213,7 +213,7 @@ private void initiateFallBack(EncodedColumnPage encodedColumnPage, int pageIndex new DecoderBasedFallbackEncoder(encodedColumnPage, pageIndex, localDictionaryGenerator))); } else { fallbackFutureQueue.add(fallbackExecutorService.submit( - new ActualDataBasedFallbackEncoder(encodedColumnPage, encodedColumnPageList.size()))); + new ActualDataBasedFallbackEncoder(encodedColumnPage, pageIndex))); } } } diff --git a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/DictionaryBasedResultCollector.java b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/DictionaryBasedResultCollector.java index 1faf2fd6a46..69b142f3e1d 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/DictionaryBasedResultCollector.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/collector/impl/DictionaryBasedResultCollector.java @@ -231,6 +231,9 @@ private void fillComplexColumnDataBufferForThisRow() { childColumnByteBuffer .put(queryDimensions[i].getDimension(), buffer); mergedComplexDimensionDataMap.put(complexParentOrdinal, childColumnByteBuffer); + } else if (!queryDimensions[i].getDimension().isComplex()) { + // If Dimension is not a Complex Column, then increment index for noDictionaryComplexColumn + noDictionaryComplexColumnIndex++; } } } diff --git a/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/complexType/TestComplexDataType.scala b/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/complexType/TestComplexDataType.scala index 85273807b2f..220451bfb97 100644 --- a/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/complexType/TestComplexDataType.scala +++ b/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/complexType/TestComplexDataType.scala @@ -1015,6 +1015,9 @@ class TestComplexDataType extends QueryTest with BeforeAndAfterAll { "create table table1 (id int, name string, structField struct) stored by 'carbondata'") sql("insert into table1 values(null,'aaa','23$bb')") checkAnswer(sql("select * from table1"),Seq(Row(null,"aaa", Row(23,"bb")))) + checkAnswer(sql("select id,name,structField.intval,structField.stringval from table1"),Seq(Row(null,"aaa",23,"bb"))) + checkAnswer(sql("select id,name,structField.intval,structField.stringval,name from table1"),Seq(Row(null,"aaa",23,"bb","aaa"))) + checkAnswer(sql("select id,name,structField.intval,name,structField.stringval from table1"),Seq(Row(null,"aaa",23,"aaa","bb"))) } }