private void addORColsToFinalList(FilterList filterList) { for (Entry<Column, List<Value>> entry : colWithOperatorsOfOR.entrySet()) { List<Value> valueList = entry.getValue(); for (Value value : valueList) { if (value.getOperator() == CompareOp.EQUAL) { filterList.addFilter(value.getFilter()); } else { SingleColumnRangeFilter rangeFltr = new SingleColumnRangeFilter(entry.getKey().getFamily(), entry.getKey().getQualifier(), entry.getKey().getValuePartition(), value.getValue(), value.getOperator(), null, null); filterList.addFilter(rangeFltr); } } } }
Filter doFiltersRestruct(Filter filter) { if (filter instanceof SingleColumnValueFilter) { ValuePartition vp = null; if (filter instanceof SingleColumnValuePartitionFilter) { vp = ((SingleColumnValuePartitionFilter) filter).getValuePartition(); } SingleColumnValueFilter scvf = (SingleColumnValueFilter) filter; if (scvf.getOperator().equals(CompareOp.LESS) || scvf.getOperator().equals(CompareOp.LESS_OR_EQUAL) || scvf.getOperator().equals(CompareOp.GREATER) || scvf.getOperator().equals(CompareOp.GREATER_OR_EQUAL)) { return new SingleColumnRangeFilter(scvf.getFamily(), scvf.getQualifier(), vp, scvf .getComparator().getValue(), scvf.getOperator(), null, null); } } FilterGroupingWorker groupWorker = new FilterGroupingWorker(); return groupWorker.group(filter); }
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 FilterNode selectBestFitAndPossibleIndicesForSCRF(List<IndexSpecification> indices, SingleColumnRangeFilter filter) { FilterColumnValueRange range = new FilterColumnValueRange(filter.getFamily(), filter.getQualifier(), filter.getValuePartition(), filter.getLowerBoundValue(), filter.getLowerBoundOp(), filter.getUpperBoundValue(), filter.getUpperBoundOp()); return selectBestFitIndexForColumn(indices, range); }