@@ -1124,6 +1124,158 @@ public void testFilter2() throws Exception {
11241124 scanner .close ();
11251125 }
11261126
1127+ @ Test
1128+ public void testFirstKeyValueMatchingQualifiersFilter () throws Exception {
1129+ String key1 = "getKey1" ;
1130+ String key2 = "getKey2" ;
1131+ String column1 = "c1" ;
1132+ String column2 = "c2" ;
1133+ String column3 = "c3" ;
1134+ String column4 = "c4" ;
1135+ String column5 = "c5" ;
1136+ String value1 = "value1" ;
1137+ String value2 = "value2" ;
1138+ String value3 = "value3" ;
1139+ String family = "family1" ;
1140+ Delete deleteKey1Family = new Delete (toBytes (key1 ));
1141+ deleteKey1Family .deleteFamily (toBytes (family ));
1142+
1143+ Delete deleteKey2Family = new Delete (toBytes (key2 ));
1144+ deleteKey2Family .deleteFamily (toBytes (family ));
1145+
1146+ hTable .delete (deleteKey1Family );
1147+ hTable .delete (deleteKey2Family );
1148+
1149+ Put putKey1Column1Value1 = new Put (toBytes (key1 ));
1150+ putKey1Column1Value1 .add (toBytes (family ), toBytes (column1 ), toBytes (value1 ));
1151+
1152+ Put putKey1Column1Value2 = new Put (toBytes (key1 ));
1153+ putKey1Column1Value2 .add (toBytes (family ), toBytes (column1 ), toBytes (value2 ));
1154+
1155+ Put putKey1Column2Value2 = new Put (toBytes (key1 ));
1156+ putKey1Column2Value2 .add (toBytes (family ), toBytes (column2 ), toBytes (value2 ));
1157+
1158+ Put putKey1Column2Value1 = new Put (toBytes (key1 ));
1159+ putKey1Column2Value1 .add (toBytes (family ), toBytes (column2 ), toBytes (value1 ));
1160+
1161+ Put putKey1Column3Value1 = new Put (toBytes (key1 ));
1162+ putKey1Column3Value1 .add (toBytes (family ), toBytes (column3 ), toBytes (value1 ));
1163+
1164+ Put putKey1Column4Value1 = new Put (toBytes (key1 ));
1165+ putKey1Column4Value1 .add (toBytes (family ), toBytes (column4 ), toBytes (value1 ));
1166+
1167+ Put putKey1Column5Value1 = new Put (toBytes (key1 ));
1168+ putKey1Column5Value1 .add (toBytes (family ), toBytes (column5 ), toBytes (value1 ));
1169+
1170+ Put putKey2Column1Value1 = new Put (toBytes (key2 ));
1171+ putKey2Column1Value1 .add (toBytes (family ), toBytes (column1 ), toBytes (value1 ));
1172+
1173+ Put putKey2Column1Value2 = new Put (toBytes (key2 ));
1174+ putKey2Column1Value2 .add (toBytes (family ), toBytes (column1 ), toBytes (value2 ));
1175+
1176+ Put putKey2Column2Value2 = new Put (toBytes (key2 ));
1177+ putKey2Column2Value2 .add (toBytes (family ), toBytes (column2 ), toBytes (value2 ));
1178+
1179+ Put putKey2Column2Value1 = new Put (toBytes (key2 ));
1180+ putKey2Column2Value1 .add (toBytes (family ), toBytes (column2 ), toBytes (value1 ));
1181+
1182+ hTable .delete (deleteKey1Family );
1183+ hTable .delete (deleteKey2Family );
1184+ tryPut (hTable , putKey1Column1Value1 );
1185+ tryPut (hTable , putKey1Column1Value2 );
1186+ tryPut (hTable , putKey1Column1Value1 );
1187+ tryPut (hTable , putKey1Column2Value1 );
1188+ tryPut (hTable , putKey1Column2Value2 );
1189+ tryPut (hTable , putKey1Column2Value1 );
1190+ tryPut (hTable , putKey1Column2Value2 );
1191+ tryPut (hTable , putKey1Column3Value1 );
1192+ tryPut (hTable , putKey1Column4Value1 );
1193+ tryPut (hTable , putKey1Column5Value1 );
1194+ tryPut (hTable , putKey2Column2Value1 );
1195+ tryPut (hTable , putKey2Column2Value2 );
1196+
1197+ Scan scan ;
1198+ scan = new Scan ();
1199+ scan .addFamily (family .getBytes ());
1200+ scan .setMaxVersions (10 );
1201+ TreeSet <byte []> qualifiers = new TreeSet <>(Bytes .BYTES_COMPARATOR );
1202+ qualifiers .add (Bytes .toBytes ("c11" ));
1203+ qualifiers .add (Bytes .toBytes ("c2" ));
1204+ FirstKeyValueMatchingQualifiersFilter filter = new FirstKeyValueMatchingQualifiersFilter (qualifiers );
1205+ scan .setFilter (filter );
1206+ ResultScanner scanner = hTable .getScanner (scan );
1207+
1208+ int res_count = 0 ;
1209+ for (Result result : scanner ) {
1210+ for (KeyValue keyValue : result .raw ()) {
1211+ System .out .printf ("Rowkey: %s, Column Family: %s, Column Qualifier: %s, Timestamp: %d, Value: %s%n" ,
1212+ Bytes .toString (result .getRow ()),
1213+ Bytes .toString (keyValue .getFamily ()),
1214+ Bytes .toString (keyValue .getQualifier ()),
1215+ keyValue .getTimestamp (),
1216+ Bytes .toString (keyValue .getValue ())
1217+ );
1218+ res_count += 1 ;
1219+ }
1220+ }
1221+ Assert .assertEquals (res_count , 5 );
1222+ scanner .close ();
1223+
1224+ scan = new Scan ();
1225+ scan .addFamily (family .getBytes ());
1226+ scan .setMaxVersions (10 );
1227+ scan .setReversed (true );
1228+ qualifiers = new TreeSet <>(Bytes .BYTES_COMPARATOR );
1229+ qualifiers .add (Bytes .toBytes ("c22" ));
1230+ qualifiers .add (Bytes .toBytes ("c4" ));
1231+ filter = new FirstKeyValueMatchingQualifiersFilter (qualifiers );
1232+ scan .setFilter (filter );
1233+ scanner = hTable .getScanner (scan );
1234+
1235+ res_count = 0 ;
1236+ for (Result result : scanner ) {
1237+ for (KeyValue keyValue : result .raw ()) {
1238+ System .out .printf ("Rowkey: %s, Column Family: %s, Column Qualifier: %s, Timestamp: %d, Value: %s%n" ,
1239+ Bytes .toString (result .getRow ()),
1240+ Bytes .toString (keyValue .getFamily ()),
1241+ Bytes .toString (keyValue .getQualifier ()),
1242+ keyValue .getTimestamp (),
1243+ Bytes .toString (keyValue .getValue ())
1244+ );
1245+ res_count += 1 ;
1246+ }
1247+ }
1248+ Assert .assertEquals (res_count , 11 );
1249+ scanner .close ();
1250+
1251+ scan = new Scan ();
1252+ scan .addFamily (family .getBytes ());
1253+ scan .setMaxVersions (10 );
1254+ scan .setReversed (true );
1255+ qualifiers = new TreeSet <>(Bytes .BYTES_COMPARATOR );
1256+ qualifiers .add (Bytes .toBytes ("c22" ));
1257+ qualifiers .add (Bytes .toBytes ("a" ));
1258+ filter = new FirstKeyValueMatchingQualifiersFilter (qualifiers );
1259+ scan .setFilter (filter );
1260+ scanner = hTable .getScanner (scan );
1261+
1262+ res_count = 0 ;
1263+ for (Result result : scanner ) {
1264+ for (KeyValue keyValue : result .raw ()) {
1265+ System .out .printf ("Rowkey: %s, Column Family: %s, Column Qualifier: %s, Timestamp: %d, Value: %s%n" ,
1266+ Bytes .toString (result .getRow ()),
1267+ Bytes .toString (keyValue .getFamily ()),
1268+ Bytes .toString (keyValue .getQualifier ()),
1269+ keyValue .getTimestamp (),
1270+ Bytes .toString (keyValue .getValue ())
1271+ );
1272+ res_count += 1 ;
1273+ }
1274+ }
1275+ Assert .assertEquals (res_count , 12 );
1276+ scanner .close ();
1277+ }
1278+
11271279 @ Test
11281280 public void testGetFilter () throws Exception {
11291281 String key1 = "getKey1" ;
0 commit comments