Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ private static void toParseableByteArray(ByteArrayOutputStream byteStream, Filte
} else if (filter instanceof DependentColumnFilter) {
toParseableByteArray(byteStream, (DependentColumnFilter) filter);
} else if (filter instanceof CompareFilter) {
// RowFilter, ValueFilter, QualifierFilter
// RowFilter, ValueFilter, QualifierFilter, FamilyFilter
toParseableByteArray(byteStream, (CompareFilter) filter);
} else if (filter instanceof SingleColumnValueExcludeFilter) {
toParseableByteArray(byteStream, (SingleColumnValueExcludeFilter) filter);
Expand Down
154 changes: 153 additions & 1 deletion src/test/java/com/alipay/oceanbase/hbase/HTableMultiCFTestBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.client.coprocessor.Batch;
import org.apache.hadoop.hbase.filter.PrefixFilter;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.*;
import org.junit.rules.ExpectedException;
Expand Down Expand Up @@ -1557,4 +1557,156 @@ public void testMultiColumnFamilyDelete() throws Exception {
multiCfHTable.delete(deleteKey2Family);
multiCfHTable.delete(deleteKey3Family);
}

@Test
public void testFamilyFilter() throws Exception {
String key1 = "getKey1";
String key2 = "getKey2";
String column1 = "abc";
String column2 = "def";
String value1 = "value1";
String value2 = "value2";
String family1 = "family_with_group1";
String family2 = "family_with_group2";
String family3 = "family_with_group3";

Delete deleteKey1 = new Delete(toBytes(key1));
deleteKey1.deleteFamily(toBytes(family1));
deleteKey1.deleteFamily(toBytes(family2));
deleteKey1.deleteFamily(toBytes(family3));
Delete deleteKey2 = new Delete(toBytes(key2));
deleteKey2.deleteFamily(toBytes(family1));
deleteKey2.deleteFamily(toBytes(family2));
deleteKey2.deleteFamily(toBytes(family3));

Put putKey1Column1Value1 = new Put(toBytes(key1));
putKey1Column1Value1.add(toBytes(family1), toBytes(column1), toBytes(value1));

Put putKey1Column1Value2 = new Put(toBytes(key1));
putKey1Column1Value2.add(toBytes(family2), toBytes(column1), toBytes(value2));

Put putKey1Column2Value2 = new Put(toBytes(key1));
putKey1Column2Value2.add(toBytes(family2), toBytes(column2), toBytes(value2));

Put putKey2Column2Value1 = new Put(toBytes(key2));
putKey2Column2Value1.add(toBytes(family3), toBytes(column2), toBytes(value1));

Put putKey2Column1Value1 = new Put(toBytes(key2));
putKey2Column1Value1.add(toBytes(family3), toBytes(column1), toBytes(value1));

Put putKey2Column1Value2 = new Put(toBytes(key2));
putKey2Column1Value2.add(toBytes(family3), toBytes(column1), toBytes(value2));

multiCfHTable.delete(deleteKey1);
multiCfHTable.delete(deleteKey2);
multiCfHTable.put(putKey1Column1Value1);
multiCfHTable.put(putKey1Column1Value2);
multiCfHTable.put(putKey1Column2Value2);
multiCfHTable.put(putKey2Column2Value1);
multiCfHTable.put(putKey2Column1Value1);
multiCfHTable.put(putKey2Column1Value2);

Scan scan;
scan = new Scan();
scan.addFamily(family1.getBytes());
scan.addFamily(family2.getBytes());
scan.addFamily(family3.getBytes());
scan.setMaxVersions(10);
FamilyFilter f = new FamilyFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(family2)));
scan.setFilter(f);
ResultScanner scanner = multiCfHTable.getScanner(scan);

