11package io .github .thunderz99 .cosmos ;
22
3+ import java .util .ArrayList ;
4+ import java .util .List ;
5+ import java .util .Map ;
6+ import java .util .Set ;
7+
38import com .microsoft .azure .documentdb .SqlParameter ;
49import com .microsoft .azure .documentdb .SqlParameterCollection ;
510import io .github .thunderz99 .cosmos .condition .Aggregate ;
1217import org .slf4j .Logger ;
1318import org .slf4j .LoggerFactory ;
1419
15- import java .util .ArrayList ;
16- import java .util .List ;
17- import java .util .Map ;
18- import java .util .Set ;
19-
2020import static io .github .thunderz99 .cosmos .condition .Condition .SubConditionType ;
2121import static org .assertj .core .api .Assertions .assertThat ;
2222import static org .assertj .core .api .Assertions .assertThatThrownBy ;
@@ -662,22 +662,23 @@ void get_database_name_should_work() throws Exception {
662662
663663 @ Test
664664 void dynamic_field_with_hyphen_should_work () throws Exception {
665- var partition = "SheetConents" ;
665+ var partition = "SheetConents" ;
666666
667- var id = "D001" ; // form with content
668- var formId = "829cc727-2d49-4d60-8f91-b30f50560af7" ; //uuid
669- var formContent = Map .of ("name" , "Tom" , "sex" , "Male" , "address" , "NY" );
670- var data = Map .of ("id" , id , formId , formContent , "sheet-2" , Map .of ("skills" , Set .of ("Java" , "Python" )));
667+ var id = "D001" ; // form with content
668+ var age = 20 ;
669+ var formId = "829cc727-2d49-4d60-8f91-b30f50560af7" ; //uuid
670+ var formContent = Map .of ("name" , "Tom" , "sex" , "Male" , "address" , "NY" );
671+ var data = Map .of ("id" , id , "age" , age , formId , formContent , "sheet-2" , Map .of ("skills" , Set .of ("Java" , "Python" )));
671672
672- var id2 = "D002" ; // form is empty
673- var formContent2 = Map .of ("name" , "" , "sex" , "" , "empty" , true );
674- var data2 = Map .of ("id" , id2 , formId , formContent2 );
673+ var id2 = "D002" ; // form is empty
674+ var formContent2 = Map .of ("name" , "" , "sex" , "" , "empty" , true );
675+ var data2 = Map .of ("id" , id2 , formId , formContent2 );
675676
676- var id3 = "D003" ; // form is undefined
677- var data3 = Map .of ("id" , id3 );
677+ var id3 = "D003" ; // form is undefined
678+ var data3 = Map .of ("id" , id3 );
678679
679680
680- try {
681+ try {
681682 db .upsert (coll , data , partition );
682683 db .upsert (coll , data2 , partition );
683684 db .upsert (coll , data3 , partition );
@@ -690,43 +691,68 @@ void dynamic_field_with_hyphen_should_work() throws Exception {
690691 assertThat (items ).hasSize (1 );
691692 var map = JsonUtil .toMap (JsonUtil .toJson (items .get (0 ).get (formId )));
692693 assertThat (map ).containsEntry ("name" , "Tom" ).containsEntry ("sex" , "Male" ).containsEntry ("address" , "NY" );
693- }
694-
695- {
696- // IS_DEFINED = true
697- var cond = Condition .filter ("id" , id , String .format ("%s IS_DEFINED" , formId ), true );
698- var items = db .find (coll , cond , partition ).toMap ();
699- assertThat (items ).hasSize (1 );
700- assertThat (items .get (0 ).get ("id" )).isEqualTo (id );
701- }
702-
703- {
704- // IS_DEFINED = false
705- var cond = Condition .filter ("id" , id , "test IS_DEFINED" , false );
706- var items = db .find (coll , cond , partition ).toMap ();
707- assertThat (items ).hasSize (1 );
708- assertThat (items .get (0 ).get ("id" )).isEqualTo (id );
709- }
710-
711- {
712- // IS_DEFINED = false in OR condition. result: 2 item
713- var cond = Condition .filter ("id LIKE" , "D00%" , SubConditionType .SUB_COND_OR , List .of (
714- Condition .filter (String .format ("%s IS_DEFINED" , formId ), false ),
715- Condition .filter (String .format ("%s.empty" , formId ), true )
716- )).sort ("id" , "ASC" );
717- var items = db .find (coll , cond , partition ).toMap ();
718- assertThat (items ).hasSize (2 );
719- assertThat (items .get (0 ).get ("id" )).isEqualTo (id2 );
720- assertThat (items .get (1 ).get ("id" )).isEqualTo (id3 );
721- }
722-
723- {
724- // IS_DEFINED = false in OR condition. result: 1 item
725- var cond = Condition .filter ("id LIKE" , "D00%" , SubConditionType .SUB_COND_AND , List .of (
726- Condition .filter (String .format ("%s.name IS_DEFINED" , formId ), true ),
727- Condition .filter (String .format ("%s.empty IS_DEFINED" , formId ), false )
728- )).sort ("id" , "ASC" );
729- var items = db .find (coll , cond , partition ).toMap ();
694+ }
695+
696+ {
697+ // IS_DEFINED = true
698+ var cond = Condition .filter ("id" , id , String .format ("%s IS_DEFINED" , formId ), true );
699+ var items = db .find (coll , cond , partition ).toMap ();
700+ assertThat (items ).hasSize (1 );
701+ assertThat (items .get (0 ).get ("id" )).isEqualTo (id );
702+ }
703+
704+ {
705+ // IS_DEFINED = false
706+ var cond = Condition .filter ("id" , id , "test IS_DEFINED" , false );
707+ var items = db .find (coll , cond , partition ).toMap ();
708+ assertThat (items ).hasSize (1 );
709+ assertThat (items .get (0 ).get ("id" )).isEqualTo (id );
710+ }
711+
712+ {
713+ // IS_NUMBER = true
714+ var cond = Condition .filter ("id" , id , "age IS_NUMBER" , true );
715+ var items = db .find (coll , cond , partition ).toMap ();
716+ assertThat (items ).hasSize (1 );
717+ assertThat (items .get (0 ).get ("id" )).isEqualTo (id );
718+ }
719+ {
720+ // IS_NUMBER = false
721+ var cond = Condition .filter ("id" , id , String .format ("%s IS_NUMBER" , formId ), false );
722+ var items = db .find (coll , cond , partition ).toMap ();
723+ assertThat (items ).hasSize (1 );
724+ assertThat (items .get (0 ).get ("id" )).isEqualTo (id );
725+ }
726+
727+ {
728+ // use rawSql to implement IS_NUMBER
729+ var cond1 = Condition .filter ("id" , id );
730+ var cond2 = Condition .rawSql ("IS_NUMBER(c.test) = false" );
731+ var cond = Condition .filter (SubConditionType .SUB_COND_AND , List .of (cond1 , cond2 ));
732+ var items = db .find (coll , cond , partition ).toMap ();
733+ assertThat (items ).hasSize (1 );
734+ assertThat (items .get (0 ).get ("id" )).isEqualTo (id );
735+ }
736+
737+ {
738+ // IS_DEFINED = false in OR condition. result: 2 item
739+ var cond = Condition .filter ("id LIKE" , "D00%" , SubConditionType .SUB_COND_OR , List .of (
740+ Condition .filter (String .format ("%s IS_DEFINED" , formId ), false ),
741+ Condition .filter (String .format ("%s.empty" , formId ), true )
742+ )).sort ("id" , "ASC" );
743+ var items = db .find (coll , cond , partition ).toMap ();
744+ assertThat (items ).hasSize (2 );
745+ assertThat (items .get (0 ).get ("id" )).isEqualTo (id2 );
746+ assertThat (items .get (1 ).get ("id" )).isEqualTo (id3 );
747+ }
748+
749+ {
750+ // IS_DEFINED = false in OR condition. result: 1 item
751+ var cond = Condition .filter ("id LIKE" , "D00%" , SubConditionType .SUB_COND_AND , List .of (
752+ Condition .filter (String .format ("%s.name IS_DEFINED" , formId ), true ),
753+ Condition .filter (String .format ("%s.empty IS_DEFINED" , formId ), false )
754+ )).sort ("id" , "ASC" );
755+ var items = db .find (coll , cond , partition ).toMap ();
730756 assertThat (items ).hasSize (1 );
731757 assertThat (items .get (0 ).get ("id" )).isEqualTo (id );
732758 }
0 commit comments