@Test public void testQualifierFilter() throws IOException { String filterString = "QualifierFilter(=, 'regexstring:pre*')"; QualifierFilter qualifierFilter = doTestFilter(filterString, QualifierFilter.class); assertEquals(CompareOperator.EQUAL, qualifierFilter.getCompareOperator()); assertTrue(qualifierFilter.getComparator() instanceof RegexStringComparator); RegexStringComparator regexStringComparator = (RegexStringComparator) qualifierFilter.getComparator(); assertEquals("pre*", new String(regexStringComparator.getValue(), StandardCharsets.UTF_8)); }
@Test public void testCompoundFilter2() throws IOException { String filterString = "(PrefixFilter('realtime') AND QualifierFilter (>=, 'binary:e'))" + "OR FamilyFilter (=, 'binary:qualifier') "; FilterList filterList = doTestFilter(filterString, FilterList.class); ArrayList<Filter> filterListFilters = (ArrayList<Filter>) filterList.getFilters(); assertTrue(filterListFilters.get(0) instanceof FilterList); assertTrue(filterListFilters.get(1) instanceof FamilyFilter); assertEquals(FilterList.Operator.MUST_PASS_ONE, filterList.getOperator()); filterList = (FilterList) filterListFilters.get(0); FamilyFilter familyFilter = (FamilyFilter) filterListFilters.get(1); filterListFilters = (ArrayList<Filter>)filterList.getFilters(); assertTrue(filterListFilters.get(0) instanceof PrefixFilter); assertTrue(filterListFilters.get(1) instanceof QualifierFilter); assertEquals(FilterList.Operator.MUST_PASS_ALL, filterList.getOperator()); assertEquals(CompareOperator.EQUAL, familyFilter.getCompareOperator()); assertTrue(familyFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator) familyFilter.getComparator(); assertEquals("qualifier", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); PrefixFilter prefixFilter = (PrefixFilter) filterListFilters.get(0); byte [] prefix = prefixFilter.getPrefix(); assertEquals("realtime", new String(prefix, StandardCharsets.UTF_8)); QualifierFilter qualifierFilter = (QualifierFilter) filterListFilters.get(1); assertEquals(CompareOperator.GREATER_OR_EQUAL, qualifierFilter.getCompareOperator()); assertTrue(qualifierFilter.getComparator() instanceof BinaryComparator); binaryComparator = (BinaryComparator) qualifierFilter.getComparator(); assertEquals("e", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); }
/** {@inheritDoc} */ @Override public Filter adapt(FilterAdapterContext context, QualifierFilter filter) throws IOException { if (filter.getComparator() instanceof RegexStringComparator) { return adaptRegexStringComparator( filter.getOperator(), (RegexStringComparator) filter.getComparator()); } else if (filter.getComparator() instanceof BinaryComparator) { return adaptBinaryComparator( context, filter.getOperator(), (BinaryComparator) filter.getComparator()); } throw new IllegalStateException( String.format( "Cannot adapt comparator %s", filter.getComparator().getClass().getCanonicalName())); }
/** {@inheritDoc} */ @Override public Filter adapt(FilterAdapterContext context, QualifierFilter filter) throws IOException { if (filter.getComparator() instanceof RegexStringComparator) { return adaptRegexStringComparator( filter.getOperator(), (RegexStringComparator) filter.getComparator()); } else if (filter.getComparator() instanceof BinaryComparator) { return adaptBinaryComparator( context, filter.getOperator(), (BinaryComparator) filter.getComparator()); } throw new IllegalStateException( String.format( "Cannot adapt comparator %s", filter.getComparator().getClass().getCanonicalName())); }
private static boolean isRegexAndSupported(QualifierFilter filter) { return filter.getComparator() instanceof RegexStringComparator && CompareOp.EQUAL.equals(filter.getOperator()); }
private static boolean isRegexAndSupported(QualifierFilter filter) { return filter.getComparator() instanceof RegexStringComparator && CompareOp.EQUAL.equals(filter.getOperator()); }
/** {@inheritDoc} */ @Override public FilterSupportStatus isFilterSupported( FilterAdapterContext context, QualifierFilter filter) { // For range filters, we only support a single family: if (!CompareOp.EQUAL.equals(filter.getOperator()) && filter.getComparator() instanceof BinaryComparator && context.getScan().numFamilies() != 1) { return SINGLE_FAMILY_REQUIRED; } // Support binary comparators and regex comparators with equal compare op: if ( !(filter.getComparator() instanceof BinaryComparator) && !isRegexAndSupported(filter)) { return UNSUPPORTED_COMPARABLE; } return FilterSupportStatus.SUPPORTED; } }
/** {@inheritDoc} */ @Override public FilterSupportStatus isFilterSupported( FilterAdapterContext context, QualifierFilter filter) { // For range filters, we only support a single family: if (!CompareOp.EQUAL.equals(filter.getOperator()) && filter.getComparator() instanceof BinaryComparator && context.getScan().numFamilies() != 1) { return SINGLE_FAMILY_REQUIRED; } // Support binary comparators and regex comparators with equal compare op: if ( !(filter.getComparator() instanceof BinaryComparator) && !isRegexAndSupported(filter)) { return UNSUPPORTED_COMPARABLE; } return FilterSupportStatus.SUPPORTED; } }
@Test public void testQualifierFilter() throws IOException { String filterString = "QualifierFilter(=, 'regexstring:pre*')"; QualifierFilter qualifierFilter = doTestFilter(filterString, QualifierFilter.class); assertEquals(CompareOperator.EQUAL, qualifierFilter.getCompareOperator()); assertTrue(qualifierFilter.getComparator() instanceof RegexStringComparator); RegexStringComparator regexStringComparator = (RegexStringComparator) qualifierFilter.getComparator(); assertEquals("pre*", new String(regexStringComparator.getValue(), StandardCharsets.UTF_8)); }
@Test public void testCompoundFilter2() throws IOException { String filterString = "(PrefixFilter('realtime') AND QualifierFilter (>=, 'binary:e'))" + "OR FamilyFilter (=, 'binary:qualifier') "; FilterList filterList = doTestFilter(filterString, FilterList.class); ArrayList<Filter> filterListFilters = (ArrayList<Filter>) filterList.getFilters(); assertTrue(filterListFilters.get(0) instanceof FilterList); assertTrue(filterListFilters.get(1) instanceof FamilyFilter); assertEquals(FilterList.Operator.MUST_PASS_ONE, filterList.getOperator()); filterList = (FilterList) filterListFilters.get(0); FamilyFilter familyFilter = (FamilyFilter) filterListFilters.get(1); filterListFilters = (ArrayList<Filter>)filterList.getFilters(); assertTrue(filterListFilters.get(0) instanceof PrefixFilter); assertTrue(filterListFilters.get(1) instanceof QualifierFilter); assertEquals(FilterList.Operator.MUST_PASS_ALL, filterList.getOperator()); assertEquals(CompareOperator.EQUAL, familyFilter.getCompareOperator()); assertTrue(familyFilter.getComparator() instanceof BinaryComparator); BinaryComparator binaryComparator = (BinaryComparator) familyFilter.getComparator(); assertEquals("qualifier", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); PrefixFilter prefixFilter = (PrefixFilter) filterListFilters.get(0); byte [] prefix = prefixFilter.getPrefix(); assertEquals("realtime", new String(prefix, StandardCharsets.UTF_8)); QualifierFilter qualifierFilter = (QualifierFilter) filterListFilters.get(1); assertEquals(CompareOperator.GREATER_OR_EQUAL, qualifierFilter.getCompareOperator()); assertTrue(qualifierFilter.getComparator() instanceof BinaryComparator); binaryComparator = (BinaryComparator) qualifierFilter.getComparator(); assertEquals("e", new String(binaryComparator.getValue(), StandardCharsets.UTF_8)); }