Index: src/main/java/org/apache/hadoop/hbase/filter/PrefixFilter.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/filter/PrefixFilter.java (revision 1566485) +++ src/main/java/org/apache/hadoop/hbase/filter/PrefixFilter.java (working copy) @@ -25,6 +25,7 @@ import java.io.IOException; import java.util.ArrayList; +import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.util.Bytes; import com.google.common.base.Preconditions; @@ -66,6 +67,11 @@ return filterRow; } + @Override + public ReturnCode filterKeyValue(KeyValue ignored) { + return filterRow ? ReturnCode.NEXT_ROW : ReturnCode.INCLUDE; + } + public boolean filterRow() { return filterRow; } Index: src/test/java/org/apache/hadoop/hbase/filter/TestFilterList.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/filter/TestFilterList.java (revision 1566485) +++ src/test/java/org/apache/hadoop/hbase/filter/TestFilterList.java (working copy) @@ -206,6 +206,47 @@ } /** + * Test some special filters with FilterList + * @throws Exception + */ + public void testSpecialFilters() throws Exception { + byte[] r1 = Bytes.toBytes("Row1"); + byte[] r11 = Bytes.toBytes("Row11"); + byte[] r2 = Bytes.toBytes("Row2"); + + FilterList flist = new FilterList(FilterList.Operator.MUST_PASS_ONE); + flist.addFilter(new PrefixFilter(r1)); + flist.filterRowKey(r1, 0, r1.length); + assertEquals(flist.filterKeyValue(new KeyValue(r1,r1,r1)), ReturnCode.INCLUDE); + assertEquals(flist.filterKeyValue(new KeyValue(r11,r11,r11)), ReturnCode.INCLUDE); + + flist.reset(); + flist.filterRowKey(r2, 0, r2.length); + assertEquals(flist.filterKeyValue(new KeyValue(r2,r2,r2)), ReturnCode.SKIP); + + flist = new FilterList(FilterList.Operator.MUST_PASS_ONE); + flist.addFilter(new AlwaysNextColFilter()); + flist.addFilter(new PrefixFilter(r1)); + flist.filterRowKey(r1, 0, r1.length); + assertEquals(flist.filterKeyValue(new KeyValue(r1,r1,r1)), ReturnCode.INCLUDE); + assertEquals(flist.filterKeyValue(new KeyValue(r11,r11,r11)), ReturnCode.INCLUDE); + + flist.reset(); + flist.filterRowKey(r2, 0, r2.length); + assertEquals(flist.filterKeyValue(new KeyValue(r2,r2,r2)), ReturnCode.SKIP); + } + + public static class AlwaysNextColFilter extends FilterBase { + public AlwaysNextColFilter() {super();} + @Override + public ReturnCode filterKeyValue(KeyValue v) {return ReturnCode.NEXT_COL;} + @Override + public void write(DataOutput out) throws IOException {} + @Override + public void readFields(DataInput in) throws IOException {} + } + + /** * Test serialization * @throws Exception */