@@ -397,4 +397,145 @@ public void queryWithMultipleInsOnDifferentFields() throws Exception {
397
397
expectOptimizedCollectionScan (() -> runQuery (query3 , SnapshotVersion .NONE ));
398
398
assertEquals (docSet (query3 .comparator (), doc4 ), result3 );
399
399
}
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
+ }
400
541
}
0 commit comments