66import java .util .Arrays ;
77import java .util .Iterator ;
88import java .util .List ;
9+ import java .util .Set ;
10+ import java .util .HashSet ;
911
1012import org .junit .BeforeClass ;
1113import org .junit .Test ;
1517import parquet .filter2 .predicate .FilterPredicate ;
1618import parquet .filter2 .predicate .Operators .BinaryColumn ;
1719import parquet .filter2 .predicate .Operators .DoubleColumn ;
20+ import parquet .filter2 .predicate .Operators .LongColumn ;
1821import parquet .filter2 .predicate .Statistics ;
1922import parquet .filter2 .predicate .UserDefinedPredicate ;
2023import parquet .filter2 .recordlevel .PhoneBookWriter .Location ;
2629import static parquet .filter2 .predicate .FilterApi .and ;
2730import static parquet .filter2 .predicate .FilterApi .binaryColumn ;
2831import static parquet .filter2 .predicate .FilterApi .doubleColumn ;
32+ import static parquet .filter2 .predicate .FilterApi .longColumn ;
2933import static parquet .filter2 .predicate .FilterApi .eq ;
3034import static parquet .filter2 .predicate .FilterApi .gt ;
3135import static parquet .filter2 .predicate .FilterApi .not ;
@@ -160,6 +164,29 @@ public boolean inverseCanDrop(Statistics<Binary> statistics) {
160164 return false ;
161165 }
162166 }
167+
168+ public static class SetInFilter extends UserDefinedPredicate <Long > {
169+
170+ @ Override
171+ public boolean keep (Long value , Object o ) {
172+ if (value == null ) {
173+ return false ;
174+ }
175+
176+ Set <Long > hSet = (HashSet <Long >) o ;
177+ return hSet .contains (value );
178+ }
179+
180+ @ Override
181+ public boolean canDrop (Statistics <Long > statistics ) {
182+ return false ;
183+ }
184+
185+ @ Override
186+ public boolean inverseCanDrop (Statistics <Long > statistics ) {
187+ return false ;
188+ }
189+ }
163190
164191 @ Test
165192 public void testNameNotStartWithP () throws Exception {
@@ -176,6 +203,28 @@ public boolean keep(User u) {
176203 }
177204 });
178205 }
206+
207+ @ Test
208+ public void testIdIn () throws Exception {
209+ LongColumn name = longColumn ("id" );
210+
211+ Set <Long > h = new HashSet <Long >() {{
212+ add (20L ); add (27L ); add (28L );
213+ }};
214+ FilterPredicate pred = userDefined (name , SetInFilter .class , h );
215+
216+ List <Group > found = PhoneBookWriter .readFile (phonebookFile , FilterCompat .get (pred ));
217+
218+ assertFilter (found , new UserFilter () {
219+ @ Override
220+ public boolean keep (User u ) {
221+ Set <Long > h = new HashSet <Long >() {{
222+ add (20L ); add (27L ); add (28L );
223+ }};
224+ return h .contains (u .getId ());
225+ }
226+ });
227+ }
179228
180229 @ Test
181230 public void testComplex () throws Exception {
0 commit comments