int res_count = 0;
for (Result result : scanner) {
for (KeyValue keyValue : result.raw()) {
System.out.printf("Rowkey: %s, Column Family: %s, Column Qualifier: %s, Timestamp: %d, Value: %s%n",
Bytes.toString(result.getRow()),
Bytes.toString(keyValue.getFamily()),
Bytes.toString(keyValue.getQualifier()),
keyValue.getTimestamp(),
Bytes.toString(keyValue.getValue())
);
Assert.assertArrayEquals(family2.getBytes(), keyValue.getFamily());
res_count += 1;
}
}
Assert.assertEquals(res_count, 2);
scanner.close();

scan = new Scan();
scan.addFamily(family1.getBytes());
scan.addFamily(family2.getBytes());
scan.addFamily(family3.getBytes());
scan.setMaxVersions(10);
f = new FamilyFilter(CompareFilter.CompareOp.NOT_EQUAL, new BinaryComparator(Bytes.toBytes(family2)));
scan.setFilter(f);
scanner = multiCfHTable.getScanner(scan);

res_count = 0;
for (Result result : scanner) {
for (KeyValue keyValue : result.raw()) {
System.out.printf("Rowkey: %s, Column Family: %s, Column Qualifier: %s, Timestamp: %d, Value: %s%n",
Bytes.toString(result.getRow()),
Bytes.toString(keyValue.getFamily()),
Bytes.toString(keyValue.getQualifier()),
keyValue.getTimestamp(),
Bytes.toString(keyValue.getValue())
);
res_count += 1;
}
}
Assert.assertEquals(res_count, 4);
scanner.close();

scan = new Scan();
scan.addFamily(family1.getBytes());
scan.addFamily(family2.getBytes());
scan.addFamily(family3.getBytes());
scan.setMaxVersions(10);
f = new FamilyFilter(CompareFilter.CompareOp.GREATER, new BinaryComparator(Bytes.toBytes(family2)));
scan.setFilter(f);
scanner = multiCfHTable.getScanner(scan);

res_count = 0;
for (Result result : scanner) {
for (KeyValue keyValue : result.raw()) {
System.out.printf("Rowkey: %s, Column Family: %s, Column Qualifier: %s, Timestamp: %d, Value: %s%n",
Bytes.toString(result.getRow()),
Bytes.toString(keyValue.getFamily()),
Bytes.toString(keyValue.getQualifier()),
keyValue.getTimestamp(),
Bytes.toString(keyValue.getValue())
);
Assert.assertArrayEquals(family3.getBytes(), keyValue.getFamily());
res_count += 1;
}
}
Assert.assertEquals(res_count, 3);
scanner.close();

scan = new Scan();
scan.addFamily(family1.getBytes());
scan.addFamily(family2.getBytes());
scan.addFamily(family3.getBytes());
scan.setMaxVersions(10);
f = new FamilyFilter(CompareFilter.CompareOp.EQUAL, new BinaryPrefixComparator(Bytes.toBytes("family_with_group")));
scan.setFilter(f);
scanner = multiCfHTable.getScanner(scan);

res_count = 0;
for (Result result : scanner) {
for (KeyValue keyValue : result.raw()) {
System.out.printf("Rowkey: %s, Column Family: %s, Column Qualifier: %s, Timestamp: %d, Value: %s%n",
Bytes.toString(result.getRow()),
Bytes.toString(keyValue.getFamily()),
Bytes.toString(keyValue.getQualifier()),
keyValue.getTimestamp(),
Bytes.toString(keyValue.getValue())
);
res_count += 1;
}
}
Assert.assertEquals(res_count, 6);
scanner.close();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,12 @@ public void testMultipleColumnPrefixFilter() throws IOException {
HBaseFilterUtils.toParseableByteArray(filter));
}

@Test
public void testFamilyFilter() throws IOException {
FamilyFilter filter = new FamilyFilter(CompareFilter.CompareOp.NOT_EQUAL, new BinaryComparator(Bytes.toBytes("cf")));
Assert.assertArrayEquals("FamilyFilter(!=,'binary:cf')".getBytes(), HBaseFilterUtils.toParseableByteArray(filter));
}

@Test
public void testColumnCountGetFilter() throws IOException {
ColumnCountGetFilter filter = new ColumnCountGetFilter(513);
Expand Down