1717
1818import java .beans .PropertyDescriptor ;
1919import java .util .ArrayList ;
20- import java .util .Arrays ;
2120import java .util .Collection ;
2221import java .util .Collections ;
2322import java .util .LinkedHashMap ;
@@ -624,18 +623,22 @@ private static StatementBuilder<Select> createSelectAndOrder(List<Selector> sele
624623 select = QueryBuilder .selectFrom (from ).all ();
625624 } else {
626625
627- List <com .datastax .oss .driver .api .querybuilder .select .Selector > mappedSelectors = selectors .stream ()
628- .map (selector -> selector .getAlias ().map (it -> getSelection (selector ).as (it ))
629- .orElseGet (() -> getSelection (selector )))
630- .collect (Collectors .toList ());
626+ List <com .datastax .oss .driver .api .querybuilder .select .Selector > mappedSelectors = new ArrayList <>(
627+ selectors .size ());
628+ for (Selector selector : selectors ) {
629+ com .datastax .oss .driver .api .querybuilder .select .Selector orElseGet = selector .getAlias ()
630+ .map (it -> getSelection (selector ).as (it )).orElseGet (() -> getSelection (selector ));
631+ mappedSelectors .add (orElseGet );
632+ }
631633
632634 select = QueryBuilder .selectFrom (from ).selectors (mappedSelectors );
633635 }
634636
635637 StatementBuilder <Select > builder = StatementBuilder .of (select );
636638
637- builder .bind ((statement , factory ) -> statement
638- .where (filter .stream ().map (it -> toClause (it , factory )).collect (Collectors .toList ())));
639+ builder .bind ((statement , factory ) -> {
640+ return statement .where (getRelations (filter , factory ));
641+ });
639642
640643 if (sort .isSorted ()) {
641644
@@ -655,6 +658,14 @@ private static StatementBuilder<Select> createSelectAndOrder(List<Selector> sele
655658 return builder ;
656659 }
657660
661+ private static List <Relation > getRelations (Filter filter , TermFactory factory ) {
662+ List <Relation > relations = new ArrayList <>();
663+ for (CriteriaDefinition criteriaDefinition : filter ) {
664+ relations .add (toClause (criteriaDefinition , factory ));
665+ }
666+ return relations ;
667+ }
668+
658669 private static com .datastax .oss .driver .api .querybuilder .select .Selector getSelection (Selector selector ) {
659670
660671 if (selector instanceof FunctionCall ) {
@@ -693,11 +704,7 @@ private static StatementBuilder<com.datastax.oss.driver.api.querybuilder.update.
693704 .set (assignments );
694705
695706 }).bind ((statement , factory ) -> {
696-
697- List <Relation > relations = filter .stream ().map (criteriaDefinition -> toClause (criteriaDefinition , factory ))
698- .collect (Collectors .toList ());
699-
700- return statement .where (relations );
707+ return statement .where (getRelations (filter , factory ));
701708 });
702709 }
703710
@@ -840,11 +847,7 @@ private StatementBuilder<Delete> delete(List<CqlIdentifier> columnNames, CqlIden
840847 }
841848
842849 return StatementBuilder .of (select .where ()).bind ((statement , factory ) -> {
843-
844- List <Relation > relations = filter .stream ().map (criteriaDefinition -> toClause (criteriaDefinition , factory ))
845- .collect (Collectors .toList ());
846-
847- return statement .where (relations );
850+ return statement .where (getRelations (filter , factory ));
848851 });
849852 }
850853
@@ -964,20 +967,9 @@ private static Relation toClause(CriteriaDefinition criteriaDefinition, TermFact
964967
965968 case IN :
966969
967- if (predicate .getValue () instanceof List ) {
968-
969- List <Term > literals = ((List <?>) predicate .getValue ()).stream ().map (QueryBuilder ::literal )
970- .collect (Collectors .toList ());
971-
972- return column .in (literals );
973- }
974-
975- if (predicate .getValue () != null && predicate .getValue ().getClass ().isArray ()) {
976-
977- List <Term > literals = Arrays .stream ((Object []) predicate .getValue ()).map (QueryBuilder ::literal )
978- .collect (Collectors .toList ());
979-
980- return column .in (literals );
970+ if (predicate .getValue () instanceof List
971+ || (predicate .getValue () != null && predicate .getValue ().getClass ().isArray ())) {
972+ return column .in (toLiterals (predicate .getValue ()));
981973 }
982974
983975 return column .in (factory .create (predicate .getValue ()));
@@ -1040,27 +1032,43 @@ private static Condition toCondition(CriteriaDefinition criteriaDefinition, Term
10401032
10411033 case IN :
10421034
1043- if (predicate .getValue () instanceof List ) {
1035+ if (predicate .getValue () instanceof List
1036+ || (predicate .getValue () != null && predicate .getValue ().getClass ().isArray ())) {
1037+ return column .in (toLiterals (predicate .getValue ()));
1038+ }
10441039
1045- List < Term > literals = (( List <?>) predicate .getValue ()). stream (). map ( QueryBuilder :: literal )
1046- . collect ( Collectors . toList ());
1040+ return column . in ( factory . create ( predicate .getValue ()));
1041+ }
10471042
1048- return column .in (literals );
1049- }
1043+ throw new IllegalArgumentException (String .format ("Criteria %s %s %s not supported for IF Conditions" , columnName ,
1044+ predicate .getOperator (), predicate .getValue ()));
1045+ }
10501046
1051- if ( predicate . getValue () != null && predicate . getValue (). getClass (). isArray () ) {
1047+ static List < Term > toLiterals ( @ Nullable Object arrayOrList ) {
10521048
1053- List <Term > literals = Arrays .stream ((Object []) predicate .getValue ()).map (QueryBuilder ::literal )
1054- .collect (Collectors .toList ());
1049+ if (arrayOrList instanceof List ) {
10551050
1056- return column .in (literals );
1057- }
1051+ List <?> list = (List <?>) arrayOrList ;
1052+ List <Term > literals = new ArrayList <>(list .size ());
1053+ for (Object o : list ) {
1054+ literals .add (QueryBuilder .literal (o ));
1055+ }
10581056
1059- return column . in ( factory . create ( predicate . getValue ())) ;
1057+ return literals ;
10601058 }
10611059
1062- throw new IllegalArgumentException (String .format ("Criteria %s %s %s not supported for IF Conditions" , columnName ,
1063- predicate .getOperator (), predicate .getValue ()));
1060+ if (arrayOrList != null && arrayOrList .getClass ().isArray ()) {
1061+
1062+ Object [] array = (Object []) arrayOrList ;
1063+ List <Term > literals = new ArrayList <>(array .length );
1064+ for (Object o : array ) {
1065+ literals .add (QueryBuilder .literal (o ));
1066+ }
1067+
1068+ return literals ;
1069+ }
1070+
1071+ return Collections .emptyList ();
10641072 }
10651073
10661074 static class SimpleSelector implements com .datastax .oss .driver .api .querybuilder .select .Selector {
0 commit comments