@@ -153,9 +153,11 @@ public class ITDatastoreTest {
153
153
.set ("partial2" , ENTITY2 )
154
154
.build ();
155
155
156
- @ Rule public Timeout globalTimeout = Timeout .seconds (100 );
156
+ @ Rule
157
+ public Timeout globalTimeout = Timeout .seconds (100 );
157
158
158
- @ Rule public MultipleAttemptsRule multipleAttemptsRule = new MultipleAttemptsRule (3 );
159
+ @ Rule
160
+ public MultipleAttemptsRule multipleAttemptsRule = new MultipleAttemptsRule (3 );
159
161
160
162
@ AfterClass
161
163
public static void afterClass () {
@@ -582,6 +584,75 @@ public void testRunStructuredQuery() throws InterruptedException {
582
584
assertFalse (results4 .hasNext ());
583
585
}
584
586
587
+ @ Test
588
+ public void testInNotInNeqFilters () throws InterruptedException {
589
+ Entity e1 = Entity .newBuilder (ENTITY1 )
590
+ .setKey (Key .newBuilder (INCOMPLETE_KEY1 , "e1" ).build ())
591
+ .set ("v_int" , 10 )
592
+ .build ();
593
+ Entity e2 = Entity .newBuilder (ENTITY1 )
594
+ .setKey (Key .newBuilder (INCOMPLETE_KEY1 , "e2" ).build ())
595
+ .set ("v_int" , 20 )
596
+ .build ();
597
+ DATASTORE .put (e1 , e2 );
598
+
599
+ Query <Entity > queryIn =
600
+ Query .newEntityQueryBuilder ().setKind (KIND1 )
601
+ .setFilter (PropertyFilter .in ("v_int" , ListValue .of (10 , 20 ))).build ();
602
+
603
+ Query <Entity > scQueryIn =
604
+ Query .newEntityQueryBuilder ()
605
+ .setKind (KIND1 )
606
+ .setFilter (PropertyFilter .hasAncestor (ROOT_KEY ))
607
+ .setFilter (PropertyFilter .in ("v_int" , ListValue .of (10 , 20 )))
608
+ .build ();
609
+
610
+ Iterator <Entity > resultIn = getStronglyConsistentResults (scQueryIn , queryIn );
611
+
612
+ assertTrue (resultIn .hasNext ());
613
+ assertEquals (e1 , resultIn .next ());
614
+ assertTrue (resultIn .hasNext ());
615
+ assertEquals (e2 , resultIn .next ());
616
+ assertFalse (resultIn .hasNext ());
617
+
618
+ Query <Entity > queryNotIn =
619
+ Query .newEntityQueryBuilder ().setKind (KIND1 )
620
+ .setFilter (PropertyFilter .not_in ("v_int" , ListValue .of (20 , 30 ))).build ();
621
+
622
+ Query <Entity > scQueryNotIn =
623
+ Query .newEntityQueryBuilder ()
624
+ .setKind (KIND1 )
625
+ .setFilter (PropertyFilter .hasAncestor (ROOT_KEY ))
626
+ .setFilter (PropertyFilter .not_in ("v_int" , ListValue .of (20 , 30 )))
627
+ .build ();
628
+
629
+ Iterator <Entity > resultNotIn = getStronglyConsistentResults (scQueryNotIn , queryNotIn );
630
+
631
+ assertTrue (resultNotIn .hasNext ());
632
+ assertEquals (e1 , resultNotIn .next ());
633
+ assertFalse (resultNotIn .hasNext ());
634
+
635
+ Query <Entity > queryNeq =
636
+ Query .newEntityQueryBuilder ().setKind (KIND1 )
637
+ .setFilter (PropertyFilter .neq ("v_int" , 10 )).build ();
638
+
639
+ Query <Entity > scQueryNeq =
640
+ Query .newEntityQueryBuilder ()
641
+ .setKind (KIND1 )
642
+ .setFilter (PropertyFilter .hasAncestor (ROOT_KEY ))
643
+ .setFilter (PropertyFilter .neq ("v_int" , 10 ))
644
+ .build ();
645
+
646
+ Iterator <Entity > resultNeq = getStronglyConsistentResults (scQueryNeq , queryNeq );
647
+
648
+ assertTrue (resultNeq .hasNext ());
649
+ assertEquals (e2 , resultNeq .next ());
650
+ assertFalse (resultNeq .hasNext ());
651
+
652
+ DATASTORE .delete (e1 .getKey ());
653
+ DATASTORE .delete (e2 .getKey ());
654
+ }
655
+
585
656
@ Test
586
657
public void testAllocateId () {
587
658
KeyFactory keyFactory = DATASTORE .newKeyFactory ().setKind (KIND1 );
0 commit comments