use of org.apache.carbondata.core.scan.filter.intf.RowIntf in project carbondata by apache.
the class FilterUtil method getFilterListForAllValues.
/**
* This method will get all the members of column from the forward dictionary
* cache, this method will be basically used in row level filter resolver.
*
* @param tableIdentifier
* @param expression
* @param columnExpression
* @param isIncludeFilter
* @return DimColumnFilterInfo
* @throws FilterUnsupportedException
* @throws IOException
*/
public static DimColumnFilterInfo getFilterListForAllValues(AbsoluteTableIdentifier tableIdentifier, Expression expression, final ColumnExpression columnExpression, boolean isIncludeFilter) throws IOException, FilterUnsupportedException {
Dictionary forwardDictionary = null;
List<String> evaluateResultListFinal = new ArrayList<String>(20);
DictionaryChunksWrapper dictionaryWrapper = null;
try {
forwardDictionary = getForwardDictionaryCache(tableIdentifier, columnExpression.getDimension());
dictionaryWrapper = forwardDictionary.getDictionaryChunks();
while (dictionaryWrapper.hasNext()) {
byte[] columnVal = dictionaryWrapper.next();
try {
RowIntf row = new RowImpl();
String stringValue = new String(columnVal, Charset.forName(CarbonCommonConstants.DEFAULT_CHARSET));
if (stringValue.equals(CarbonCommonConstants.MEMBER_DEFAULT_VAL)) {
stringValue = null;
}
row.setValues(new Object[] { DataTypeUtil.getDataBasedOnDataType(stringValue, columnExpression.getCarbonColumn().getDataType()) });
Boolean rslt = expression.evaluate(row).getBoolean();
if (null != rslt && rslt == isIncludeFilter) {
if (null == stringValue) {
evaluateResultListFinal.add(CarbonCommonConstants.MEMBER_DEFAULT_VAL);
} else {
evaluateResultListFinal.add(stringValue);
}
}
} catch (FilterIllegalMemberException e) {
LOGGER.debug(e.getMessage());
}
}
return getFilterValues(columnExpression, evaluateResultListFinal, forwardDictionary, isIncludeFilter);
} finally {
CarbonUtil.clearDictionaryCache(forwardDictionary);
}
}
use of org.apache.carbondata.core.scan.filter.intf.RowIntf in project carbondata by apache.
the class RowLevelFilterExecuterImpl method applyFilter.
@Override
public BitSetGroup applyFilter(BlocksChunkHolder blockChunkHolder) throws FilterUnsupportedException, IOException {
readBlocks(blockChunkHolder);
// CHECKSTYLE:ON
int[] numberOfRows = null;
int pageNumbers = 0;
if (dimColEvaluatorInfoList.size() > 0) {
if (isDimensionPresentInCurrentBlock[0]) {
pageNumbers = blockChunkHolder.getDimensionRawDataChunk()[dimensionBlocksIndex[0]].getPagesCount();
numberOfRows = blockChunkHolder.getDimensionRawDataChunk()[dimensionBlocksIndex[0]].getRowCount();
} else {
// specific for restructure case where default values need to be filled
pageNumbers = blockChunkHolder.getDataBlock().numberOfPages();
numberOfRows = new int[] { blockChunkHolder.getDataBlock().nodeSize() };
}
}
if (msrColEvalutorInfoList.size() > 0) {
if (isMeasurePresentInCurrentBlock[0]) {
pageNumbers = blockChunkHolder.getMeasureRawDataChunk()[measureBlocksIndex[0]].getPagesCount();
numberOfRows = blockChunkHolder.getMeasureRawDataChunk()[measureBlocksIndex[0]].getRowCount();
} else {
// specific for restructure case where default values need to be filled
pageNumbers = blockChunkHolder.getDataBlock().numberOfPages();
numberOfRows = new int[] { blockChunkHolder.getDataBlock().nodeSize() };
}
}
BitSetGroup bitSetGroup = new BitSetGroup(pageNumbers);
for (int i = 0; i < pageNumbers; i++) {
BitSet set = new BitSet(numberOfRows[i]);
RowIntf row = new RowImpl();
boolean invalidRowsPresent = false;
for (int index = 0; index < numberOfRows[i]; index++) {
createRow(blockChunkHolder, row, i, index);
Boolean rslt = false;
try {
rslt = exp.evaluate(row).getBoolean();
}// too much log inforation only once the log will be printed.
catch (FilterIllegalMemberException e) {
FilterUtil.logError(e, invalidRowsPresent);
}
if (null != rslt && rslt) {
set.set(index);
}
}
bitSetGroup.setBitSet(set, i);
}
return bitSetGroup;
}
Aggregations