@@ -762,6 +762,119 @@ def test_cont_in_operator(self):
762
762
"result was {}" .format (test , result ))
763
763
self .schema .drop_collection (collection_name )
764
764
765
+ @unittest .skipIf (tests .MYSQL_VERSION < (8 , 0 , 17 ),
766
+ "OVERLAPS operator unavailable" )
767
+ def test_overlaps_operator (self ):
768
+ collection_name = "{0}.test" .format (self .schema_name )
769
+ collection = self .schema .create_collection (collection_name )
770
+ collection .add ({
771
+ "_id" : "a6f4b93e1a264a108393524f29546a8c" ,
772
+ "title" : "AFRICAN EGG" ,
773
+ "description" : "A Fast-Paced Documentary of a Pastry Chef And a "
774
+ "Dentist who must Pursue a Forensic Psychologist in "
775
+ "The Gulf of Mexico" ,
776
+ "releaseyear" : 2006 ,
777
+ "language" : "English" ,
778
+ "duration" : 130 ,
779
+ "rating" : "G" ,
780
+ "genre" : "Science fiction" ,
781
+ "actors" : [{
782
+ "name" : "MILLA PECK" ,
783
+ "country" : "Mexico" ,
784
+ "birthdate" : "12 Jan 1984"
785
+ }, {
786
+ "name" : "VAL BOLGER" ,
787
+ "country" : "Botswana" ,
788
+ "birthdate" : "26 Jul 1975"
789
+ }, {
790
+ "name" : "SCARLETT BENING" ,
791
+ "country" : "Syria" ,
792
+ "birthdate" : "16 Mar 1978"
793
+ }],
794
+ "additionalinfo" : {
795
+ "director" : "Sharice Legaspi" ,
796
+ "writers" : ["Rusty Couturier" , "Angelic Orduno" , "Carin Postell" ],
797
+ "productioncompanies" : ["Qvodrill" , "Indigoholdings" ]
798
+ }
799
+ }).execute ()
800
+
801
+ test_cases = [
802
+ ("(1+5) overlaps (1, 2, 3, 4, 5)" , None ),
803
+ ("(1>5) overlaps (true, false)" , None ),
804
+ ("('a'>'b') overlaps (true, false)" , None ),
805
+ ("(1>5) overlaps [true, false]" , None ),
806
+ ("[1>5] overlaps [true, false]" , True ),
807
+ ("[(1+5)] overlaps [1, 2, 3, 4, 5]" , False ),
808
+ ("[(1+4)] overlaps [1, 2, 3, 4, 5]" , True ),
809
+ ("('a'>'b') overlaps [true, false]" , None ),
810
+ ("true overlaps [(1>5), !(false), (true || false), (false && true)]" ,
811
+ True ),
812
+ ("true overlaps ((1>5), !(false), (true || false), (false && true))" ,
813
+ None ),
814
+ ("{ 'name' : 'MILLA PECK' } overlaps actors" , False ),
815
+ ("{\" field\" :true} overlaps (\" mystring\" , 124, myvar, othervar.jsonobj)" ,
816
+ None ),
817
+ ("actor.name overlaps ['a name', null, (1<5-4), myvar.jsonobj.name]" ,
818
+ None ),
819
+ ("!false && true overlaps [true]" , True ),
820
+ ("1-5/2*2 > 3-2/1*2 overlaps [true, false]" , None ),
821
+ ("true IN [1-5/2*2 > 3-2/1*2]" , False ),
822
+ ("'African Egg' overlaps ('African Egg', 1, true, NULL, [0,1,2], "
823
+ "{ 'title' : 'Atomic Firefighter' })" , None ),
824
+ ("1 overlaps ('African Egg', 1, true, NULL, [0,1,2], "
825
+ "{ 'title' : 'Atomic Firefighter' })" , None ),
826
+ ("true overlaps ('African Egg', 1, false, NULL, [0,1,2], "
827
+ "{ 'title' : 'Atomic Firefighter' })" , None ),
828
+ ("false overlaps ('African Egg', 1, true, NULL, [0,1,2], "
829
+ "{ 'title' : 'Atomic Firefighter' })" , None ),
830
+ ("false overlaps ('African Egg', 1, true, 'No null', [0,1,2], "
831
+ "{ 'title' : 'Atomic Firefighter' })" , None ),
832
+ ("[0,1,2] overlaps ('African Egg', 1, true, NULL, [0,1,2], "
833
+ "{ 'title' : 'Atomic Firefighter' })" , None ),
834
+ ("{ 'title' : 'Atomic Firefighter' } overlaps ('African Egg', 1, true, "
835
+ "NULL, [0,1,2], { 'title' : 'Atomic Firefighter' })" , None ),
836
+ ("title overlaps ('African Egg', 'The Witcher', 'Jurassic Perk')" , None ),
837
+ ("releaseyear overlaps (2006, 2010, 2017)" , None ),
838
+ ("'African overlaps' in movietitle" , None ),
839
+ ("0 NOT overlaps [1,2,3]" , True ),
840
+ ("1 NOT overlaps [1,2,3]" , False ),
841
+ ("[0] NOT overlaps [1,2,3]" , True ),
842
+ ("[1] NOT overlaps [1,2,3]" , False ),
843
+ ("[!false && true] OVERLAPS [true]" , True ),
844
+ ("[!false AND true] OVERLAPS [true]" , True ),
845
+ ("[!false & true] OVERLAPS [true]" , False ),
846
+ ("'' IN title" , False ),
847
+ ("title overlaps ('', ' ')" , None ),
848
+ ("title overlaps ['', ' ']" , False ),
849
+ ("[\" Rusty Couturier\" , \" Angelic Orduno\" , \" Carin Postell\" ] IN "
850
+ "additionalinfo.writers" , True ),
851
+ ("{ \" name\" : \" MILLA PECK\" , \" country\" : \" Mexico\" , "
852
+ "\" birthdate\" : \" 12 Jan 1984\" } IN actors" , True ),
853
+ ("releaseyear IN [2006, 2007, 2008]" , True ),
854
+ ("true overlaps title" , False ),
855
+ ("false overlaps genre" , False ),
856
+ ("'Sharice Legaspi' overlaps additionalinfo.director" , True ),
857
+ ("'Mexico' overlaps actors[*].country" , True ),
858
+ ("'Angelic Orduno' overlaps additionalinfo.writers" , True ),
859
+ ("[([1,2] overlaps [1,2])] overlaps [false] invalid [true]" , None ),
860
+ ("[([1] overlaps [2])] overlaps [3] invalid [true] as res" , None ),
861
+ ("[] []" , None ),
862
+ ("[] TRUE as res" , None )
863
+ ]
864
+
865
+ for test in test_cases :
866
+ try :
867
+ result = collection .find () \
868
+ .fields ("{0} as res" .format (test [0 ])) \
869
+ .execute ().fetch_one ()
870
+ except :
871
+ self .assertEqual (None , test [1 ], "For test case {} "
872
+ "exeption was not expected." .format (test ))
873
+ else :
874
+ self .assertEqual (result ['res' ], test [1 ], "For test case {} "
875
+ "result was {}" .format (test , result ))
876
+ self .schema .drop_collection (collection_name )
877
+
765
878
def test_ilri_expressions (self ):
766
879
collection_name = "{0}.test" .format (self .schema_name )
767
880
collection = self .schema .create_collection (collection_name )
0 commit comments