@@ -944,63 +944,65 @@ private static Relation toClause(CriteriaDefinition criteriaDefinition, TermFact
944
944
() -> new IllegalArgumentException (String .format ("Unknown operator [%s]" , predicate .getOperator ())));
945
945
946
946
ColumnRelationBuilder <Relation > column = Relation .column (columnName );
947
+ Object value = predicate .getValue ();
948
+
947
949
switch (predicateOperator ) {
948
950
949
951
case EQ :
950
- return column .isEqualTo (factory .create (predicate . getValue () ));
952
+ return column .isEqualTo (factory .create (value ));
951
953
952
954
case NE :
953
- return column .isNotEqualTo (factory .create (predicate . getValue () ));
955
+ return column .isNotEqualTo (factory .create (value ));
954
956
955
957
case GT :
956
- return column .isGreaterThan (factory .create (predicate . getValue () ));
958
+ return column .isGreaterThan (factory .create (value ));
957
959
958
960
case GTE :
959
- return column .isGreaterThanOrEqualTo (factory .create (predicate . getValue () ));
961
+ return column .isGreaterThanOrEqualTo (factory .create (value ));
960
962
961
963
case LT :
962
- return column .isLessThan (factory .create (predicate . getValue () ));
964
+ return column .isLessThan (factory .create (value ));
963
965
964
966
case LTE :
965
- return column .isLessThanOrEqualTo (factory .create (predicate . getValue () ));
967
+ return column .isLessThanOrEqualTo (factory .create (value ));
966
968
967
969
case IN :
968
970
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 );
974
976
}
975
977
976
- return column .in (toLiterals (predicate . getValue () ));
978
+ return column .in (toLiterals (value ));
977
979
}
978
980
979
- return column .in (factory .create (predicate . getValue () ));
981
+ return column .in (factory .create (value ));
980
982
981
983
case LIKE :
982
- return column .like (factory .create (predicate . getValue () ));
984
+ return column .like (factory .create (value ));
983
985
984
986
case IS_NOT_NULL :
985
987
return column .isNotNull ();
986
988
987
989
case CONTAINS :
988
990
989
- Assert .state (predicate . getValue () != null ,
991
+ Assert .state (value != null ,
990
992
() -> String .format ("CONTAINS value for column %s is null" , columnName ));
991
993
992
- return column .contains (factory .create (predicate . getValue () ));
994
+ return column .contains (factory .create (value ));
993
995
994
996
case CONTAINS_KEY :
995
997
996
- Assert .state (predicate . getValue () != null ,
998
+ Assert .state (value != null ,
997
999
() -> String .format ("CONTAINS KEY value for column %s is null" , columnName ));
998
1000
999
- return column .containsKey (factory .create (predicate . getValue () ));
1001
+ return column .containsKey (factory .create (value ));
1000
1002
}
1001
1003
1002
1004
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 ));
1004
1006
}
1005
1007
1006
1008
private static Condition toCondition (CriteriaDefinition criteriaDefinition , TermFactory factory ) {
@@ -1014,43 +1016,45 @@ private static Condition toCondition(CriteriaDefinition criteriaDefinition, Term
1014
1016
() -> new IllegalArgumentException (String .format ("Unknown operator [%s]" , predicate .getOperator ())));
1015
1017
1016
1018
ConditionBuilder <Condition > column = Condition .column (columnName );
1019
+ Object value = predicate .getValue ();
1020
+
1017
1021
switch (predicateOperator ) {
1018
1022
1019
1023
case EQ :
1020
- return column .isEqualTo (factory .create (predicate . getValue () ));
1024
+ return column .isEqualTo (factory .create (value ));
1021
1025
1022
1026
case NE :
1023
- return column .isNotEqualTo (factory .create (predicate . getValue () ));
1027
+ return column .isNotEqualTo (factory .create (value ));
1024
1028
1025
1029
case GT :
1026
- return column .isGreaterThan (factory .create (predicate . getValue () ));
1030
+ return column .isGreaterThan (factory .create (value ));
1027
1031
1028
1032
case GTE :
1029
- return column .isGreaterThanOrEqualTo (factory .create (predicate . getValue () ));
1033
+ return column .isGreaterThanOrEqualTo (factory .create (value ));
1030
1034
1031
1035
case LT :
1032
- return column .isLessThan (factory .create (predicate . getValue () ));
1036
+ return column .isLessThan (factory .create (value ));
1033
1037
1034
1038
case LTE :
1035
- return column .isLessThanOrEqualTo (factory .create (predicate . getValue () ));
1039
+ return column .isLessThanOrEqualTo (factory .create (value ));
1036
1040
1037
1041
case IN :
1038
1042
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 );
1044
1048
}
1045
1049
1046
- return column .in (toLiterals (predicate . getValue () ));
1050
+ return column .in (toLiterals (value ));
1047
1051
}
1048
1052
1049
- return column .in (factory .create (predicate . getValue () ));
1053
+ return column .in (factory .create (value ));
1050
1054
}
1051
1055
1052
1056
throw new IllegalArgumentException (String .format ("Criteria %s %s %s not supported for IF Conditions" , columnName ,
1053
- predicate .getOperator (), predicate . getValue () ));
1057
+ predicate .getOperator (), value ));
1054
1058
}
1055
1059
1056
1060
static List <Term > toLiterals (@ Nullable Object arrayOrList ) {
@@ -1084,6 +1088,10 @@ static List<Term> toLiterals(@Nullable Object arrayOrList, Function<Object, Term
1084
1088
return Collections .emptyList ();
1085
1089
}
1086
1090
1091
+ private static boolean isCollectionLike (@ Nullable Object value ) {
1092
+ return value instanceof List || (value != null && value .getClass ().isArray ());
1093
+ }
1094
+
1087
1095
static class SimpleSelector implements com .datastax .oss .driver .api .querybuilder .select .Selector {
1088
1096
1089
1097
private final String selector ;
0 commit comments