@@ -975,6 +975,11 @@ public final class DirectUtils {
975975 */
976976 private static final String QUERY_GET_USERS_FROM_HANDLE = "SELECT user_id, handle FROM user WHERE handle in (" ;
977977
978+ /**
979+ * max ids per query of {@link #getUsersFromId}
980+ */
981+ private static final int MAX_IDS_PER_QUERY = 1000 ;
982+
978983 private static final String QUERY_GET_USERS_FROM_ID = "SELECT user_id, handle FROM user WHERE user_id in (" ;
979984
980985 private static final String QUERY_GET_SECURITY_GROUP_FROM_ID = "SELECT group_id, description FROM security_groups " +
@@ -3669,24 +3674,31 @@ public static List<? extends Map<String,String>> getUsersFromId(Long[] uids) thr
36693674
36703675 try {
36713676 con = DatabaseUtils .getDatabaseConnection (DBMS .COMMON_OLTP_DATASOURCE_NAME );
3672- StringBuilder sbQueryUsers = new StringBuilder (QUERY_GET_USERS_FROM_ID );
3673- for (int i = 0 ; i < uids .length ; i ++){
3674- sbQueryUsers .append (" ?," );
3675- }
3676- sbQueryUsers .setCharAt (sbQueryUsers .length () - 1 , ')' );
3677+ List <HashMap <String , String >> result = new ArrayList <HashMap <String , String >>();
3678+ int to = 0 ;
3679+ int from = 0 ;
3680+ while (to < uids .length ) {
3681+ StringBuilder sbQueryUsers = new StringBuilder (QUERY_GET_USERS_FROM_ID );
3682+ to += (to + MAX_IDS_PER_QUERY ) > uids .length ? (uids .length - to ) : MAX_IDS_PER_QUERY ;
3683+ for (int i = from ; i < to ; i ++) {
3684+ sbQueryUsers .append (" ?," );
3685+ }
3686+ sbQueryUsers .setCharAt (sbQueryUsers .length () - 1 , ')' );
36773687
3678- ps = con .prepareStatement (sbQueryUsers .toString ());
3688+ ps = con .prepareStatement (sbQueryUsers .toString ());
36793689
3680- for (int i = 0 ; i < uids .length ; i ++){
3681- ps .setString (i + 1 , String .valueOf (uids [i ]));
3682- }
3683- rs = ps .executeQuery ();
3684- List <HashMap <String ,String >> result = new ArrayList <HashMap <String ,String >>();
3685- while (rs .next ()){
3686- HashMap <String ,String > user = new HashMap <String ,String >();
3687- user .put ("userId" , String .valueOf (rs .getLong ("user_id" )));
3688- user .put ("handle" , rs .getString ("handle" ));
3689- result .add (user );
3690+ for (int i = from ; i < to ; i ++) {
3691+ ps .setString ((i - from ) + 1 , String .valueOf (uids [i ]));
3692+ }
3693+ rs = ps .executeQuery ();
3694+
3695+ while (rs .next ()) {
3696+ HashMap <String , String > user = new HashMap <String , String >();
3697+ user .put ("userId" , String .valueOf (rs .getLong ("user_id" )));
3698+ user .put ("handle" , rs .getString ("handle" ));
3699+ result .add (user );
3700+ }
3701+ from = to ;
36903702 }
36913703 return result ;
36923704 }finally {
0 commit comments