@@ -1124,6 +1124,158 @@ public void testFilter2() throws Exception {
1124
1124
scanner .close ();
1125
1125
}
1126
1126
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
+
1127
1279
@ Test
1128
1280
public void testGetFilter () throws Exception {
1129
1281
String key1 = "getKey1" ;
0 commit comments