Skip to content
This repository was archived by the owner on Jan 23, 2025. It is now read-only.

Commit 5371a4b

Browse files
authored
Merge pull request #412 from deedee/update_getUsersFromId
use batch query for getting user handle
2 parents ba4aa14 + 79a5733 commit 5371a4b

File tree

1 file changed

+28
-16
lines changed

1 file changed

+28
-16
lines changed

src/java/main/com/topcoder/direct/services/view/util/DirectUtils.java

+28-16
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)