@@ -154,6 +154,68 @@ public void testLimitToLastQueriesWithCursors() {
154154 data );
155155 }
156156
157+ @ Test
158+ public void testNotInRemovesExistenceFilter () {
159+ CollectionReference collection =
160+ testCollectionWithDocs (
161+ map (
162+ "doc1" , map ("field" , 2 ),
163+ "doc2" , map ("field" , 1 ),
164+ "doc3" , map ()));
165+
166+ Query query = collection .whereNotIn ("field" , asList (1 ));
167+ FirebaseFirestore db = collection .firestore ;
168+ Pipeline .Snapshot set = waitFor (db .pipeline ().createFrom (query ).execute ());
169+ List <String > ids = pipelineSnapshotToIds (set );
170+ assertEquals (asList ("doc3" , "doc1" ), ids );
171+ }
172+
173+ @ Test
174+ public void testNotEqualRemovesExistenceFilter () {
175+ CollectionReference collection =
176+ testCollectionWithDocs (
177+ map (
178+ "doc1" , map ("field" , 2 ),
179+ "doc2" , map ("field" , 1 ),
180+ "doc3" , map ()));
181+
182+ Query query = collection .whereNotEqualTo ("field" , 1 );
183+ FirebaseFirestore db = collection .firestore ;
184+ Pipeline .Snapshot set = waitFor (db .pipeline ().createFrom (query ).execute ());
185+ List <String > ids = pipelineSnapshotToIds (set );
186+ assertEquals (asList ("doc3" , "doc1" ), ids );
187+ }
188+
189+ @ Test
190+ public void testInequalityMaintainsExistenceFilter () {
191+ CollectionReference collection =
192+ testCollectionWithDocs (
193+ map (
194+ "doc1" , map ("field" , 0 ),
195+ "doc2" , map ()));
196+
197+ Query query = collection .whereLessThan ("field" , 1 );
198+ FirebaseFirestore db = collection .firestore ;
199+ Pipeline .Snapshot set = waitFor (db .pipeline ().createFrom (query ).execute ());
200+ List <String > ids = pipelineSnapshotToIds (set );
201+ assertEquals (asList ("doc1" ), ids );
202+ }
203+
204+ @ Test
205+ public void testExplicitOrderMaintainsExistenceFilter () {
206+ CollectionReference collection =
207+ testCollectionWithDocs (
208+ map (
209+ "doc1" , map ("field" , 1 ),
210+ "doc2" , map ()));
211+
212+ Query query = collection .orderBy ("field" );
213+ FirebaseFirestore db = collection .firestore ;
214+ Pipeline .Snapshot set = waitFor (db .pipeline ().createFrom (query ).execute ());
215+ List <String > ids = pipelineSnapshotToIds (set );
216+ assertEquals (asList ("doc1" ), ids );
217+ }
218+
157219 @ Test
158220 public void testKeyOrderIsDescendingForDescendingInequality () {
159221 CollectionReference collection =
@@ -321,15 +383,14 @@ public void testQueriesCanUseNotEqualFilters() {
321383
322384 Map <String , Map <String , Object >> allDocs =
323385 map (
324- "j" , docJ , "a" , docA , "b" , docB , "c" , docC , "d" , docD , "e" , docE , "f" , docF , "g" , docG ,
325- "h " , docH , "i " , docI );
386+ "i" , docI , " j" , docJ , "a" , docA , "b" , docB , "c" , docC , "d" , docD , "e" , docE , "f" , docF ,
387+ "g " , docG , "h " , docH );
326388 CollectionReference collection = testCollectionWithDocs (allDocs );
327389 FirebaseFirestore db = collection .firestore ;
328390
329391 // Search for zips not matching 98101.
330392 Map <String , Map <String , Object >> expectedDocsMap = new LinkedHashMap <>(allDocs );
331393 expectedDocsMap .remove ("c" );
332- expectedDocsMap .remove ("i" );
333394
334395 Pipeline .Snapshot snapshot =
335396 waitFor (db .pipeline ().createFrom (collection .whereNotEqualTo ("zip" , 98101L )).execute ());
@@ -338,7 +399,6 @@ public void testQueriesCanUseNotEqualFilters() {
338399 // With objects.
339400 expectedDocsMap = new LinkedHashMap <>(allDocs );
340401 expectedDocsMap .remove ("h" );
341- expectedDocsMap .remove ("i" );
342402 snapshot =
343403 waitFor (
344404 db .pipeline ()
@@ -348,15 +408,13 @@ public void testQueriesCanUseNotEqualFilters() {
348408
349409 // With Null.
350410 expectedDocsMap = new LinkedHashMap <>(allDocs );
351- expectedDocsMap .remove ("i" );
352411 expectedDocsMap .remove ("j" );
353412 snapshot = waitFor (db .pipeline ().createFrom (collection .whereNotEqualTo ("zip" , null )).execute ());
354413 assertEquals (Lists .newArrayList (expectedDocsMap .values ()), pipelineSnapshotToValues (snapshot ));
355414
356415 // With NaN.
357416 expectedDocsMap = new LinkedHashMap <>(allDocs );
358417 expectedDocsMap .remove ("a" );
359- expectedDocsMap .remove ("i" );
360418 snapshot =
361419 waitFor (db .pipeline ().createFrom (collection .whereNotEqualTo ("zip" , Double .NaN )).execute ());
362420 assertEquals (Lists .newArrayList (expectedDocsMap .values ()), pipelineSnapshotToValues (snapshot ));
@@ -507,8 +565,8 @@ public void testQueriesCanUseNotInFilters() {
507565
508566 Map <String , Map <String , Object >> allDocs =
509567 map (
510- "j" , docJ , "a" , docA , "b" , docB , "c" , docC , "d" , docD , "e" , docE , "f" , docF , "g" , docG ,
511- "h " , docH , "i " , docI );
568+ "i" , docI , " j" , docJ , "a" , docA , "b" , docB , "c" , docC , "d" , docD , "e" , docE , "f" , docF ,
569+ "g " , docG , "h " , docH );
512570 CollectionReference collection = testCollectionWithDocs (allDocs );
513571 FirebaseFirestore db = collection .firestore ;
514572
@@ -517,7 +575,6 @@ public void testQueriesCanUseNotInFilters() {
517575 expectedDocsMap .remove ("c" );
518576 expectedDocsMap .remove ("d" );
519577 expectedDocsMap .remove ("f" );
520- expectedDocsMap .remove ("i" );
521578
522579 Pipeline .Snapshot snapshot =
523580 waitFor (
@@ -530,7 +587,6 @@ public void testQueriesCanUseNotInFilters() {
530587 // With objects.
531588 expectedDocsMap = new LinkedHashMap <>(allDocs );
532589 expectedDocsMap .remove ("h" );
533- expectedDocsMap .remove ("i" );
534590 snapshot =
535591 waitFor (
536592 db .pipeline ()
@@ -540,7 +596,6 @@ public void testQueriesCanUseNotInFilters() {
540596
541597 // With Null.
542598 expectedDocsMap = new LinkedHashMap <>(allDocs );
543- expectedDocsMap .remove ("i" );
544599 expectedDocsMap .remove ("j" );
545600 snapshot =
546601 waitFor (db .pipeline ().createFrom (collection .whereNotIn ("zip" , nullList ())).execute ());
@@ -549,7 +604,6 @@ public void testQueriesCanUseNotInFilters() {
549604 // With NaN.
550605 expectedDocsMap = new LinkedHashMap <>(allDocs );
551606 expectedDocsMap .remove ("a" );
552- expectedDocsMap .remove ("i" );
553607 snapshot =
554608 waitFor (
555609 db .pipeline ().createFrom (collection .whereNotIn ("zip" , asList (Double .NaN ))).execute ());
@@ -559,7 +613,6 @@ public void testQueriesCanUseNotInFilters() {
559613 expectedDocsMap = new LinkedHashMap <>(allDocs );
560614 expectedDocsMap .remove ("a" );
561615 expectedDocsMap .remove ("c" );
562- expectedDocsMap .remove ("i" );
563616 snapshot =
564617 waitFor (
565618 db .pipeline ()
0 commit comments