/** * @param o the other filter to compare with * @return true if and only if the fields of the filter that are serialized * are equal to the corresponding fields in other. Used for testing. */ @Override boolean areSerializedFieldsEqual(Filter o) { if (o == this) return true; if (!(o instanceof ColumnPrefixFilter)) return false; ColumnPrefixFilter other = (ColumnPrefixFilter)o; return Bytes.equals(this.getPrefix(), other.getPrefix()); }
@Override public int hashCode() { return Bytes.hashCode(this.getPrefix()); } }
@Test public void testColumnPrefixFilter() throws IOException { String filterString = " ColumnPrefixFilter('qualifier' ) "; ColumnPrefixFilter columnPrefixFilter = doTestFilter(filterString, ColumnPrefixFilter.class); byte [] columnPrefix = columnPrefixFilter.getPrefix(); assertEquals("qualifier", new String(columnPrefix, StandardCharsets.UTF_8)); }
break; case ColumnPrefixFilter: byte[] src = ((ColumnPrefixFilter)filter).getPrefix(); this.value = Bytes.toString(Base64.getEncoder().encode(src)); break;
@Test public void testCompoundFilter3() throws IOException { String filterString = " ColumnPrefixFilter ('realtime')AND " + "FirstKeyOnlyFilter() OR SKIP FamilyFilter(=, 'substring:hihi')"; FilterList filterList = doTestFilter(filterString, FilterList.class); ArrayList<Filter> filters = (ArrayList<Filter>) filterList.getFilters(); assertTrue(filters.get(0) instanceof FilterList); assertTrue(filters.get(1) instanceof SkipFilter); filterList = (FilterList) filters.get(0); SkipFilter skipFilter = (SkipFilter) filters.get(1); filters = (ArrayList<Filter>) filterList.getFilters(); assertTrue(filters.get(0) instanceof ColumnPrefixFilter); assertTrue(filters.get(1) instanceof FirstKeyOnlyFilter); ColumnPrefixFilter columnPrefixFilter = (ColumnPrefixFilter) filters.get(0); byte [] columnPrefix = columnPrefixFilter.getPrefix(); assertEquals("realtime", new String(columnPrefix, StandardCharsets.UTF_8)); FirstKeyOnlyFilter firstKeyOnlyFilter = (FirstKeyOnlyFilter) filters.get(1); assertTrue(skipFilter.getFilter() instanceof FamilyFilter); FamilyFilter familyFilter = (FamilyFilter) skipFilter.getFilter(); assertEquals(CompareOperator.EQUAL, familyFilter.getCompareOperator()); assertTrue(familyFilter.getComparator() instanceof SubstringComparator); SubstringComparator substringComparator = (SubstringComparator) familyFilter.getComparator(); assertEquals("hihi", new String(substringComparator.getValue(), StandardCharsets.UTF_8)); }
@Test public void testCompoundFilter4() throws IOException { String filterString = " ColumnPrefixFilter ('realtime') OR " + "FirstKeyOnlyFilter() OR SKIP FamilyFilter(=, 'substring:hihi')"; FilterList filterList = doTestFilter(filterString, FilterList.class); ArrayList<Filter> filters = (ArrayList<Filter>) filterList.getFilters(); assertTrue(filters.get(0) instanceof ColumnPrefixFilter); assertTrue(filters.get(1) instanceof FirstKeyOnlyFilter); assertTrue(filters.get(2) instanceof SkipFilter); ColumnPrefixFilter columnPrefixFilter = (ColumnPrefixFilter) filters.get(0); FirstKeyOnlyFilter firstKeyOnlyFilter = (FirstKeyOnlyFilter) filters.get(1); SkipFilter skipFilter = (SkipFilter) filters.get(2); byte [] columnPrefix = columnPrefixFilter.getPrefix(); assertEquals("realtime", new String(columnPrefix, StandardCharsets.UTF_8)); assertTrue(skipFilter.getFilter() instanceof FamilyFilter); FamilyFilter familyFilter = (FamilyFilter) skipFilter.getFilter(); assertEquals(CompareOperator.EQUAL, familyFilter.getCompareOperator()); assertTrue(familyFilter.getComparator() instanceof SubstringComparator); SubstringComparator substringComparator = (SubstringComparator) familyFilter.getComparator(); assertEquals("hihi", new String(substringComparator.getValue(), StandardCharsets.UTF_8)); }
/** * @param o the other filter to compare with * @return true if and only if the fields of the filter that are serialized * are equal to the corresponding fields in other. Used for testing. */ @Override boolean areSerializedFieldsEqual(Filter o) { if (o == this) return true; if (!(o instanceof ColumnPrefixFilter)) return false; ColumnPrefixFilter other = (ColumnPrefixFilter)o; return Bytes.equals(this.getPrefix(), other.getPrefix()); }
/** * @param other * @return true if and only if the fields of the filter that are serialized * are equal to the corresponding fields in other. Used for testing. */ boolean areSerializedFieldsEqual(Filter o) { if (o == this) return true; if (!(o instanceof ColumnPrefixFilter)) return false; ColumnPrefixFilter other = (ColumnPrefixFilter)o; return Bytes.equals(this.getPrefix(), other.getPrefix()); }
/** * @param o the other filter to compare with * @return true if and only if the fields of the filter that are serialized * are equal to the corresponding fields in other. Used for testing. */ @Override boolean areSerializedFieldsEqual(Filter o) { if (o == this) return true; if (!(o instanceof ColumnPrefixFilter)) return false; ColumnPrefixFilter other = (ColumnPrefixFilter)o; return Bytes.equals(this.getPrefix(), other.getPrefix()); }
} else if (filter instanceof ColumnPrefixFilter) { final ColumnPrefixFilter cpfilter = (ColumnPrefixFilter) filter; return String.format("(HColumn starts with %s)", Bytes.toStringBinary(cpfilter.getPrefix())); } else if (filter instanceof ColumnPaginationFilter) { final ColumnPaginationFilter cpfilter = (ColumnPaginationFilter) filter;
@Test public void testColumnPrefixFilter() throws IOException { String filterString = " ColumnPrefixFilter('qualifier' ) "; ColumnPrefixFilter columnPrefixFilter = doTestFilter(filterString, ColumnPrefixFilter.class); byte [] columnPrefix = columnPrefixFilter.getPrefix(); assertEquals("qualifier", new String(columnPrefix, StandardCharsets.UTF_8)); }
break; case ColumnPrefixFilter: byte[] src = ((ColumnPrefixFilter)filter).getPrefix(); this.value = Bytes.toString(Base64.getEncoder().encode(src)); break;
/** {@inheritDoc} */ @Override public Filter adapt(FilterAdapterContext context, ColumnPrefixFilter filter) throws IOException { byte[] prefix = filter.getPrefix(); // Quoting for RE2 can result in at most length * 2 characters written. Pre-allocate // that much space in the ByteString.Output to prevent reallocation later. ByteString.Output outputStream = ByteString.newOutput(prefix.length * 2); ReaderExpressionHelper.writeQuotedExpression(outputStream, prefix); outputStream.write(ReaderExpressionHelper.ALL_QUALIFIERS_BYTES); Filter qualifierFilter = FILTERS.qualifier().regex(outputStream.toByteString()); return FILTERS.chain().filter(qualifierFilter); }
/** {@inheritDoc} */ @Override public Filter adapt(FilterAdapterContext context, ColumnPrefixFilter filter) throws IOException { byte[] prefix = filter.getPrefix(); // Quoting for RE2 can result in at most length * 2 characters written. Pre-allocate // that much space in the ByteString.Output to prevent reallocation later. ByteString.Output outputStream = ByteString.newOutput(prefix.length * 2); ReaderExpressionHelper.writeQuotedExpression(outputStream, prefix); outputStream.write(ReaderExpressionHelper.ALL_QUALIFIERS_BYTES); Filter qualifierFilter = FILTERS.qualifier().regex(outputStream.toByteString()); return FILTERS.chain().filter(qualifierFilter); }
@Test public void testCompoundFilter4() throws IOException { String filterString = " ColumnPrefixFilter ('realtime') OR " + "FirstKeyOnlyFilter() OR SKIP FamilyFilter(=, 'substring:hihi')"; FilterList filterList = doTestFilter(filterString, FilterList.class); ArrayList<Filter> filters = (ArrayList<Filter>) filterList.getFilters(); assertTrue(filters.get(0) instanceof ColumnPrefixFilter); assertTrue(filters.get(1) instanceof FirstKeyOnlyFilter); assertTrue(filters.get(2) instanceof SkipFilter); ColumnPrefixFilter columnPrefixFilter = (ColumnPrefixFilter) filters.get(0); FirstKeyOnlyFilter firstKeyOnlyFilter = (FirstKeyOnlyFilter) filters.get(1); SkipFilter skipFilter = (SkipFilter) filters.get(2); byte [] columnPrefix = columnPrefixFilter.getPrefix(); assertEquals("realtime", new String(columnPrefix, StandardCharsets.UTF_8)); assertTrue(skipFilter.getFilter() instanceof FamilyFilter); FamilyFilter familyFilter = (FamilyFilter) skipFilter.getFilter(); assertEquals(CompareOperator.EQUAL, familyFilter.getCompareOperator()); assertTrue(familyFilter.getComparator() instanceof SubstringComparator); SubstringComparator substringComparator = (SubstringComparator) familyFilter.getComparator(); assertEquals("hihi", new String(substringComparator.getValue(), StandardCharsets.UTF_8)); }
@Test public void testCompoundFilter3() throws IOException { String filterString = " ColumnPrefixFilter ('realtime')AND " + "FirstKeyOnlyFilter() OR SKIP FamilyFilter(=, 'substring:hihi')"; FilterList filterList = doTestFilter(filterString, FilterList.class); ArrayList<Filter> filters = (ArrayList<Filter>) filterList.getFilters(); assertTrue(filters.get(0) instanceof FilterList); assertTrue(filters.get(1) instanceof SkipFilter); filterList = (FilterList) filters.get(0); SkipFilter skipFilter = (SkipFilter) filters.get(1); filters = (ArrayList<Filter>) filterList.getFilters(); assertTrue(filters.get(0) instanceof ColumnPrefixFilter); assertTrue(filters.get(1) instanceof FirstKeyOnlyFilter); ColumnPrefixFilter columnPrefixFilter = (ColumnPrefixFilter) filters.get(0); byte [] columnPrefix = columnPrefixFilter.getPrefix(); assertEquals("realtime", new String(columnPrefix, StandardCharsets.UTF_8)); FirstKeyOnlyFilter firstKeyOnlyFilter = (FirstKeyOnlyFilter) filters.get(1); assertTrue(skipFilter.getFilter() instanceof FamilyFilter); FamilyFilter familyFilter = (FamilyFilter) skipFilter.getFilter(); assertEquals(CompareOperator.EQUAL, familyFilter.getCompareOperator()); assertTrue(familyFilter.getComparator() instanceof SubstringComparator); SubstringComparator substringComparator = (SubstringComparator) familyFilter.getComparator(); assertEquals("hihi", new String(substringComparator.getValue(), StandardCharsets.UTF_8)); }
break; case ColumnPrefixFilter: this.value = Base64.encodeBytes(((ColumnPrefixFilter)filter).getPrefix()); break; case ColumnRangeFilter:
break; case ColumnPrefixFilter: this.value = Base64.encodeBytes(((ColumnPrefixFilter)filter).getPrefix()); break; case ColumnRangeFilter: