http://git-wip-us.apache.org/repos/asf/carbondata/blob/4749ca29/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelFilterExecuterImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelFilterExecuterImpl.java b/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelFilterExecuterImpl.java index 89489a2..2bbe491 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelFilterExecuterImpl.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelFilterExecuterImpl.java @@ -34,8 +34,8 @@ import org.apache.carbondata.common.logging.LogServiceFactory; import org.apache.carbondata.core.cache.dictionary.Dictionary; import org.apache.carbondata.core.constants.CarbonCommonConstants; import org.apache.carbondata.core.datastore.block.SegmentProperties; -import org.apache.carbondata.core.datastore.chunk.DimensionColumnDataChunk; -import org.apache.carbondata.core.datastore.chunk.impl.VariableLengthDimensionDataChunk; +import org.apache.carbondata.core.datastore.chunk.DimensionColumnPage; +import org.apache.carbondata.core.datastore.chunk.impl.VariableLengthDimensionColumnPage; import org.apache.carbondata.core.datastore.page.ColumnPage; import org.apache.carbondata.core.keygenerator.KeyGenException; import org.apache.carbondata.core.keygenerator.directdictionary.DirectDictionaryGenerator; @@ -58,7 +58,7 @@ import org.apache.carbondata.core.scan.filter.intf.RowImpl; import org.apache.carbondata.core.scan.filter.intf.RowIntf; import org.apache.carbondata.core.scan.filter.resolver.resolverinfo.DimColumnResolvedFilterInfo; import org.apache.carbondata.core.scan.filter.resolver.resolverinfo.MeasureColumnResolvedFilterInfo; -import org.apache.carbondata.core.scan.processor.BlocksChunkHolder; +import org.apache.carbondata.core.scan.processor.RawBlockletColumnChunks; import org.apache.carbondata.core.util.BitSetGroup; import org.apache.carbondata.core.util.CarbonUtil; import org.apache.carbondata.core.util.DataTypeUtil; @@ -67,20 +67,20 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { private static final LogService LOGGER = LogServiceFactory.getLogService(RowLevelFilterExecuterImpl.class.getName()); - protected List<DimColumnResolvedFilterInfo> dimColEvaluatorInfoList; - protected List<MeasureColumnResolvedFilterInfo> msrColEvalutorInfoList; + List<DimColumnResolvedFilterInfo> dimColEvaluatorInfoList; + List<MeasureColumnResolvedFilterInfo> msrColEvalutorInfoList; protected Expression exp; protected AbsoluteTableIdentifier tableIdentifier; protected SegmentProperties segmentProperties; /** * it has index at which given dimension is stored in file */ - protected int[] dimensionBlocksIndex; + int[] dimensionChunkIndex; /** * it has index at which given measure is stored in file */ - protected int[] measureBlocksIndex; + int[] measureChunkIndex; private Map<Integer, GenericQueryType> complexDimensionInfoMap; @@ -88,18 +88,18 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { * flag to check whether the filter dimension is present in current block list of dimensions. * Applicable for restructure scenarios */ - protected boolean[] isDimensionPresentInCurrentBlock; + boolean[] isDimensionPresentInCurrentBlock; /** * flag to check whether the filter measure is present in current block list of measures. * Applicable for restructure scenarios */ - protected boolean[] isMeasurePresentInCurrentBlock; + boolean[] isMeasurePresentInCurrentBlock; /** * is dimension column data is natural sorted */ - protected boolean isNaturalSorted; + boolean isNaturalSorted; /** * date direct dictionary generator @@ -123,10 +123,10 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { } if (this.dimColEvaluatorInfoList.size() > 0) { this.isDimensionPresentInCurrentBlock = new boolean[dimColEvaluatorInfoList.size()]; - this.dimensionBlocksIndex = new int[dimColEvaluatorInfoList.size()]; + this.dimensionChunkIndex = new int[dimColEvaluatorInfoList.size()]; } else { this.isDimensionPresentInCurrentBlock = new boolean[]{false}; - this.dimensionBlocksIndex = new int[]{0}; + this.dimensionChunkIndex = new int[]{0}; } if (null == msrColEvalutorInfoList) { this.msrColEvalutorInfoList = new ArrayList<MeasureColumnResolvedFilterInfo>(20); @@ -135,10 +135,10 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { } if (this.msrColEvalutorInfoList.size() > 0) { this.isMeasurePresentInCurrentBlock = new boolean[msrColEvalutorInfoList.size()]; - this.measureBlocksIndex = new int[msrColEvalutorInfoList.size()]; + this.measureChunkIndex = new int[msrColEvalutorInfoList.size()]; } else { this.isMeasurePresentInCurrentBlock = new boolean[]{false}; - this.measureBlocksIndex = new int[] {0}; + this.measureChunkIndex = new int[] {0}; } this.exp = exp; this.tableIdentifier = tableIdentifier; @@ -147,22 +147,22 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { DirectDictionaryKeyGeneratorFactory.getDirectDictionaryGenerator(DataTypes.DATE); this.timestampDictionaryGenerator = DirectDictionaryKeyGeneratorFactory.getDirectDictionaryGenerator(DataTypes.TIMESTAMP); - initDimensionBlockIndexes(); - initMeasureBlockIndexes(); + initDimensionChunkIndexes(); + initMeasureChunkIndexes(); } /** * This method will initialize the dimension info for the current block to be * used for filtering the data */ - private void initDimensionBlockIndexes() { + private void initDimensionChunkIndexes() { for (int i = 0; i < dimColEvaluatorInfoList.size(); i++) { // find the dimension in the current block dimensions list CarbonDimension dimensionFromCurrentBlock = segmentProperties .getDimensionFromCurrentBlock(dimColEvaluatorInfoList.get(i).getDimension()); if (null != dimensionFromCurrentBlock) { dimColEvaluatorInfoList.get(i).setColumnIndex(dimensionFromCurrentBlock.getOrdinal()); - this.dimensionBlocksIndex[i] = segmentProperties.getDimensionOrdinalToBlockMapping() + this.dimensionChunkIndex[i] = segmentProperties.getDimensionOrdinalToChunkMapping() .get(dimensionFromCurrentBlock.getOrdinal()); isDimensionPresentInCurrentBlock[i] = true; } @@ -173,14 +173,14 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { * This method will initialize the measure info for the current block to be * used for filtering the data */ - private void initMeasureBlockIndexes() { + private void initMeasureChunkIndexes() { for (int i = 0; i < msrColEvalutorInfoList.size(); i++) { // find the measure in the current block measures list CarbonMeasure measureFromCurrentBlock = segmentProperties.getMeasureFromCurrentBlock( msrColEvalutorInfoList.get(i).getCarbonColumn().getColumnId()); if (null != measureFromCurrentBlock) { msrColEvalutorInfoList.get(i).setColumnIndex(measureFromCurrentBlock.getOrdinal()); - this.measureBlocksIndex[i] = segmentProperties.getMeasuresOrdinalToBlockMapping() + this.measureChunkIndex[i] = segmentProperties.getMeasuresOrdinalToChunkMapping() .get(measureFromCurrentBlock.getOrdinal()); isMeasurePresentInCurrentBlock[i] = true; } @@ -188,9 +188,9 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { } @Override - public BitSetGroup applyFilter(BlocksChunkHolder blockChunkHolder, boolean useBitsetPipeLine) - throws FilterUnsupportedException, IOException { - readBlocks(blockChunkHolder); + public BitSetGroup applyFilter(RawBlockletColumnChunks rawBlockletColumnChunks, + boolean useBitsetPipeLine) throws FilterUnsupportedException, IOException { + readColumnChunks(rawBlockletColumnChunks); // CHECKSTYLE:ON int[] numberOfRows = null; @@ -198,31 +198,31 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { if (dimColEvaluatorInfoList.size() > 0) { if (isDimensionPresentInCurrentBlock[0]) { - pageNumbers = - blockChunkHolder.getDimensionRawDataChunk()[dimensionBlocksIndex[0]].getPagesCount(); - numberOfRows = - blockChunkHolder.getDimensionRawDataChunk()[dimensionBlocksIndex[0]].getRowCount(); + pageNumbers = rawBlockletColumnChunks.getDimensionRawColumnChunks()[dimensionChunkIndex[0]] + .getPagesCount(); + numberOfRows = rawBlockletColumnChunks.getDimensionRawColumnChunks()[dimensionChunkIndex[0]] + .getRowCount(); } else { // specific for restructure case where default values need to be filled - pageNumbers = blockChunkHolder.getDataBlock().numberOfPages(); + pageNumbers = rawBlockletColumnChunks.getDataBlock().numberOfPages(); numberOfRows = new int[pageNumbers]; for (int i = 0; i < pageNumbers; i++) { - numberOfRows[i] = blockChunkHolder.getDataBlock().getPageRowCount(i); + numberOfRows[i] = rawBlockletColumnChunks.getDataBlock().getPageRowCount(i); } } } if (msrColEvalutorInfoList.size() > 0) { if (isMeasurePresentInCurrentBlock[0]) { - pageNumbers = - blockChunkHolder.getMeasureRawDataChunk()[measureBlocksIndex[0]].getPagesCount(); - numberOfRows = - blockChunkHolder.getMeasureRawDataChunk()[measureBlocksIndex[0]].getRowCount(); + pageNumbers = rawBlockletColumnChunks.getMeasureRawColumnChunks()[measureChunkIndex[0]] + .getPagesCount(); + numberOfRows = rawBlockletColumnChunks.getMeasureRawColumnChunks()[measureChunkIndex[0]] + .getRowCount(); } else { // specific for restructure case where default values need to be filled - pageNumbers = blockChunkHolder.getDataBlock().numberOfPages(); + pageNumbers = rawBlockletColumnChunks.getDataBlock().numberOfPages(); numberOfRows = new int[pageNumbers]; for (int i = 0; i < pageNumbers; i++) { - numberOfRows[i] = blockChunkHolder.getDataBlock().getPageRowCount(i); + numberOfRows[i] = rawBlockletColumnChunks.getDataBlock().getPageRowCount(i); } } } @@ -233,10 +233,12 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { BitSet prvBitset = null; // if bitset pipe line is enabled then use rowid from previous bitset // otherwise use older flow - if (!useBitsetPipeLine || null == blockChunkHolder.getBitSetGroup() || null == bitSetGroup - .getBitSet(i) || blockChunkHolder.getBitSetGroup().getBitSet(i).isEmpty()) { + if (!useBitsetPipeLine || + null == rawBlockletColumnChunks.getBitSetGroup() || + null == bitSetGroup.getBitSet(i) || + rawBlockletColumnChunks.getBitSetGroup().getBitSet(i).isEmpty()) { for (int index = 0; index < numberOfRows[i]; index++) { - createRow(blockChunkHolder, row, i, index); + createRow(rawBlockletColumnChunks, row, i, index); Boolean rslt = false; try { rslt = exp.evaluate(row).getBoolean(); @@ -252,10 +254,10 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { } } } else { - prvBitset = blockChunkHolder.getBitSetGroup().getBitSet(i); + prvBitset = rawBlockletColumnChunks.getBitSetGroup().getBitSet(i); for (int index = prvBitset.nextSetBit(0); index >= 0; index = prvBitset.nextSetBit(index + 1)) { - createRow(blockChunkHolder, row, i, index); + createRow(rawBlockletColumnChunks, row, i, index); Boolean rslt = false; try { rslt = exp.evaluate(row).getBoolean(); @@ -290,8 +292,8 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { * @param index * @throws IOException */ - private void createRow(BlocksChunkHolder blockChunkHolder, RowIntf row, int pageIndex, int index) - throws IOException { + private void createRow(RawBlockletColumnChunks blockChunkHolder, RowIntf row, int pageIndex, + int index) throws IOException { Object[] record = new Object[dimColEvaluatorInfoList.size() + msrColEvalutorInfoList.size()]; String memberString; for (int i = 0; i < dimColEvaluatorInfoList.size(); i++) { @@ -308,14 +310,14 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { record[dimColumnEvaluatorInfo.getRowIndex()] = dimColumnEvaluatorInfo.getDimension().getDefaultValue(); } - DimensionColumnDataChunk columnDataChunk = - blockChunkHolder.getDimensionRawDataChunk()[dimensionBlocksIndex[i]] - .convertToDimColDataChunk(pageIndex); + DimensionColumnPage columnDataChunk = + blockChunkHolder.getDimensionRawColumnChunks()[dimensionChunkIndex[i]] + .decodeColumnPage(pageIndex); if (!dimColumnEvaluatorInfo.getDimension().hasEncoding(Encoding.DICTIONARY) - && columnDataChunk instanceof VariableLengthDimensionDataChunk) { + && columnDataChunk instanceof VariableLengthDimensionColumnPage) { - VariableLengthDimensionDataChunk dimensionColumnDataChunk = - (VariableLengthDimensionDataChunk) columnDataChunk; + VariableLengthDimensionColumnPage dimensionColumnDataChunk = + (VariableLengthDimensionColumnPage) columnDataChunk; byte[] memberBytes = dimensionColumnDataChunk.getChunkData(index); if (null != memberBytes) { if (Arrays.equals(CarbonCommonConstants.MEMBER_DEFAULT_VAL_ARRAY, memberBytes)) { @@ -328,8 +330,8 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { dimColumnEvaluatorInfo.getDimension().getDataType()); } } else { - int dictionaryValue = readSurrogatesFromColumnBlock(blockChunkHolder, index, pageIndex, - dimColumnEvaluatorInfo, dimensionBlocksIndex[i]); + int dictionaryValue = readSurrogatesFromColumnChunk(blockChunkHolder, index, pageIndex, + dimColumnEvaluatorInfo, dimensionChunkIndex[i]); if (dimColumnEvaluatorInfo.getDimension().hasEncoding(Encoding.DICTIONARY) && !dimColumnEvaluatorInfo.getDimension().hasEncoding(Encoding.DIRECT_DICTIONARY)) { memberString = @@ -347,11 +349,11 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { } } else { try { - GenericQueryType complexType = complexDimensionInfoMap.get(dimensionBlocksIndex[i]); + GenericQueryType complexType = complexDimensionInfoMap.get(dimensionChunkIndex[i]); ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); DataOutputStream dataOutputStream = new DataOutputStream(byteStream); complexType.parseBlocksAndReturnComplexColumnByteArray( - blockChunkHolder.getDimensionRawDataChunk(), index, pageIndex, dataOutputStream); + blockChunkHolder.getDimensionRawColumnChunks(), index, pageIndex, dataOutputStream); record[dimColumnEvaluatorInfo.getRowIndex()] = complexType .getDataBasedOnDataTypeFromSurrogates(ByteBuffer.wrap(byteStream.toByteArray())); byteStream.close(); @@ -390,8 +392,8 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { Object msrValue; ColumnPage columnPage = - blockChunkHolder.getMeasureRawDataChunk()[measureBlocksIndex[0]] - .convertToColumnPage(pageIndex); + blockChunkHolder.getMeasureRawColumnChunks()[measureChunkIndex[0]] + .decodeColumnPage(pageIndex); if (msrType == DataTypes.BOOLEAN) { msrValue = columnPage.getBoolean(index); } else if (msrType == DataTypes.SHORT) { @@ -493,10 +495,10 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { * @param dimColumnEvaluatorInfo * @return */ - private int readSurrogatesFromColumnBlock(BlocksChunkHolder blockChunkHolder, int index, int page, - DimColumnResolvedFilterInfo dimColumnEvaluatorInfo, int blockIndex) { - DimensionColumnDataChunk dataChunk = - blockChunkHolder.getDimensionRawDataChunk()[blockIndex].convertToDimColDataChunk(page); + private int readSurrogatesFromColumnChunk(RawBlockletColumnChunks blockChunkHolder, int index, + int page, DimColumnResolvedFilterInfo dimColumnEvaluatorInfo, int chunkIndex) { + DimensionColumnPage dataChunk = + blockChunkHolder.getDimensionRawColumnChunks()[chunkIndex].decodeColumnPage(page); if (dimColumnEvaluatorInfo.getDimension().isColumnar()) { byte[] rawData = dataChunk.getChunkData(index); ByteBuffer byteBuffer = ByteBuffer.allocate(CarbonCommonConstants.INT_SIZE_IN_BYTE); @@ -512,7 +514,7 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { * @param dimColumnEvaluatorInfo * @return read surrogate of given row of given column group dimension */ - private int readSurrogatesFromColumnGroupBlock(DimensionColumnDataChunk chunk, int index, + private int readSurrogatesFromColumnGroupBlock(DimensionColumnPage chunk, int index, DimColumnResolvedFilterInfo dimColumnEvaluatorInfo) { try { KeyStructureInfo keyStructureInfo = @@ -520,9 +522,9 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { byte[] colData = chunk.getChunkData(index); long[] result = keyStructureInfo.getKeyGenerator().getKeyArray(colData); int colGroupId = - QueryUtil.getColumnGroupId(segmentProperties, dimensionBlocksIndex[0]); + QueryUtil.getColumnGroupId(segmentProperties, dimensionChunkIndex[0]); return (int) result[segmentProperties - .getColumnGroupMdKeyOrdinal(colGroupId, dimensionBlocksIndex[0])]; + .getColumnGroupMdKeyOrdinal(colGroupId, dimensionChunkIndex[0])]; } catch (KeyGenException e) { LOGGER.error(e); } @@ -530,33 +532,36 @@ public class RowLevelFilterExecuterImpl implements FilterExecuter { } - @Override public BitSet isScanRequired(byte[][] blockMaxValue, byte[][] blockMinValue) { + @Override + public BitSet isScanRequired(byte[][] blockMaxValue, byte[][] blockMinValue) { BitSet bitSet = new BitSet(1); bitSet.set(0); return bitSet; } - @Override public void readBlocks(BlocksChunkHolder blockChunkHolder) throws IOException { + @Override + public void readColumnChunks(RawBlockletColumnChunks rawBlockletColumnChunks) throws IOException { for (int i = 0; i < dimColEvaluatorInfoList.size(); i++) { DimColumnResolvedFilterInfo dimColumnEvaluatorInfo = dimColEvaluatorInfoList.get(i); if (!dimColumnEvaluatorInfo.getDimension().getDataType().isComplexType()) { - if (null == blockChunkHolder.getDimensionRawDataChunk()[dimensionBlocksIndex[i]]) { - blockChunkHolder.getDimensionRawDataChunk()[dimensionBlocksIndex[i]] = - blockChunkHolder.getDataBlock() - .getDimensionChunk(blockChunkHolder.getFileReader(), dimensionBlocksIndex[i]); + if (null == rawBlockletColumnChunks.getDimensionRawColumnChunks()[dimensionChunkIndex[i]]) + { + rawBlockletColumnChunks.getDimensionRawColumnChunks()[dimensionChunkIndex[i]] = + rawBlockletColumnChunks.getDataBlock().readDimensionChunk( + rawBlockletColumnChunks.getFileReader(), dimensionChunkIndex[i]); } } else { - GenericQueryType complexType = complexDimensionInfoMap.get(dimensionBlocksIndex[i]); - complexType.fillRequiredBlockData(blockChunkHolder); + GenericQueryType complexType = complexDimensionInfoMap.get(dimensionChunkIndex[i]); + complexType.fillRequiredBlockData(rawBlockletColumnChunks); } } if (null != msrColEvalutorInfoList) { for (MeasureColumnResolvedFilterInfo msrColumnEvalutorInfo : msrColEvalutorInfoList) { - if (null == blockChunkHolder.getMeasureRawDataChunk()[measureBlocksIndex[0]]) { - blockChunkHolder.getMeasureRawDataChunk()[measureBlocksIndex[0]] = - blockChunkHolder.getDataBlock() - .getMeasureChunk(blockChunkHolder.getFileReader(), measureBlocksIndex[0]); + if (null == rawBlockletColumnChunks.getMeasureRawColumnChunks()[measureChunkIndex[0]]) { + rawBlockletColumnChunks.getMeasureRawColumnChunks()[measureChunkIndex[0]] = + rawBlockletColumnChunks.getDataBlock() + .readMeasureChunk(rawBlockletColumnChunks.getFileReader(), measureChunkIndex[0]); } } }
http://git-wip-us.apache.org/repos/asf/carbondata/blob/4749ca29/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeGrtThanFiterExecuterImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeGrtThanFiterExecuterImpl.java b/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeGrtThanFiterExecuterImpl.java index 306f3fa..6baa3e4 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeGrtThanFiterExecuterImpl.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeGrtThanFiterExecuterImpl.java @@ -22,7 +22,7 @@ import java.util.List; import org.apache.carbondata.core.constants.CarbonCommonConstants; import org.apache.carbondata.core.datastore.block.SegmentProperties; -import org.apache.carbondata.core.datastore.chunk.DimensionColumnDataChunk; +import org.apache.carbondata.core.datastore.chunk.DimensionColumnPage; import org.apache.carbondata.core.datastore.chunk.impl.DimensionRawColumnChunk; import org.apache.carbondata.core.datastore.chunk.impl.MeasureRawColumnChunk; import org.apache.carbondata.core.datastore.page.ColumnPage; @@ -32,11 +32,10 @@ import org.apache.carbondata.core.metadata.encoder.Encoding; import org.apache.carbondata.core.metadata.schema.table.column.CarbonDimension; import org.apache.carbondata.core.metadata.schema.table.column.CarbonMeasure; import org.apache.carbondata.core.scan.expression.Expression; -import org.apache.carbondata.core.scan.expression.exception.FilterUnsupportedException; import org.apache.carbondata.core.scan.filter.FilterUtil; import org.apache.carbondata.core.scan.filter.resolver.resolverinfo.DimColumnResolvedFilterInfo; import org.apache.carbondata.core.scan.filter.resolver.resolverinfo.MeasureColumnResolvedFilterInfo; -import org.apache.carbondata.core.scan.processor.BlocksChunkHolder; +import org.apache.carbondata.core.scan.processor.RawBlockletColumnChunks; import org.apache.carbondata.core.util.BitSetGroup; import org.apache.carbondata.core.util.ByteUtil; import org.apache.carbondata.core.util.CarbonUtil; @@ -55,12 +54,11 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute */ private boolean isDefaultValuePresentInFilter; private int lastDimensionColOrdinal = 0; - public RowLevelRangeGrtThanFiterExecuterImpl( - List<DimColumnResolvedFilterInfo> dimColEvaluatorInfoList, + + RowLevelRangeGrtThanFiterExecuterImpl(List<DimColumnResolvedFilterInfo> dimColEvaluatorInfoList, List<MeasureColumnResolvedFilterInfo> msrColEvalutorInfoList, Expression exp, AbsoluteTableIdentifier tableIdentifier, byte[][] filterRangeValues, - Object[] msrFilterRangeValues, - SegmentProperties segmentProperties) { + Object[] msrFilterRangeValues, SegmentProperties segmentProperties) { super(dimColEvaluatorInfoList, msrColEvalutorInfoList, exp, tableIdentifier, segmentProperties, null); this.filterRangeValues = filterRangeValues; @@ -110,17 +108,18 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute } } - @Override public BitSet isScanRequired(byte[][] blockMaxValue, byte[][] blockMinValue) { + @Override + public BitSet isScanRequired(byte[][] blockMaxValue, byte[][] blockMinValue) { BitSet bitSet = new BitSet(1); boolean isScanRequired = false; byte[] maxValue = null; if (isMeasurePresentInCurrentBlock[0] || isDimensionPresentInCurrentBlock[0]) { if (isMeasurePresentInCurrentBlock[0]) { - maxValue = blockMaxValue[measureBlocksIndex[0] + lastDimensionColOrdinal]; + maxValue = blockMaxValue[measureChunkIndex[0] + lastDimensionColOrdinal]; isScanRequired = isScanRequired(maxValue, msrFilterRangeValues, msrColEvalutorInfoList.get(0).getType()); } else { - maxValue = blockMaxValue[dimensionBlocksIndex[0]]; + maxValue = blockMaxValue[dimensionChunkIndex[0]]; isScanRequired = isScanRequired(maxValue, filterRangeValues); } } else { @@ -167,24 +166,25 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute } @Override - public BitSetGroup applyFilter(BlocksChunkHolder blockChunkHolder, boolean useBitsetPipeLine) - throws FilterUnsupportedException, IOException { + public BitSetGroup applyFilter(RawBlockletColumnChunks rawBlockletColumnChunks, + boolean useBitsetPipeLine) throws IOException { // select all rows if dimension does not exists in the current block if (!isDimensionPresentInCurrentBlock[0] && !isMeasurePresentInCurrentBlock[0]) { - int numberOfRows = blockChunkHolder.getDataBlock().nodeSize(); + int numberOfRows = rawBlockletColumnChunks.getDataBlock().numRows(); return FilterUtil - .createBitSetGroupWithDefaultValue(blockChunkHolder.getDataBlock().numberOfPages(), + .createBitSetGroupWithDefaultValue(rawBlockletColumnChunks.getDataBlock().numberOfPages(), numberOfRows, true); } if (isDimensionPresentInCurrentBlock[0]) { - int blockIndex = - segmentProperties.getDimensionOrdinalToBlockMapping().get(dimensionBlocksIndex[0]); - if (null == blockChunkHolder.getDimensionRawDataChunk()[blockIndex]) { - blockChunkHolder.getDimensionRawDataChunk()[blockIndex] = blockChunkHolder.getDataBlock() - .getDimensionChunk(blockChunkHolder.getFileReader(), blockIndex); + int chunkIndex = + segmentProperties.getDimensionOrdinalToChunkMapping().get(dimensionChunkIndex[0]); + if (null == rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex]) { + rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex] = + rawBlockletColumnChunks.getDataBlock().readDimensionChunk( + rawBlockletColumnChunks.getFileReader(), chunkIndex); } DimensionRawColumnChunk rawColumnChunk = - blockChunkHolder.getDimensionRawDataChunk()[blockIndex]; + rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex]; BitSetGroup bitSetGroup = new BitSetGroup(rawColumnChunk.getPagesCount()); for (int i = 0; i < rawColumnChunk.getPagesCount(); i++) { if (rawColumnChunk.getMaxValues() != null) { @@ -196,26 +196,28 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute bitSet.flip(0, rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } else { - BitSet bitSet = getFilteredIndexes(rawColumnChunk.convertToDimColDataChunk(i), + BitSet bitSet = getFilteredIndexes(rawColumnChunk.decodeColumnPage(i), rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } } } else { - BitSet bitSet = getFilteredIndexes(rawColumnChunk.convertToDimColDataChunk(i), + BitSet bitSet = getFilteredIndexes(rawColumnChunk.decodeColumnPage(i), rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } } return bitSetGroup; } else if (isMeasurePresentInCurrentBlock[0]) { - int blockIndex = - segmentProperties.getMeasuresOrdinalToBlockMapping().get(measureBlocksIndex[0]); - if (null == blockChunkHolder.getMeasureRawDataChunk()[blockIndex]) { - blockChunkHolder.getMeasureRawDataChunk()[blockIndex] = blockChunkHolder.getDataBlock() - .getMeasureChunk(blockChunkHolder.getFileReader(), blockIndex); + int chunkIndex = + segmentProperties.getMeasuresOrdinalToChunkMapping().get(measureChunkIndex[0]); + if (null == rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex]) { + rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex] = + rawBlockletColumnChunks.getDataBlock().readMeasureChunk( + rawBlockletColumnChunks.getFileReader(), chunkIndex); } - MeasureRawColumnChunk rawColumnChunk = blockChunkHolder.getMeasureRawDataChunk()[blockIndex]; + MeasureRawColumnChunk rawColumnChunk = + rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex]; BitSetGroup bitSetGroup = new BitSetGroup(rawColumnChunk.getPagesCount()); for (int i = 0; i < rawColumnChunk.getPagesCount(); i++) { if (rawColumnChunk.getMaxValues() != null) { @@ -225,7 +227,7 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute .getMeasureObjectFromDataType(rawColumnChunk.getMinValues()[i], msrColEvalutorInfoList.get(0).getType())); ColumnPage columnPage = - rawColumnChunk.convertToColumnPage(i); + rawColumnChunk.decodeColumnPage(i); if (compare < 0 && columnPage.getNullBits().isEmpty()) { BitSet bitSet = new BitSet(rawColumnChunk.getRowCount()[i]); bitSet.flip(0, rawColumnChunk.getRowCount()[i]); @@ -238,7 +240,7 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute } } else { BitSet bitSet = - getFilteredIndexesForMeasures(rawColumnChunk.convertToColumnPage(i), + getFilteredIndexesForMeasures(rawColumnChunk.decodeColumnPage(i), rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } @@ -278,16 +280,16 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute return bitSet; } - private BitSet getFilteredIndexes(DimensionColumnDataChunk dimensionColumnDataChunk, + private BitSet getFilteredIndexes(DimensionColumnPage dimensionColumnPage, int numerOfRows) { BitSet bitSet = null; - if (dimensionColumnDataChunk.isExplicitSorted()) { - bitSet = setFilterdIndexToBitSetWithColumnIndex(dimensionColumnDataChunk, numerOfRows); + if (dimensionColumnPage.isExplicitSorted()) { + bitSet = setFilterdIndexToBitSetWithColumnIndex(dimensionColumnPage, numerOfRows); } else { - bitSet = setFilterdIndexToBitSet(dimensionColumnDataChunk, numerOfRows); + bitSet = setFilterdIndexToBitSet(dimensionColumnPage, numerOfRows); } - if (dimensionColumnDataChunk.isNoDicitionaryColumn()) { - FilterUtil.removeNullValues(dimensionColumnDataChunk, bitSet, + if (dimensionColumnPage.isNoDicitionaryColumn()) { + FilterUtil.removeNullValues(dimensionColumnPage, bitSet, CarbonCommonConstants.MEMBER_DEFAULT_VAL_ARRAY); } return bitSet; @@ -299,12 +301,12 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute * column is not supported by default so column index mapping will be present for * accesing the members from the block. * - * @param dimensionColumnDataChunk + * @param dimensionColumnPage * @param numerOfRows * @return BitSet. */ private BitSet setFilterdIndexToBitSetWithColumnIndex( - DimensionColumnDataChunk dimensionColumnDataChunk, int numerOfRows) { + DimensionColumnPage dimensionColumnPage, int numerOfRows) { BitSet bitSet = new BitSet(numerOfRows); int start = 0; int last = 0; @@ -312,11 +314,11 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute byte[][] filterValues = this.filterRangeValues; for (int i = 0; i < filterValues.length; i++) { start = CarbonUtil - .getFirstIndexUsingBinarySearch(dimensionColumnDataChunk, startIndex, numerOfRows - 1, + .getFirstIndexUsingBinarySearch(dimensionColumnPage, startIndex, numerOfRows - 1, filterValues[i], true); if (start >= 0) { start = CarbonUtil - .nextGreaterValueToTarget(start, dimensionColumnDataChunk, filterValues[i], + .nextGreaterValueToTarget(start, dimensionColumnPage, filterValues[i], numerOfRows); } // Logic will handle the case where the range filter member is not present in block @@ -332,7 +334,7 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute // index needs to be compared by the filter member if its > filter then from that // index the bitset will be considered for filtering process. if (ByteUtil.compare(filterValues[i], - dimensionColumnDataChunk.getChunkData(dimensionColumnDataChunk.getInvertedIndex(start))) + dimensionColumnPage.getChunkData(dimensionColumnPage.getInvertedIndex(start))) > 0) { start = start + 1; } @@ -340,7 +342,7 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute last = start; for (int j = start; j < numerOfRows; j++) { - bitSet.set(dimensionColumnDataChunk.getInvertedIndex(j)); + bitSet.set(dimensionColumnPage.getInvertedIndex(j)); last++; } startIndex = last; @@ -358,11 +360,11 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute * be called if the column is sorted default so column index * mapping will be present for accesing the members from the block. * - * @param dimensionColumnDataChunk + * @param dimensionColumnPage * @param numerOfRows * @return BitSet. */ - private BitSet setFilterdIndexToBitSet(DimensionColumnDataChunk dimensionColumnDataChunk, + private BitSet setFilterdIndexToBitSet(DimensionColumnPage dimensionColumnPage, int numerOfRows) { BitSet bitSet = new BitSet(numerOfRows); byte[][] filterValues = this.filterRangeValues; @@ -373,11 +375,11 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute int startIndex = 0; for (int k = 0; k < filterValues.length; k++) { start = CarbonUtil - .getFirstIndexUsingBinarySearch(dimensionColumnDataChunk, startIndex, + .getFirstIndexUsingBinarySearch(dimensionColumnPage, startIndex, numerOfRows - 1, filterValues[k], true); if (start >= 0) { start = CarbonUtil - .nextGreaterValueToTarget(start, dimensionColumnDataChunk, filterValues[k], + .nextGreaterValueToTarget(start, dimensionColumnPage, filterValues[k], numerOfRows); } if (start < 0) { @@ -388,7 +390,7 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute // Method will compare the tentative index value after binary search, this tentative // index needs to be compared by the filter member if its > filter then from that // index the bitset will be considered for filtering process. - if (ByteUtil.compare(filterValues[k], dimensionColumnDataChunk.getChunkData(start)) > 0) { + if (ByteUtil.compare(filterValues[k], dimensionColumnPage.getChunkData(start)) > 0) { start = start + 1; } } @@ -405,7 +407,7 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute } else { for (int k = 0; k < filterValues.length; k++) { for (int i = 0; i < numerOfRows; i++) { - if (ByteUtil.compare(dimensionColumnDataChunk.getChunkData(i), filterValues[k]) > 0) { + if (ByteUtil.compare(dimensionColumnPage.getChunkData(i), filterValues[k]) > 0) { bitSet.set(i); } } @@ -414,21 +416,24 @@ public class RowLevelRangeGrtThanFiterExecuterImpl extends RowLevelFilterExecute return bitSet; } - @Override public void readBlocks(BlocksChunkHolder blockChunkHolder) throws IOException { + @Override + public void readColumnChunks(RawBlockletColumnChunks rawBlockletColumnChunks) throws IOException { if (isDimensionPresentInCurrentBlock[0]) { if (!dimColEvaluatorInfoList.get(0).getDimension().hasEncoding(Encoding.DICTIONARY)) { - super.readBlocks(blockChunkHolder); + super.readColumnChunks(rawBlockletColumnChunks); } - int blockIndex = dimensionBlocksIndex[0]; - if (null == blockChunkHolder.getDimensionRawDataChunk()[blockIndex]) { - blockChunkHolder.getDimensionRawDataChunk()[blockIndex] = blockChunkHolder.getDataBlock() - .getDimensionChunk(blockChunkHolder.getFileReader(), blockIndex); + int chunkIndex = dimensionChunkIndex[0]; + if (null == rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex]) { + rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex] = + rawBlockletColumnChunks.getDataBlock().readDimensionChunk( + rawBlockletColumnChunks.getFileReader(), chunkIndex); } } else if (isMeasurePresentInCurrentBlock[0]) { - int blockIndex = measureBlocksIndex[0]; - if (null == blockChunkHolder.getMeasureRawDataChunk()[blockIndex]) { - blockChunkHolder.getMeasureRawDataChunk()[blockIndex] = blockChunkHolder.getDataBlock() - .getMeasureChunk(blockChunkHolder.getFileReader(), blockIndex); + int chunkIndex = measureChunkIndex[0]; + if (null == rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex]) { + rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex] = + rawBlockletColumnChunks.getDataBlock().readMeasureChunk( + rawBlockletColumnChunks.getFileReader(), chunkIndex); } } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/4749ca29/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeGrtrThanEquaToFilterExecuterImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeGrtrThanEquaToFilterExecuterImpl.java b/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeGrtrThanEquaToFilterExecuterImpl.java index db55e42..3bb24af 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeGrtrThanEquaToFilterExecuterImpl.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeGrtrThanEquaToFilterExecuterImpl.java @@ -22,7 +22,7 @@ import java.util.List; import org.apache.carbondata.core.constants.CarbonCommonConstants; import org.apache.carbondata.core.datastore.block.SegmentProperties; -import org.apache.carbondata.core.datastore.chunk.DimensionColumnDataChunk; +import org.apache.carbondata.core.datastore.chunk.DimensionColumnPage; import org.apache.carbondata.core.datastore.chunk.impl.DimensionRawColumnChunk; import org.apache.carbondata.core.datastore.chunk.impl.MeasureRawColumnChunk; import org.apache.carbondata.core.datastore.page.ColumnPage; @@ -32,11 +32,10 @@ import org.apache.carbondata.core.metadata.encoder.Encoding; import org.apache.carbondata.core.metadata.schema.table.column.CarbonDimension; import org.apache.carbondata.core.metadata.schema.table.column.CarbonMeasure; import org.apache.carbondata.core.scan.expression.Expression; -import org.apache.carbondata.core.scan.expression.exception.FilterUnsupportedException; import org.apache.carbondata.core.scan.filter.FilterUtil; import org.apache.carbondata.core.scan.filter.resolver.resolverinfo.DimColumnResolvedFilterInfo; import org.apache.carbondata.core.scan.filter.resolver.resolverinfo.MeasureColumnResolvedFilterInfo; -import org.apache.carbondata.core.scan.processor.BlocksChunkHolder; +import org.apache.carbondata.core.scan.processor.RawBlockletColumnChunks; import org.apache.carbondata.core.util.BitSetGroup; import org.apache.carbondata.core.util.ByteUtil; import org.apache.carbondata.core.util.CarbonUtil; @@ -46,7 +45,7 @@ import org.apache.carbondata.core.util.comparator.SerializableComparator; public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilterExecuterImpl { - protected byte[][] filterRangeValues; + private byte[][] filterRangeValues; private Object[] msrFilterRangeValues; private SerializableComparator comparator; /** @@ -55,7 +54,7 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte private boolean isDefaultValuePresentInFilter; private int lastDimensionColOrdinal = 0; - public RowLevelRangeGrtrThanEquaToFilterExecuterImpl( + RowLevelRangeGrtrThanEquaToFilterExecuterImpl( List<DimColumnResolvedFilterInfo> dimColEvaluatorInfoList, List<MeasureColumnResolvedFilterInfo> msrColEvalutorInfoList, Expression exp, AbsoluteTableIdentifier tableIdentifier, byte[][] filterRangeValues, @@ -115,11 +114,11 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte byte[] maxValue = null; if (isMeasurePresentInCurrentBlock[0] || isDimensionPresentInCurrentBlock[0]) { if (isMeasurePresentInCurrentBlock[0]) { - maxValue = blockMaxValue[measureBlocksIndex[0] + lastDimensionColOrdinal]; + maxValue = blockMaxValue[measureChunkIndex[0] + lastDimensionColOrdinal]; isScanRequired = isScanRequired(maxValue, msrFilterRangeValues, msrColEvalutorInfoList.get(0).getType()); } else { - maxValue = blockMaxValue[dimensionBlocksIndex[0]]; + maxValue = blockMaxValue[dimensionChunkIndex[0]]; isScanRequired = isScanRequired(maxValue, filterRangeValues); } } else { @@ -165,25 +164,26 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte } @Override - public BitSetGroup applyFilter(BlocksChunkHolder blockChunkHolder, boolean useBitsetPipeLine) - throws FilterUnsupportedException, IOException { + public BitSetGroup applyFilter(RawBlockletColumnChunks rawBlockletColumnChunks, + boolean useBitsetPipeLine) throws IOException { // select all rows if dimension does not exists in the current block if (!isDimensionPresentInCurrentBlock[0] && !isMeasurePresentInCurrentBlock[0]) { - int numberOfRows = blockChunkHolder.getDataBlock().nodeSize(); + int numberOfRows = rawBlockletColumnChunks.getDataBlock().numRows(); return FilterUtil - .createBitSetGroupWithDefaultValue(blockChunkHolder.getDataBlock().numberOfPages(), + .createBitSetGroupWithDefaultValue(rawBlockletColumnChunks.getDataBlock().numberOfPages(), numberOfRows, true); } if (isDimensionPresentInCurrentBlock[0]) { - int blockIndex = - segmentProperties.getDimensionOrdinalToBlockMapping().get(dimensionBlocksIndex[0]); - if (null == blockChunkHolder.getDimensionRawDataChunk()[blockIndex]) { - blockChunkHolder.getDimensionRawDataChunk()[blockIndex] = blockChunkHolder.getDataBlock() - .getDimensionChunk(blockChunkHolder.getFileReader(), blockIndex); + int chunkIndex = + segmentProperties.getDimensionOrdinalToChunkMapping().get(dimensionChunkIndex[0]); + if (null == rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex]) { + rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex] = + rawBlockletColumnChunks.getDataBlock().readDimensionChunk( + rawBlockletColumnChunks.getFileReader(), chunkIndex); } DimensionRawColumnChunk rawColumnChunk = - blockChunkHolder.getDimensionRawDataChunk()[blockIndex]; + rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex]; BitSetGroup bitSetGroup = new BitSetGroup(rawColumnChunk.getPagesCount()); for (int i = 0; i < rawColumnChunk.getPagesCount(); i++) { if (rawColumnChunk.getMaxValues() != null) { @@ -195,26 +195,28 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte bitSet.flip(0, rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } else { - BitSet bitSet = getFilteredIndexes(rawColumnChunk.convertToDimColDataChunk(i), + BitSet bitSet = getFilteredIndexes(rawColumnChunk.decodeColumnPage(i), rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } } } else { - BitSet bitSet = getFilteredIndexes(rawColumnChunk.convertToDimColDataChunk(i), + BitSet bitSet = getFilteredIndexes(rawColumnChunk.decodeColumnPage(i), rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } } return bitSetGroup; - } else if (isMeasurePresentInCurrentBlock[0]) { - int blockIndex = - segmentProperties.getMeasuresOrdinalToBlockMapping().get(measureBlocksIndex[0]); - if (null == blockChunkHolder.getMeasureRawDataChunk()[blockIndex]) { - blockChunkHolder.getMeasureRawDataChunk()[blockIndex] = blockChunkHolder.getDataBlock() - .getMeasureChunk(blockChunkHolder.getFileReader(), blockIndex); + } else { + int chunkIndex = + segmentProperties.getMeasuresOrdinalToChunkMapping().get(measureChunkIndex[0]); + if (null == rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex]) { + rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex] = + rawBlockletColumnChunks.getDataBlock().readMeasureChunk( + rawBlockletColumnChunks.getFileReader(), chunkIndex); } - MeasureRawColumnChunk rawColumnChunk = blockChunkHolder.getMeasureRawDataChunk()[blockIndex]; + MeasureRawColumnChunk rawColumnChunk = + rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex]; BitSetGroup bitSetGroup = new BitSetGroup(rawColumnChunk.getPagesCount()); for (int i = 0; i < rawColumnChunk.getPagesCount(); i++) { if (rawColumnChunk.getMaxValues() != null) { @@ -224,28 +226,27 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte .getMeasureObjectFromDataType(rawColumnChunk.getMinValues()[i], msrColEvalutorInfoList.get(0).getType())); ColumnPage columnPage = - rawColumnChunk.convertToColumnPage(i); + rawColumnChunk.decodeColumnPage(i); if (compare <= 0 && columnPage.getNullBits().isEmpty()) { BitSet bitSet = new BitSet(rawColumnChunk.getRowCount()[i]); bitSet.flip(0, rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } else { BitSet bitSet = - getFilteredIndexesForMeasures(rawColumnChunk.convertToColumnPage(i), + getFilteredIndexesForMeasures(rawColumnChunk.decodeColumnPage(i), rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } } } else { BitSet bitSet = - getFilteredIndexesForMeasures(rawColumnChunk.convertToColumnPage(i), + getFilteredIndexesForMeasures(rawColumnChunk.decodeColumnPage(i), rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } } return bitSetGroup; } - return null; } private BitSet getFilteredIndexesForMeasures(ColumnPage columnPage, @@ -279,16 +280,16 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte } - private BitSet getFilteredIndexes(DimensionColumnDataChunk dimensionColumnDataChunk, + private BitSet getFilteredIndexes(DimensionColumnPage dimensionColumnPage, int numerOfRows) { BitSet bitSet = null; - if (dimensionColumnDataChunk.isExplicitSorted()) { - bitSet = setFilterdIndexToBitSetWithColumnIndex(dimensionColumnDataChunk, numerOfRows); + if (dimensionColumnPage.isExplicitSorted()) { + bitSet = setFilterdIndexToBitSetWithColumnIndex(dimensionColumnPage, numerOfRows); } else { - bitSet = setFilterdIndexToBitSet(dimensionColumnDataChunk, numerOfRows); + bitSet = setFilterdIndexToBitSet(dimensionColumnPage, numerOfRows); } - if (dimensionColumnDataChunk.isNoDicitionaryColumn()) { - FilterUtil.removeNullValues(dimensionColumnDataChunk, bitSet, + if (dimensionColumnPage.isNoDicitionaryColumn()) { + FilterUtil.removeNullValues(dimensionColumnPage, bitSet, CarbonCommonConstants.MEMBER_DEFAULT_VAL_ARRAY); } return bitSet; @@ -300,12 +301,12 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte * column is not supported by default so column index mapping will be present for * accesing the members from the block. * - * @param dimensionColumnDataChunk + * @param dimensionColumnPage * @param numerOfRows * @return BitSet. */ private BitSet setFilterdIndexToBitSetWithColumnIndex( - DimensionColumnDataChunk dimensionColumnDataChunk, int numerOfRows) { + DimensionColumnPage dimensionColumnPage, int numerOfRows) { BitSet bitSet = new BitSet(numerOfRows); int start = 0; int last = 0; @@ -313,7 +314,7 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte byte[][] filterValues = this.filterRangeValues; for (int i = 0; i < filterValues.length; i++) { start = CarbonUtil - .getFirstIndexUsingBinarySearch(dimensionColumnDataChunk, startIndex, numerOfRows - 1, + .getFirstIndexUsingBinarySearch(dimensionColumnPage, startIndex, numerOfRows - 1, filterValues[i], false); if (start < 0) { start = -(start + 1); @@ -324,14 +325,14 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte // index needs to be compared by the filter member if its >= filter then from that // index the bitset will be considered for filtering process. if (ByteUtil.compare(filterValues[i], - dimensionColumnDataChunk.getChunkData(dimensionColumnDataChunk.getInvertedIndex(start))) + dimensionColumnPage.getChunkData(dimensionColumnPage.getInvertedIndex(start))) > 0) { start = start + 1; } } last = start; for (int j = start; j < numerOfRows; j++) { - bitSet.set(dimensionColumnDataChunk.getInvertedIndex(j)); + bitSet.set(dimensionColumnPage.getInvertedIndex(j)); last++; } startIndex = last; @@ -348,11 +349,11 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte * be called if the column is sorted default so column index * mapping will be present for accesing the members from the block. * - * @param dimensionColumnDataChunk + * @param dimensionColumnPage * @param numerOfRows * @return BitSet. */ - private BitSet setFilterdIndexToBitSet(DimensionColumnDataChunk dimensionColumnDataChunk, + private BitSet setFilterdIndexToBitSet(DimensionColumnPage dimensionColumnPage, int numerOfRows) { BitSet bitSet = new BitSet(numerOfRows); byte[][] filterValues = this.filterRangeValues; @@ -363,7 +364,7 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte int startIndex = 0; for (int k = 0; k < filterValues.length; k++) { start = CarbonUtil - .getFirstIndexUsingBinarySearch(dimensionColumnDataChunk, startIndex, + .getFirstIndexUsingBinarySearch(dimensionColumnPage, startIndex, numerOfRows - 1, filterValues[k], false); if (start < 0) { start = -(start + 1); @@ -373,7 +374,7 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte // Method will compare the tentative index value after binary search, this tentative // index needs to be compared by the filter member if its >= filter then from that // index the bitset will be considered for filtering process. - if (ByteUtil.compare(filterValues[k], dimensionColumnDataChunk.getChunkData(start)) > 0) { + if (ByteUtil.compare(filterValues[k], dimensionColumnPage.getChunkData(start)) > 0) { start = start + 1; } } @@ -391,7 +392,7 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte } else { for (int k = 0; k < filterValues.length; k++) { for (int i = 0; i < numerOfRows; i++) { - if (ByteUtil.compare(dimensionColumnDataChunk.getChunkData(i), filterValues[k]) >= 0) { + if (ByteUtil.compare(dimensionColumnPage.getChunkData(i), filterValues[k]) >= 0) { bitSet.set(i); } } @@ -400,21 +401,24 @@ public class RowLevelRangeGrtrThanEquaToFilterExecuterImpl extends RowLevelFilte return bitSet; } - @Override public void readBlocks(BlocksChunkHolder blockChunkHolder) throws IOException { + @Override + public void readColumnChunks(RawBlockletColumnChunks rawBlockletColumnChunks) throws IOException { if (isDimensionPresentInCurrentBlock[0]) { if (!dimColEvaluatorInfoList.get(0).getDimension().hasEncoding(Encoding.DICTIONARY)) { - super.readBlocks(blockChunkHolder); + super.readColumnChunks(rawBlockletColumnChunks); } - int blockIndex = dimensionBlocksIndex[0]; - if (null == blockChunkHolder.getDimensionRawDataChunk()[blockIndex]) { - blockChunkHolder.getDimensionRawDataChunk()[blockIndex] = blockChunkHolder.getDataBlock() - .getDimensionChunk(blockChunkHolder.getFileReader(), blockIndex); + int chunkIndex = dimensionChunkIndex[0]; + if (null == rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex]) { + rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex] = + rawBlockletColumnChunks.getDataBlock().readDimensionChunk( + rawBlockletColumnChunks.getFileReader(), chunkIndex); } } else if (isMeasurePresentInCurrentBlock[0]) { - int blockIndex = measureBlocksIndex[0]; - if (null == blockChunkHolder.getMeasureRawDataChunk()[blockIndex]) { - blockChunkHolder.getMeasureRawDataChunk()[blockIndex] = blockChunkHolder.getDataBlock() - .getMeasureChunk(blockChunkHolder.getFileReader(), blockIndex); + int chunkIndex = measureChunkIndex[0]; + if (null == rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex]) { + rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex] = + rawBlockletColumnChunks.getDataBlock().readMeasureChunk( + rawBlockletColumnChunks.getFileReader(), chunkIndex); } } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/4749ca29/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeLessThanEqualFilterExecuterImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeLessThanEqualFilterExecuterImpl.java b/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeLessThanEqualFilterExecuterImpl.java index 88cf75c..2e9bcb6 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeLessThanEqualFilterExecuterImpl.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/filter/executer/RowLevelRangeLessThanEqualFilterExecuterImpl.java @@ -22,7 +22,7 @@ import java.util.List; import org.apache.carbondata.core.constants.CarbonCommonConstants; import org.apache.carbondata.core.datastore.block.SegmentProperties; -import org.apache.carbondata.core.datastore.chunk.DimensionColumnDataChunk; +import org.apache.carbondata.core.datastore.chunk.DimensionColumnPage; import org.apache.carbondata.core.datastore.chunk.impl.DimensionRawColumnChunk; import org.apache.carbondata.core.datastore.chunk.impl.MeasureRawColumnChunk; import org.apache.carbondata.core.datastore.page.ColumnPage; @@ -35,11 +35,10 @@ import org.apache.carbondata.core.metadata.encoder.Encoding; import org.apache.carbondata.core.metadata.schema.table.column.CarbonDimension; import org.apache.carbondata.core.metadata.schema.table.column.CarbonMeasure; import org.apache.carbondata.core.scan.expression.Expression; -import org.apache.carbondata.core.scan.expression.exception.FilterUnsupportedException; import org.apache.carbondata.core.scan.filter.FilterUtil; import org.apache.carbondata.core.scan.filter.resolver.resolverinfo.DimColumnResolvedFilterInfo; import org.apache.carbondata.core.scan.filter.resolver.resolverinfo.MeasureColumnResolvedFilterInfo; -import org.apache.carbondata.core.scan.processor.BlocksChunkHolder; +import org.apache.carbondata.core.scan.processor.RawBlockletColumnChunks; import org.apache.carbondata.core.util.BitSetGroup; import org.apache.carbondata.core.util.ByteUtil; import org.apache.carbondata.core.util.CarbonUtil; @@ -117,11 +116,11 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter boolean isScanRequired = false; if (isMeasurePresentInCurrentBlock[0] || isDimensionPresentInCurrentBlock[0]) { if (isMeasurePresentInCurrentBlock[0]) { - minValue = blockMinValue[measureBlocksIndex[0] + lastDimensionColOrdinal]; + minValue = blockMinValue[measureChunkIndex[0] + lastDimensionColOrdinal]; isScanRequired = isScanRequired(minValue, msrFilterRangeValues, msrColEvalutorInfoList.get(0).getType()); } else { - minValue = blockMinValue[dimensionBlocksIndex[0]]; + minValue = blockMinValue[dimensionChunkIndex[0]]; isScanRequired = isScanRequired(minValue, filterRangeValues); } } else { @@ -167,60 +166,63 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter } @Override - public BitSetGroup applyFilter(BlocksChunkHolder blockChunkHolder, boolean useBitsetPipeLine) - throws FilterUnsupportedException, IOException { + public BitSetGroup applyFilter(RawBlockletColumnChunks rawBlockletColumnChunks, + boolean useBitsetPipeLine) throws IOException { // select all rows if dimension does not exists in the current block if (!isDimensionPresentInCurrentBlock[0] && !isMeasurePresentInCurrentBlock[0]) { - int numberOfRows = blockChunkHolder.getDataBlock().nodeSize(); + int numberOfRows = rawBlockletColumnChunks.getDataBlock().numRows(); return FilterUtil - .createBitSetGroupWithDefaultValue(blockChunkHolder.getDataBlock().numberOfPages(), + .createBitSetGroupWithDefaultValue(rawBlockletColumnChunks.getDataBlock().numberOfPages(), numberOfRows, true); } if (isDimensionPresentInCurrentBlock[0]) { - int blockIndex = - segmentProperties.getDimensionOrdinalToBlockMapping().get(dimensionBlocksIndex[0]); - if (null == blockChunkHolder.getDimensionRawDataChunk()[blockIndex]) { - blockChunkHolder.getDimensionRawDataChunk()[blockIndex] = blockChunkHolder.getDataBlock() - .getDimensionChunk(blockChunkHolder.getFileReader(), blockIndex); + int chunkIndex = + segmentProperties.getDimensionOrdinalToChunkMapping().get(dimensionChunkIndex[0]); + if (null == rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex]) { + rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex] = + rawBlockletColumnChunks.getDataBlock().readDimensionChunk( + rawBlockletColumnChunks.getFileReader(), chunkIndex); } DimensionRawColumnChunk rawColumnChunk = - blockChunkHolder.getDimensionRawDataChunk()[blockIndex]; + rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex]; BitSetGroup bitSetGroup = new BitSetGroup(rawColumnChunk.getPagesCount()); for (int i = 0; i < rawColumnChunk.getPagesCount(); i++) { if (rawColumnChunk.getMinValues() != null) { if (isScanRequired(rawColumnChunk.getMinValues()[i], this.filterRangeValues)) { - BitSet bitSet = getFilteredIndexes(rawColumnChunk.convertToDimColDataChunk(i), + BitSet bitSet = getFilteredIndexes(rawColumnChunk.decodeColumnPage(i), rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } } else { - BitSet bitSet = getFilteredIndexes(rawColumnChunk.convertToDimColDataChunk(i), + BitSet bitSet = getFilteredIndexes(rawColumnChunk.decodeColumnPage(i), rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } } return bitSetGroup; } else if (isMeasurePresentInCurrentBlock[0]) { - int blockIndex = - segmentProperties.getMeasuresOrdinalToBlockMapping().get(measureBlocksIndex[0]); - if (null == blockChunkHolder.getMeasureRawDataChunk()[blockIndex]) { - blockChunkHolder.getMeasureRawDataChunk()[blockIndex] = blockChunkHolder.getDataBlock() - .getMeasureChunk(blockChunkHolder.getFileReader(), blockIndex); + int chunkIndex = + segmentProperties.getMeasuresOrdinalToChunkMapping().get(measureChunkIndex[0]); + if (null == rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex]) { + rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex] = + rawBlockletColumnChunks.getDataBlock().readMeasureChunk( + rawBlockletColumnChunks.getFileReader(), chunkIndex); } - MeasureRawColumnChunk rawColumnChunk = blockChunkHolder.getMeasureRawDataChunk()[blockIndex]; + MeasureRawColumnChunk rawColumnChunk = + rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex]; BitSetGroup bitSetGroup = new BitSetGroup(rawColumnChunk.getPagesCount()); for (int i = 0; i < rawColumnChunk.getPagesCount(); i++) { if (rawColumnChunk.getMinValues() != null) { if (isScanRequired(rawColumnChunk.getMinValues()[i], this.msrFilterRangeValues, msrColEvalutorInfoList.get(0).getType())) { BitSet bitSet = - getFilteredIndexesForMeasures(rawColumnChunk.convertToColumnPage(i), + getFilteredIndexesForMeasures(rawColumnChunk.decodeColumnPage(i), rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } } else { BitSet bitSet = - getFilteredIndexesForMeasures(rawColumnChunk.convertToColumnPage(i), + getFilteredIndexesForMeasures(rawColumnChunk.decodeColumnPage(i), rawColumnChunk.getRowCount()[i]); bitSetGroup.setBitSet(bitSet, i); } @@ -260,7 +262,7 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter return bitSet; } - private BitSet getFilteredIndexes(DimensionColumnDataChunk dimensionColumnDataChunk, + private BitSet getFilteredIndexes(DimensionColumnPage dimensionColumnPage, int numerOfRows) { byte[] defaultValue = null; if (dimColEvaluatorInfoList.get(0).getDimension().hasEncoding(Encoding.DIRECT_DICTIONARY)) { @@ -269,7 +271,7 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter dimColEvaluatorInfoList.get(0).getDimension().getDataType()); int key = directDictionaryGenerator.generateDirectSurrogateKey(null); CarbonDimension currentBlockDimension = - segmentProperties.getDimensions().get(dimensionBlocksIndex[0]); + segmentProperties.getDimensions().get(dimensionChunkIndex[0]); if (currentBlockDimension.isSortColumn()) { defaultValue = FilterUtil.getMaskKey(key, currentBlockDimension, this.segmentProperties.getSortColumnsGenerator()); @@ -280,14 +282,14 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter defaultValue = CarbonCommonConstants.EMPTY_BYTE_ARRAY; } BitSet bitSet = null; - if (dimensionColumnDataChunk.isExplicitSorted()) { - bitSet = setFilterdIndexToBitSetWithColumnIndex(dimensionColumnDataChunk, numerOfRows, + if (dimensionColumnPage.isExplicitSorted()) { + bitSet = setFilterdIndexToBitSetWithColumnIndex(dimensionColumnPage, numerOfRows, defaultValue); } else { - bitSet = setFilterdIndexToBitSet(dimensionColumnDataChunk, numerOfRows, defaultValue); + bitSet = setFilterdIndexToBitSet(dimensionColumnPage, numerOfRows, defaultValue); } - if (dimensionColumnDataChunk.isNoDicitionaryColumn()) { - FilterUtil.removeNullValues(dimensionColumnDataChunk, bitSet, + if (dimensionColumnPage.isNoDicitionaryColumn()) { + FilterUtil.removeNullValues(dimensionColumnPage, bitSet, CarbonCommonConstants.MEMBER_DEFAULT_VAL_ARRAY); } return bitSet; @@ -299,12 +301,12 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter * column is not supported by default so column index mapping will be present for * accesing the members from the block. * - * @param dimensionColumnDataChunk + * @param dimensionColumnPage * @param numerOfRows * @return BitSet. */ private BitSet setFilterdIndexToBitSetWithColumnIndex( - DimensionColumnDataChunk dimensionColumnDataChunk, int numerOfRows, + DimensionColumnPage dimensionColumnPage, int numerOfRows, byte[] defaultValue) { BitSet bitSet = new BitSet(numerOfRows); int start = 0; @@ -315,7 +317,7 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter //find the number of default values to skip the null value in case of direct dictionary if (null != defaultValue) { start = CarbonUtil - .getFirstIndexUsingBinarySearch(dimensionColumnDataChunk, startIndex, numerOfRows - 1, + .getFirstIndexUsingBinarySearch(dimensionColumnPage, startIndex, numerOfRows - 1, defaultValue, true); if (start < 0) { skip = -(start + 1); @@ -332,7 +334,7 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter } for (int i = 0; i < filterValues.length; i++) { start = CarbonUtil - .getFirstIndexUsingBinarySearch(dimensionColumnDataChunk, startIndex, numerOfRows - 1, + .getFirstIndexUsingBinarySearch(dimensionColumnPage, startIndex, numerOfRows - 1, filterValues[i], true); if (start < 0) { start = -(start + 1); @@ -343,14 +345,14 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter // will be pointing to the next consecutive position. So compare it again and point to the // previous value returned from getFirstIndexUsingBinarySearch. if (ByteUtil.compare(filterValues[i], - dimensionColumnDataChunk.getChunkData(dimensionColumnDataChunk.getInvertedIndex(start))) + dimensionColumnPage.getChunkData(dimensionColumnPage.getInvertedIndex(start))) < 0) { start = start - 1; } } last = start; for (int j = start; j >= skip; j--) { - bitSet.set(dimensionColumnDataChunk.getInvertedIndex(j)); + bitSet.set(dimensionColumnPage.getInvertedIndex(j)); last--; } startIndex = last; @@ -367,12 +369,12 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter * be called if the column is sorted default so column index * mapping will be present for accesing the members from the block. * - * @param dimensionColumnDataChunk + * @param dimensionColumnPage * @param numerOfRows * @param defaultValue * @return BitSet. */ - private BitSet setFilterdIndexToBitSet(DimensionColumnDataChunk dimensionColumnDataChunk, + private BitSet setFilterdIndexToBitSet(DimensionColumnPage dimensionColumnPage, int numerOfRows, byte[] defaultValue) { BitSet bitSet = new BitSet(numerOfRows); byte[][] filterValues = this.filterRangeValues; @@ -385,7 +387,7 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter //find the number of default values to skip the null value in case of direct dictionary if (null != defaultValue) { start = CarbonUtil - .getFirstIndexUsingBinarySearch(dimensionColumnDataChunk, startIndex, + .getFirstIndexUsingBinarySearch(dimensionColumnPage, startIndex, numerOfRows - 1, defaultValue, true); if (start < 0) { skip = -(start + 1); @@ -402,7 +404,7 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter } for (int k = 0; k < filterValues.length; k++) { start = CarbonUtil - .getFirstIndexUsingBinarySearch(dimensionColumnDataChunk, startIndex, + .getFirstIndexUsingBinarySearch(dimensionColumnPage, startIndex, numerOfRows - 1, filterValues[k], true); if (start < 0) { start = -(start + 1); @@ -412,7 +414,7 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter // When negative value of start is returned from getFirstIndexUsingBinarySearch the Start // will be pointing to the next consecutive position. So compare it again and point to the // previous value returned from getFirstIndexUsingBinarySearch. - if (ByteUtil.compare(filterValues[k], dimensionColumnDataChunk.getChunkData(start)) < 0) { + if (ByteUtil.compare(filterValues[k], dimensionColumnPage.getChunkData(start)) < 0) { start = start - 1; } } @@ -429,7 +431,7 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter } else { for (int k = 0; k < filterValues.length; k++) { for (int i = 0; i < numerOfRows; i++) { - if (ByteUtil.compare(dimensionColumnDataChunk.getChunkData(i), filterValues[k]) <= 0) { + if (ByteUtil.compare(dimensionColumnPage.getChunkData(i), filterValues[k]) <= 0) { bitSet.set(i); } } @@ -438,21 +440,24 @@ public class RowLevelRangeLessThanEqualFilterExecuterImpl extends RowLevelFilter return bitSet; } - @Override public void readBlocks(BlocksChunkHolder blockChunkHolder) throws IOException { + @Override public void readColumnChunks(RawBlockletColumnChunks rawBlockletColumnChunks) + throws IOException { if (isDimensionPresentInCurrentBlock[0]) { if (!dimColEvaluatorInfoList.get(0).getDimension().hasEncoding(Encoding.DICTIONARY)) { - super.readBlocks(blockChunkHolder); + super.readColumnChunks(rawBlockletColumnChunks); } - int blockIndex = dimensionBlocksIndex[0]; - if (null == blockChunkHolder.getDimensionRawDataChunk()[blockIndex]) { - blockChunkHolder.getDimensionRawDataChunk()[blockIndex] = blockChunkHolder.getDataBlock() - .getDimensionChunk(blockChunkHolder.getFileReader(), blockIndex); + int chunkIndex = dimensionChunkIndex[0]; + if (null == rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex]) { + rawBlockletColumnChunks.getDimensionRawColumnChunks()[chunkIndex] = + rawBlockletColumnChunks.getDataBlock().readDimensionChunk( + rawBlockletColumnChunks.getFileReader(), chunkIndex); } } else if (isMeasurePresentInCurrentBlock[0]) { - int blockIndex = measureBlocksIndex[0]; - if (null == blockChunkHolder.getMeasureRawDataChunk()[blockIndex]) { - blockChunkHolder.getMeasureRawDataChunk()[blockIndex] = blockChunkHolder.getDataBlock() - .getMeasureChunk(blockChunkHolder.getFileReader(), blockIndex); + int chunkIndex = measureChunkIndex[0]; + if (null == rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex]) { + rawBlockletColumnChunks.getMeasureRawColumnChunks()[chunkIndex] = + rawBlockletColumnChunks.getDataBlock().readMeasureChunk( + rawBlockletColumnChunks.getFileReader(), chunkIndex); } } }