@@ -397,4 +397,145 @@ public void queryWithMultipleInsOnDifferentFields() throws Exception {
397397 expectOptimizedCollectionScan (() -> runQuery (query3 , SnapshotVersion .NONE ));
398398 assertEquals (docSet (query3 .comparator (), doc4 ), result3 );
399399 }
400+
401+ @ Test
402+ public void queryInWithArrayContainsAny () throws Exception {
403+ MutableDocument doc1 = doc ("coll/1" , 1 , map ("a" , 1 , "b" , Arrays .asList (0 )));
404+ MutableDocument doc2 = doc ("coll/2" , 1 , map ("b" , Arrays .asList (1 )));
405+ MutableDocument doc3 = doc ("coll/3" , 1 , map ("a" , 3 , "b" , Arrays .asList (2 , 7 ), "c" , 10 ));
406+ MutableDocument doc4 = doc ("coll/4" , 1 , map ("a" , 1 , "b" , Arrays .asList (3 , 7 )));
407+ MutableDocument doc5 = doc ("coll/5" , 1 , map ("a" , 1 ));
408+ MutableDocument doc6 = doc ("coll/6" , 1 , map ("a" , 2 , "c" , 20 ));
409+ addDocument (doc1 , doc2 , doc3 , doc4 , doc5 , doc6 );
410+ indexManager .addFieldIndex (fieldIndex ("coll" , "a" , Kind .ASCENDING ));
411+ indexManager .addFieldIndex (fieldIndex ("coll" , "a" , Kind .DESCENDING ));
412+ indexManager .addFieldIndex (fieldIndex ("coll" , "b" , Kind .CONTAINS ));
413+ indexManager .updateIndexEntries (docMap (doc1 , doc2 , doc3 , doc4 , doc5 , doc6 ));
414+ indexManager .updateCollectionGroup ("coll" , IndexOffset .fromDocument (doc6 ));
415+
416+ Query query1 =
417+ query ("coll" )
418+ .filter (
419+ orFilters (
420+ filter ("a" , "in" , Arrays .asList (2 , 3 )),
421+ filter ("b" , "array-contains-any" , Arrays .asList (0 , 7 ))));
422+ DocumentSet result1 =
423+ expectOptimizedCollectionScan (() -> runQuery (query1 , SnapshotVersion .NONE ));
424+ assertEquals (docSet (query1 .comparator (), doc1 , doc3 , doc4 , doc6 ), result1 );
425+
426+ Query query2 =
427+ query ("coll" )
428+ .filter (
429+ andFilters (
430+ filter ("a" , "in" , Arrays .asList (2 , 3 )),
431+ filter ("b" , "array-contains-any" , Arrays .asList (0 , 7 ))));
432+
433+ DocumentSet result2 =
434+ expectOptimizedCollectionScan (() -> runQuery (query2 , SnapshotVersion .NONE ));
435+ assertEquals (docSet (query2 .comparator (), doc3 ), result2 );
436+
437+ Query query3 =
438+ query ("coll" )
439+ .filter (
440+ orFilters (
441+ andFilters (filter ("a" , "in" , Arrays .asList (2 , 3 )), filter ("c" , "==" , 10 )),
442+ filter ("b" , "array-contains-any" , Arrays .asList (0 , 7 ))));
443+ DocumentSet result3 =
444+ expectOptimizedCollectionScan (() -> runQuery (query3 , SnapshotVersion .NONE ));
445+ assertEquals (docSet (query3 .comparator (), doc1 , doc3 , doc4 ), result3 );
446+
447+ Query query4 =
448+ query ("coll" )
449+ .filter (
450+ andFilters (
451+ filter ("a" , "in" , Arrays .asList (2 , 3 )),
452+ orFilters (
453+ filter ("b" , "array-contains-any" , Arrays .asList (0 , 7 )),
454+ filter ("c" , "==" , 20 ))));
455+ DocumentSet result4 =
456+ expectOptimizedCollectionScan (() -> runQuery (query4 , SnapshotVersion .NONE ));
457+ assertEquals (docSet (query4 .comparator (), doc3 , doc6 ), result4 );
458+ }
459+
460+ @ Test
461+ public void queryInWithArrayContains () throws Exception {
462+ MutableDocument doc1 = doc ("coll/1" , 1 , map ("a" , 1 , "b" , Arrays .asList (0 )));
463+ MutableDocument doc2 = doc ("coll/2" , 1 , map ("b" , Arrays .asList (1 )));
464+ MutableDocument doc3 = doc ("coll/3" , 1 , map ("a" , 3 , "b" , Arrays .asList (2 , 7 ), "c" , 10 ));
465+ MutableDocument doc4 = doc ("coll/4" , 1 , map ("a" , 1 , "b" , Arrays .asList (3 , 7 )));
466+ MutableDocument doc5 = doc ("coll/5" , 1 , map ("a" , 1 ));
467+ MutableDocument doc6 = doc ("coll/6" , 1 , map ("a" , 2 , "c" , 20 ));
468+ addDocument (doc1 , doc2 , doc3 , doc4 , doc5 , doc6 );
469+ indexManager .addFieldIndex (fieldIndex ("coll" , "a" , Kind .ASCENDING ));
470+ indexManager .addFieldIndex (fieldIndex ("coll" , "a" , Kind .DESCENDING ));
471+ indexManager .addFieldIndex (fieldIndex ("coll" , "b" , Kind .CONTAINS ));
472+ indexManager .updateIndexEntries (docMap (doc1 , doc2 , doc3 , doc4 , doc5 , doc6 ));
473+ indexManager .updateCollectionGroup ("coll" , IndexOffset .fromDocument (doc6 ));
474+
475+ Query query1 =
476+ query ("coll" )
477+ .filter (
478+ orFilters (
479+ filter ("a" , "in" , Arrays .asList (2 , 3 )), filter ("b" , "array-contains" , 3 )));
480+ DocumentSet result1 =
481+ expectOptimizedCollectionScan (() -> runQuery (query1 , SnapshotVersion .NONE ));
482+ assertEquals (docSet (query1 .comparator (), doc3 , doc4 , doc6 ), result1 );
483+
484+ Query query2 =
485+ query ("coll" )
486+ .filter (
487+ andFilters (
488+ filter ("a" , "in" , Arrays .asList (2 , 3 )), filter ("b" , "array-contains" , 7 )));
489+
490+ DocumentSet result2 =
491+ expectOptimizedCollectionScan (() -> runQuery (query2 , SnapshotVersion .NONE ));
492+ assertEquals (docSet (query2 .comparator (), doc3 ), result2 );
493+
494+ Query query3 =
495+ query ("coll" )
496+ .filter (
497+ orFilters (
498+ filter ("a" , "in" , Arrays .asList (2 , 3 )),
499+ andFilters (filter ("b" , "array-contains" , 3 ), filter ("a" , "==" , 1 ))));
500+ DocumentSet result3 =
501+ expectOptimizedCollectionScan (() -> runQuery (query3 , SnapshotVersion .NONE ));
502+ assertEquals (docSet (query3 .comparator (), doc3 , doc4 , doc6 ), result3 );
503+
504+ Query query4 =
505+ query ("coll" )
506+ .filter (
507+ andFilters (
508+ filter ("a" , "in" , Arrays .asList (2 , 3 )),
509+ orFilters (filter ("b" , "array-contains" , 7 ), filter ("a" , "==" , 1 ))));
510+ DocumentSet result4 =
511+ expectOptimizedCollectionScan (() -> runQuery (query4 , SnapshotVersion .NONE ));
512+ assertEquals (docSet (query4 .comparator (), doc3 ), result4 );
513+ }
514+
515+ @ Test
516+ public void orderByEquality () throws Exception {
517+ MutableDocument doc1 = doc ("coll/1" , 1 , map ("a" , 1 , "b" , Arrays .asList (0 )));
518+ MutableDocument doc2 = doc ("coll/2" , 1 , map ("b" , Arrays .asList (1 )));
519+ MutableDocument doc3 = doc ("coll/3" , 1 , map ("a" , 3 , "b" , Arrays .asList (2 , 7 ), "c" , 10 ));
520+ MutableDocument doc4 = doc ("coll/4" , 1 , map ("a" , 1 , "b" , Arrays .asList (3 , 7 )));
521+ MutableDocument doc5 = doc ("coll/5" , 1 , map ("a" , 1 ));
522+ MutableDocument doc6 = doc ("coll/6" , 1 , map ("a" , 2 , "c" , 20 ));
523+ addDocument (doc1 , doc2 , doc3 , doc4 , doc5 , doc6 );
524+ indexManager .addFieldIndex (fieldIndex ("coll" , "a" , Kind .ASCENDING ));
525+ indexManager .addFieldIndex (fieldIndex ("coll" , "a" , Kind .DESCENDING ));
526+ indexManager .addFieldIndex (fieldIndex ("coll" , "b" , Kind .CONTAINS ));
527+ indexManager .updateIndexEntries (docMap (doc1 , doc2 , doc3 , doc4 , doc5 , doc6 ));
528+ indexManager .updateCollectionGroup ("coll" , IndexOffset .fromDocument (doc6 ));
529+
530+ Query query1 = query ("coll" ).filter (filter ("a" , "==" , 1 )).orderBy (orderBy ("a" ));
531+ DocumentSet result1 =
532+ expectOptimizedCollectionScan (() -> runQuery (query1 , SnapshotVersion .NONE ));
533+ assertEquals (docSet (query1 .comparator (), doc1 , doc4 , doc5 ), result1 );
534+
535+ Query query2 =
536+ query ("coll" ).filter (filter ("a" , "in" , Arrays .asList (2 , 3 ))).orderBy (orderBy ("a" ));
537+ DocumentSet result2 =
538+ expectOptimizedCollectionScan (() -> runQuery (query2 , SnapshotVersion .NONE ));
539+ assertEquals (docSet (query2 .comparator (), doc6 , doc3 ), result2 );
540+ }
400541}
0 commit comments