@@ -449,6 +449,163 @@ public void withMultipleNotIn() {
449
449
validateServesTarget (q , "a" , FieldIndex .Segment .Kind .ASCENDING );
450
450
}
451
451
452
+ @ Test
453
+ public void buildTargetIndex () {
454
+ Query q =
455
+ query ("collId" )
456
+ .filter (filter ("a" , "==" , 1 ))
457
+ .filter (filter ("b" , "==" , 2 ))
458
+ .orderBy (orderBy ("__name__" , "desc" ));
459
+ TargetIndexMatcher targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
460
+ FieldIndex expectedIndex = targetIndexMatcher .BuildTargetIndex ();
461
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
462
+
463
+ q = query ("collId" ).orderBy (orderBy ("a" ));
464
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
465
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
466
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
467
+
468
+ q = query ("collId" ).orderBy (orderBy ("a" )).orderBy (orderBy ("b" ));
469
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
470
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
471
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
472
+
473
+ q = query ("collId" ).filter (filter ("a" , "array-contains" , "a" )).orderBy (orderBy ("b" ));
474
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
475
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
476
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
477
+
478
+ q = query ("collId" ).orderBy (orderBy ("b" ));
479
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
480
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
481
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
482
+
483
+ q = query ("collId" ).orderBy (orderBy ("a" ));
484
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
485
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
486
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
487
+
488
+ q = query ("collId" ).filter (filter ("a" , ">" , 1 )).filter (filter ("a" , "<" , 10 ));
489
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
490
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
491
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
492
+
493
+ q = query ("collId" ).filter (filter ("a" , "in" , Arrays .asList (1 , 2 ))).filter (filter ("b" , "==" , 5 ));
494
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
495
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
496
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
497
+
498
+ q = query ("collId" ).filter (filter ("value" , "array-contains" , "foo" )).orderBy (orderBy ("value" ));
499
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
500
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
501
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
502
+
503
+ q =
504
+ query ("collId" )
505
+ .filter (filter ("a" , "array-contains" , "a" ))
506
+ .filter (filter ("a" , ">" , "b" ))
507
+ .orderBy (orderBy ("a" , "asc" ));
508
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
509
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
510
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
511
+
512
+ q = query ("collId" ).filter (filter ("a" , "==" , 1 )).orderBy (orderBy ("__name__" , "desc" ));
513
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
514
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
515
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
516
+
517
+ q = query ("collId" ).filter (filter ("a1" , "==" , "a" )).filter (filter ("a2" , "==" , "b" ));
518
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
519
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
520
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
521
+
522
+ q =
523
+ query ("collId" )
524
+ .filter (filter ("equality1" , "==" , "a" ))
525
+ .filter (filter ("equality2" , "==" , "b" ))
526
+ .filter (filter ("inequality" , ">=" , "c" ));
527
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
528
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
529
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
530
+
531
+ q =
532
+ query ("collId" )
533
+ .filter (filter ("equality1" , "==" , "a" ))
534
+ .filter (filter ("inequality" , ">=" , "c" ))
535
+ .filter (filter ("equality2" , "==" , "b" ));
536
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
537
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
538
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
539
+
540
+ q = query ("collId" ).orderBy (orderBy ("a" ));
541
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
542
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
543
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
544
+
545
+ q = query ("collId" ).orderBy (orderBy ("a" , "desc" ));
546
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
547
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
548
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
549
+
550
+ q = query ("collId" ).orderBy (orderBy ("a" )).orderBy (orderBy ("__name__" ));
551
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
552
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
553
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
554
+
555
+ q = query ("collId" ).filter (filter ("a" , "!=" , 1 ));
556
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
557
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
558
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
559
+
560
+ q = query ("collId" ).filter (filter ("a" , "!=" , 1 )).orderBy (orderBy ("a" )).orderBy (orderBy ("b" ));
561
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
562
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
563
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
564
+
565
+ q = query ("collId" ).filter (filter ("a" , "==" , "a" )).filter (filter ("b" , ">" , "b" ));
566
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
567
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
568
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
569
+
570
+ q =
571
+ query ("collId" )
572
+ .filter (filter ("a1" , "==" , "a" ))
573
+ .filter (filter ("a2" , ">" , "b" ))
574
+ .orderBy (orderBy ("a2" , "asc" ));
575
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
576
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
577
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
578
+
579
+ q =
580
+ query ("collId" )
581
+ .filter (filter ("a" , ">=" , 1 ))
582
+ .filter (filter ("a" , "==" , 5 ))
583
+ .filter (filter ("a" , "<=" , 10 ));
584
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
585
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
586
+ // assertTrue(targetIndexMatcher.servedByIndex(expectedIndex));
587
+
588
+ q =
589
+ query ("collId" )
590
+ .filter (filter ("a" , "not-in" , Arrays .asList (1 , 2 , 3 )))
591
+ .filter (filter ("a" , ">=" , 2 ));
592
+ targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
593
+ expectedIndex = targetIndexMatcher .BuildTargetIndex ();
594
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
595
+ }
596
+
597
+ @ Test
598
+ public void failedTest () {
599
+ Query q =
600
+ query ("collId" )
601
+ .filter (filter ("a" , ">=" , 1 ))
602
+ .filter (filter ("a" , "==" , 5 ))
603
+ .filter (filter ("a" , "<=" , 10 ));
604
+ TargetIndexMatcher targetIndexMatcher = new TargetIndexMatcher (q .toTarget ());
605
+ FieldIndex expectedIndex = targetIndexMatcher .BuildTargetIndex ();
606
+ assertTrue (targetIndexMatcher .servedByIndex (expectedIndex ));
607
+ }
608
+
452
609
@ Test
453
610
public void withMultipleOrderBys () {
454
611
Query q =
0 commit comments