Source:
<code>private static void setScanFilter(StatementContext context, Expression whereClause, boolean disambiguateWithFamily) { Filter filter = null; Scan scan = context.getScan(); assert scan.getFilter() == null; if (LiteralExpression.FALSE_EXPRESSION == whereClause) { context.setScanKey(ScanKey.DEGENERATE_SCAN_KEY); } else if (whereClause != null && whereClause != LiteralExpression.TRUE_EXPRESSION) { final Counter counter = new Counter(); whereClause.accept(new KeyValueExpressionVisitor() { @Override public Iterator<Expression> defaultIterator(Expression node) { if (counter.getCount() == Counter.Count.MULTIPLE) { return Iterators.emptyIterator(); } return super.defaultIterator(node); } @Override public Void visit(KeyValueColumnExpression expression) { counter.increment(expression); return null; } }); switch (counter.getCount()) { case NONE: filter = new RowKeyComparisonFilter(whereClause); break; case SINGLE: filter = disambiguateWithFamily ? new SingleCFCQKeyValueComparisonFilter(whereClause) : new SingleCQKeyValueComparisonFilter(whereClause); break; case MULTIPLE: filter = disambiguateWithFamily ? new MultiCFCQKeyValueComparisonFilter(whereClause) : new MultiCQKeyValueComparisonFilter(whereClause); break; } <START> } <END> if (context.hasCnf()) { SkipScanFilter skip = new SkipScanFilter(); context.getCnf(skip); FilterListWithEquals list; if (filter != null) { list = new FilterListWithEquals(Operator.MUST_PASS_ALL, skip, filter); } else { list = new FilterListWithEquals(Operator.MUST_PASS_ALL, skip); } filter = list; } scan.setFilter(filter); }</code><technical_language>do this instead need FilterListWithEquals class: <pre><code> scan.setFilter(filter); if (context.hasCnf()) { // skip scan filter SkipScanFilter skip = new SkipScanFilter(); context.getCnf(skip); ScanUtil.andFilter(scan, skip); // This add skip filter filter } </code></pre></technical_language>

Target:
private static void setScanFilter(StatementContext context, Expression whereClause, boolean disambiguateWithFamily) { Filter filter = null; Scan scan = context.getScan(); assert scan.getFilter() == null; if (LiteralExpression.FALSE_EXPRESSION == whereClause) { context.setScanKey(ScanKey.DEGENERATE_SCAN_KEY); } else if (whereClause != null && whereClause != LiteralExpression.TRUE_EXPRESSION) { final Counter counter = new Counter(); whereClause.accept(new KeyValueExpressionVisitor() { @Override public Iterator<Expression> defaultIterator(Expression node) { if (counter.getCount() == Counter.Count.MULTIPLE) { return Iterators.emptyIterator(); } return super.defaultIterator(node); } @Override public Void visit(KeyValueColumnExpression expression) { counter.increment(expression); return null; } }); switch (counter.getCount()) { case NONE: filter = new RowKeyComparisonFilter(whereClause); break; case SINGLE: filter = disambiguateWithFamily ? new SingleCFCQKeyValueComparisonFilter(whereClause) : new SingleCQKeyValueComparisonFilter(whereClause); break; case MULTIPLE: filter = disambiguateWithFamily ? new MultiCFCQKeyValueComparisonFilter(whereClause) : new MultiCQKeyValueComparisonFilter(whereClause); break; } } if (context.hasCnf()) { SkipScanFilter skip = context.newSkipScanFilter(); if (skip != null) { if (filter == null) { filter = skip; } else { filter = new FilterList(Operator.MUST_PASS_ALL, skip, filter); } } } scan.setFilter(filter); }