diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestColumnRangeFilter.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestColumnRangeFilter.java index 7ecd122cbf..c32b4a5c6e 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestColumnRangeFilter.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestColumnRangeFilter.java @@ -35,6 +35,7 @@ import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.Durability; import org.apache.hadoop.hbase.client.Table; +import org.apache.hadoop.hbase.filter.FilterList.Operator; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.util.Bytes; import org.junit.Test; @@ -239,6 +240,71 @@ public class TestColumnRangeFilter { ht.close(); } + @Test + public void TestColumnRangeFilterWithColumnPaginationFilter() throws Exception { + String family = "Family"; + String table = "TestColumnRangeFilterWithColumnPaginationFilter"; + Table ht = + TEST_UTIL.createTable(TableName.valueOf(table), Bytes.toBytes(family), Integer.MAX_VALUE); + + // one row. + String row = "row"; + // One version + long timestamp = 100; + // 10 columns + int[] columns = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + String valueString = "ValueString"; + + List kvList = new ArrayList(); + + Put p = new Put(Bytes.toBytes(row)); + p.setDurability(Durability.SKIP_WAL); + for (int column : columns) { + KeyValue kv = + KeyValueTestUtil.create(row, family, Integer.toString(column), timestamp, valueString); + p.add(kv); + kvList.add(kv); + } + ht.put(p); + + TEST_UTIL.flush(); + + Scan scan = new Scan(); + + // Column range from 1 to 9. + StringRange stringRange = new StringRange("1", true, "9", false); + ColumnRangeFilter filter1 = + new ColumnRangeFilter(Bytes.toBytes(stringRange.getStart()), stringRange.isStartInclusive(), + Bytes.toBytes(stringRange.getEnd()), stringRange.isEndInclusive()); + + // ColumnPaginationFilter limit 5 + ColumnPaginationFilter filter2 = new ColumnPaginationFilter(5, 0); + FilterList filterList = new FilterList(Operator.MUST_PASS_ALL, filter1, filter2); + + scan.setFilter(filterList); + ResultScanner scanner = ht.getScanner(scan); + List results = new ArrayList(); + LOG.info("scan column range: " + stringRange.toString()); + long timeBeforeScan = System.currentTimeMillis(); + + Result result; + while ((result = scanner.next()) != null) { + for (Cell kv : result.listCells()) { + results.add(kv); + } + } + long scanTime = System.currentTimeMillis() - timeBeforeScan; + scanner.close(); + LOG.info("scan time = " + scanTime + "ms"); + LOG.info("found " + results.size() + " results"); + LOG.info("Expecting " + 5 + " results"); + + assertEquals(5, results.size()); + + ht.close(); + + } + List generateRandomWords(int numberOfWords, int maxLengthOfWords) { Set wordSet = new HashSet(); for (int i = 0; i < numberOfWords; i++) {