@@ -975,6 +975,11 @@ public final class DirectUtils {
975
975
*/
976
976
private static final String QUERY_GET_USERS_FROM_HANDLE = "SELECT user_id, handle FROM user WHERE handle in (" ;
977
977
978
+ /**
979
+ * max ids per query of {@link #getUsersFromId}
980
+ */
981
+ private static final int MAX_IDS_PER_QUERY = 1000 ;
982
+
978
983
private static final String QUERY_GET_USERS_FROM_ID = "SELECT user_id, handle FROM user WHERE user_id in (" ;
979
984
980
985
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
3669
3674
3670
3675
try {
3671
3676
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 , ')' );
3677
3687
3678
- ps = con .prepareStatement (sbQueryUsers .toString ());
3688
+ ps = con .prepareStatement (sbQueryUsers .toString ());
3679
3689
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 ;
3690
3702
}
3691
3703
return result ;
3692
3704
}finally {
0 commit comments