private Filter getColumnPaginationFilter() { return new ColumnPaginationFilter(1, 0); }
/** * @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 ColumnPaginationFilter)) return false; ColumnPaginationFilter other = (ColumnPaginationFilter)o; if (this.columnOffset != null) { return this.getLimit() == other.getLimit() && Bytes.equals(this.getColumnOffset(), other.getColumnOffset()); } return this.getLimit() == other.getLimit() && this.getOffset() == other.getOffset(); }
@Test public void testColumnPaginationFilter() throws Exception { ColumnPaginationFilter columnPaginationFilter = new ColumnPaginationFilter(1,7); assertTrue(columnPaginationFilter.areSerializedFieldsEqual( ProtobufUtil.toFilter(ProtobufUtil.toFilter(columnPaginationFilter)))); }
/** {@inheritDoc} */ @Override public Filter adapt(FilterAdapterContext context, ColumnPaginationFilter filter) throws IOException { //REVISIT: if (filter.getColumnOffset() != null) { byte[] family = context.getScan().getFamilies()[0]; ByteString startQualifier = ByteString.copyFrom(filter.getColumnOffset()); // Include all cells starting at the qualifier scan.getColumnOffset() // up to limit cells. return createChain( filter, FILTERS.qualifier().rangeWithinFamily(Bytes.toString(family)) .startClosed(startQualifier)); } else if (filter.getOffset() > 0) { // Include starting at an integer offset up to limit cells. return createChain( filter, FILTERS.offset().cellsPerRow(filter.getOffset())); } else { // No meaningful offset supplied. return createChain(filter, null); } }
/** * Create a filter chain that allows the latest values for each * qualifier, those cells that pass an option intermediate filter * and are less than the limit per row. */ private Filter createChain( ColumnPaginationFilter filter, Filter intermediate) { ChainFilter chain = FILTERS.chain(); chain.filter(FILTERS.limit().cellsPerColumn(1)); if (intermediate != null) { chain.filter(intermediate); } chain.filter(FILTERS.limit().cellsPerRow(filter.getLimit())); return chain; }
@Override @Deprecated public ReturnCode filterKeyValue(final Cell c) { return filterCell(c); }
/** {@inheritDoc} */ @Override public FilterSupportStatus isFilterSupported( FilterAdapterContext context, ColumnPaginationFilter filter) { // We require a single column family to be specified: int familyCount = context.getScan().numFamilies(); if (filter.getColumnOffset() != null && familyCount != 1) { return UNSUPPORTED_STATUS; } return FilterSupportStatus.SUPPORTED; } }
@Test public void testColumnPaginationFilter() throws Exception { ColumnPaginationFilter columnPaginationFilter = new ColumnPaginationFilter(1,7); assertTrue(columnPaginationFilter.areSerializedFieldsEqual( ProtobufUtil.toFilter(ProtobufUtil.toFilter(columnPaginationFilter)))); }
/** {@inheritDoc} */ @Override public Filter adapt(FilterAdapterContext context, ColumnPaginationFilter filter) throws IOException { //REVISIT: if (filter.getColumnOffset() != null) { byte[] family = context.getScan().getFamilies()[0]; ByteString startQualifier = ByteString.copyFrom(filter.getColumnOffset()); // Include all cells starting at the qualifier scan.getColumnOffset() // up to limit cells. return createChain( filter, FILTERS.qualifier().rangeWithinFamily(Bytes.toString(family)) .startClosed(startQualifier)); } else if (filter.getOffset() > 0) { // Include starting at an integer offset up to limit cells. return createChain( filter, FILTERS.offset().cellsPerRow(filter.getOffset())); } else { // No meaningful offset supplied. return createChain(filter, null); } }
/** * Create a filter chain that allows the latest values for each * qualifier, those cells that pass an option intermediate filter * and are less than the limit per row. */ private Filter createChain( ColumnPaginationFilter filter, Filter intermediate) { ChainFilter chain = FILTERS.chain(); chain.filter(FILTERS.limit().cellsPerColumn(1)); if (intermediate != null) { chain.filter(intermediate); } chain.filter(FILTERS.limit().cellsPerRow(filter.getLimit())); return chain; }
/** * The more specific functionality tests are contained within the TestFilters class. This class is mainly for testing * serialization * * @param filter * @throws Exception */ private void basicFilterTests(ColumnPaginationFilter filter) throws Exception { KeyValue c = new KeyValue(ROW, COLUMN_FAMILY, COLUMN_QUALIFIER, VAL_1); assertTrue("basicFilter1", filter.filterCell(c) == Filter.ReturnCode.INCLUDE_AND_NEXT_COL); }
/** {@inheritDoc} */ @Override public FilterSupportStatus isFilterSupported( FilterAdapterContext context, ColumnPaginationFilter filter) { // We require a single column family to be specified: int familyCount = context.getScan().numFamilies(); if (filter.getColumnOffset() != null && familyCount != 1) { return UNSUPPORTED_STATUS; } return FilterSupportStatus.SUPPORTED; } }
private Filter getColumnPaginationFilterOffset() { return new ColumnPaginationFilter(1, COLUMN_QUALIFIER); }
/** * @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 ColumnPaginationFilter)) return false; ColumnPaginationFilter other = (ColumnPaginationFilter)o; if (this.columnOffset != null) { return this.getLimit() == other.getLimit() && Bytes.equals(this.getColumnOffset(), other.getColumnOffset()); } return this.getLimit() == other.getLimit() && this.getOffset() == other.getOffset(); }
@Override @Deprecated public ReturnCode filterKeyValue(final Cell c) { return filterCell(c); }
public static Filter createFilterFromArguments(ArrayList<byte []> filterArguments) { Preconditions.checkArgument(filterArguments.size() == 2, "Expected 2 but got: %s", filterArguments.size()); int limit = ParseFilter.convertByteArrayToInt(filterArguments.get(0)); int offset = ParseFilter.convertByteArrayToInt(filterArguments.get(1)); return new ColumnPaginationFilter(limit, offset); }
/** * @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 ColumnPaginationFilter)) return false; ColumnPaginationFilter other = (ColumnPaginationFilter)o; if (this.columnOffset != null) { return this.getLimit() == other.getLimit() && Bytes.equals(this.getColumnOffset(), other.getColumnOffset()); } return this.getLimit() == other.getLimit() && this.getOffset() == other.getOffset(); }