FilterNode evalFilterForIndexSelection(Filter filter, List<IndexSpecification> indices) { if (filter instanceof FilterList) { FilterList fList = (FilterList) filter; GroupingCondition condition = (fList.getOperator() == Operator.MUST_PASS_ALL) ? GroupingCondition.AND : GroupingCondition.OR; NonLeafFilterNode nonLeafFilterNode = new NonLeafFilterNode(condition); List<Filter> filters = fList.getFilters(); for (Filter fltr : filters) { FilterNode node = evalFilterForIndexSelection(fltr, indices); nonLeafFilterNode.addFilterNode(node); } return handleNonLeafFilterNode(nonLeafFilterNode); } else if (filter instanceof SingleColumnValueFilter) { // Check for the availability of index return selectBestFitAndPossibleIndicesForSCVF(indices, (SingleColumnValueFilter) filter); } else if (filter instanceof SingleColumnRangeFilter) { return selectBestFitAndPossibleIndicesForSCRF(indices, (SingleColumnRangeFilter) filter); } return new NoIndexFilterNode(); }
private IndexRegionScanner createScannerForNonLeafNode(List<IndexRegionScanner> scanners, GroupingCondition condition) { IndexRegionScanner idxScanner; if (condition == GroupingCondition.OR) { idxScanner = new IndexRegionScannerForOR(scanners); } else { idxScanner = new IndexRegionScannerForAND(scanners); } return idxScanner; }
private FilterNode handleNonLeafFilterNode(NonLeafFilterNode nonLeafFilterNode) { // check whether this node can be changed to a NoIndexFilterNode // This we can do when the condition in nonLeafFilterNode is OR and any of the // child node is NoIndexFilterNode if (nonLeafFilterNode.getGroupingCondition() == GroupingCondition.OR) { return handleORCondition(nonLeafFilterNode); } else { // AND condition return handleANDCondition(nonLeafFilterNode); } }
public MultiIndexExpression(GroupingCondition condition) { this.groupingCondition = condition; }
public GroupingCondition getGroupingCondition() { return this.groupingCondition; }
public NonLeafFilterNode(GroupingCondition condition) { this.groupingCondition = condition; }
public GroupingCondition getGroupingCondition() { return groupingCondition; }