@@ -944,63 +944,65 @@ private static Relation toClause(CriteriaDefinition criteriaDefinition, TermFact
944944 () -> new IllegalArgumentException (String .format ("Unknown operator [%s]" , predicate .getOperator ())));
945945
946946 ColumnRelationBuilder <Relation > column = Relation .column (columnName );
947+ Object value = predicate .getValue ();
948+
947949 switch (predicateOperator ) {
948950
949951 case EQ :
950- return column .isEqualTo (factory .create (predicate . getValue () ));
952+ return column .isEqualTo (factory .create (value ));
951953
952954 case NE :
953- return column .isNotEqualTo (factory .create (predicate . getValue () ));
955+ return column .isNotEqualTo (factory .create (value ));
954956
955957 case GT :
956- return column .isGreaterThan (factory .create (predicate . getValue () ));
958+ return column .isGreaterThan (factory .create (value ));
957959
958960 case GTE :
959- return column .isGreaterThanOrEqualTo (factory .create (predicate . getValue () ));
961+ return column .isGreaterThanOrEqualTo (factory .create (value ));
960962
961963 case LT :
962- return column .isLessThan (factory .create (predicate . getValue () ));
964+ return column .isLessThan (factory .create (value ));
963965
964966 case LTE :
965- return column .isLessThanOrEqualTo (factory .create (predicate . getValue () ));
967+ return column .isLessThanOrEqualTo (factory .create (value ));
966968
967969 case IN :
968970
969- if (predicate . getValue () instanceof List
970- || ( predicate . getValue () != null && predicate . getValue (). getClass (). isArray ())) {
971- Term term = factory .create ( predicate . getValue ());
972- if ( term instanceof BindMarker ) {
973- return column .in ((BindMarker ) term );
971+ if (isCollectionLike ( value )) {
972+
973+ if ( factory .canBindCollection ()) {
974+ Term term = factory . create ( value );
975+ return term instanceof BindMarker ? column .in ((BindMarker ) term ) : column . in ( term );
974976 }
975977
976- return column .in (toLiterals (predicate . getValue () ));
978+ return column .in (toLiterals (value ));
977979 }
978980
979- return column .in (factory .create (predicate . getValue () ));
981+ return column .in (factory .create (value ));
980982
981983 case LIKE :
982- return column .like (factory .create (predicate . getValue () ));
984+ return column .like (factory .create (value ));
983985
984986 case IS_NOT_NULL :
985987 return column .isNotNull ();
986988
987989 case CONTAINS :
988990
989- Assert .state (predicate . getValue () != null ,
991+ Assert .state (value != null ,
990992 () -> String .format ("CONTAINS value for column %s is null" , columnName ));
991993
992- return column .contains (factory .create (predicate . getValue () ));
994+ return column .contains (factory .create (value ));
993995
994996 case CONTAINS_KEY :
995997
996- Assert .state (predicate . getValue () != null ,
998+ Assert .state (value != null ,
997999 () -> String .format ("CONTAINS KEY value for column %s is null" , columnName ));
9981000
999- return column .containsKey (factory .create (predicate . getValue () ));
1001+ return column .containsKey (factory .create (value ));
10001002 }
10011003
10021004 throw new IllegalArgumentException (
1003- String .format ("Criteria %s %s %s not supported" , columnName , predicate .getOperator (), predicate . getValue () ));
1005+ String .format ("Criteria %s %s %s not supported" , columnName , predicate .getOperator (), value ));
10041006 }
10051007
10061008 private static Condition toCondition (CriteriaDefinition criteriaDefinition , TermFactory factory ) {
@@ -1014,43 +1016,45 @@ private static Condition toCondition(CriteriaDefinition criteriaDefinition, Term
10141016 () -> new IllegalArgumentException (String .format ("Unknown operator [%s]" , predicate .getOperator ())));
10151017
10161018 ConditionBuilder <Condition > column = Condition .column (columnName );
1019+ Object value = predicate .getValue ();
1020+
10171021 switch (predicateOperator ) {
10181022
10191023 case EQ :
1020- return column .isEqualTo (factory .create (predicate . getValue () ));
1024+ return column .isEqualTo (factory .create (value ));
10211025
10221026 case NE :
1023- return column .isNotEqualTo (factory .create (predicate . getValue () ));
1027+ return column .isNotEqualTo (factory .create (value ));
10241028
10251029 case GT :
1026- return column .isGreaterThan (factory .create (predicate . getValue () ));
1030+ return column .isGreaterThan (factory .create (value ));
10271031
10281032 case GTE :
1029- return column .isGreaterThanOrEqualTo (factory .create (predicate . getValue () ));
1033+ return column .isGreaterThanOrEqualTo (factory .create (value ));
10301034
10311035 case LT :
1032- return column .isLessThan (factory .create (predicate . getValue () ));
1036+ return column .isLessThan (factory .create (value ));
10331037
10341038 case LTE :
1035- return column .isLessThanOrEqualTo (factory .create (predicate . getValue () ));
1039+ return column .isLessThanOrEqualTo (factory .create (value ));
10361040
10371041 case IN :
10381042
1039- if (predicate . getValue () instanceof List
1040- || ( predicate . getValue () != null && predicate . getValue (). getClass (). isArray ())) {
1041- Term term = factory .create ( predicate . getValue ());
1042- if ( term instanceof BindMarker ) {
1043- return column .in ((BindMarker ) term );
1043+ if (isCollectionLike ( value )) {
1044+
1045+ if ( factory .canBindCollection ()) {
1046+ Term term = factory . create ( value );
1047+ return term instanceof BindMarker ? column .in ((BindMarker ) term ) : column . in ( term );
10441048 }
10451049
1046- return column .in (toLiterals (predicate . getValue () ));
1050+ return column .in (toLiterals (value ));
10471051 }
10481052
1049- return column .in (factory .create (predicate . getValue () ));
1053+ return column .in (factory .create (value ));
10501054 }
10511055
10521056 throw new IllegalArgumentException (String .format ("Criteria %s %s %s not supported for IF Conditions" , columnName ,
1053- predicate .getOperator (), predicate . getValue () ));
1057+ predicate .getOperator (), value ));
10541058 }
10551059
10561060 static List <Term > toLiterals (@ Nullable Object arrayOrList ) {
@@ -1084,6 +1088,10 @@ static List<Term> toLiterals(@Nullable Object arrayOrList, Function<Object, Term
10841088 return Collections .emptyList ();
10851089 }
10861090
1091+ private static boolean isCollectionLike (@ Nullable Object value ) {
1092+ return value instanceof List || (value != null && value .getClass ().isArray ());
1093+ }
1094+
10871095 static class SimpleSelector implements com .datastax .oss .driver .api .querybuilder .select .Selector {
10881096
10891097 private final String selector ;
0 commit comments