aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-db
diff options
context:
space:
mode:
authorJenkins CI <ci@sonarsource.com>2016-04-15 10:36:24 +0200
committerJenkins CI <ci@sonarsource.com>2016-04-15 10:36:24 +0200
commitd0fd6ac322cab2a2166b7af00d3d1e283f2c7e05 (patch)
treef8549a5b88a420ea7abe00c0ed0fcfd0ce840017 /sonar-db
parentd464f2d6abcecd7cd2f5ca6f96d7b61b5b88444b (diff)
parent378d6b7916c97849e83eb3f77d1a9a259d4b3d50 (diff)
downloadsonarqube-d0fd6ac322cab2a2166b7af00d3d1e283f2c7e05.tar.gz
sonarqube-d0fd6ac322cab2a2166b7af00d3d1e283f2c7e05.zip
Automatic merge from branch-5.5
* origin/branch-5.5: Fix malformed javadoc in API Add UserDao.selectByIds SONAR-6948 rename method Request#getLocalConnector() to localConnector() SONAR-6948 add javadoc for org.sonar.api.server.ws.LocalConnector
Diffstat (limited to 'sonar-db')
-rw-r--r--sonar-db/src/main/java/org/sonar/db/user/UserDao.java24
-rw-r--r--sonar-db/src/main/java/org/sonar/db/user/UserMapper.java5
-rw-r--r--sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml16
-rw-r--r--sonar-db/src/test/java/org/sonar/db/user/UserDaoTest.java11
-rw-r--r--sonar-db/src/test/resources/org/sonar/db/user/UserDaoTest/selectUsersByIds.xml9
5 files changed, 51 insertions, 14 deletions
diff --git a/sonar-db/src/main/java/org/sonar/db/user/UserDao.java b/sonar-db/src/main/java/org/sonar/db/user/UserDao.java
index 5d0eada9cc7..7d746d50bdf 100644
--- a/sonar-db/src/main/java/org/sonar/db/user/UserDao.java
+++ b/sonar-db/src/main/java/org/sonar/db/user/UserDao.java
@@ -62,6 +62,16 @@ public class UserDao implements Dao {
}
/**
+ * Select users by ids, including disabled users. An empty list is returned
+ * if list of ids is empty, without any db round trips.
+ *
+ * Used by the Governance plugin
+ */
+ public List<UserDto> selectByIds(DbSession session, Collection<Long> ids) {
+ return DatabaseUtils.executeLargeInputs(ids, new SelectByIds(mapper(session)));
+ }
+
+ /**
* Search for user by login. Disabled users are ignored.
*
* @return the user, null if user not found
@@ -219,4 +229,18 @@ public class UserDao implements Dao {
return map.get(login);
}
}
+
+ private static class SelectByIds implements Function<List<Long>, List<UserDto>> {
+ private final UserMapper mapper;
+
+ private SelectByIds(UserMapper mapper) {
+ this.mapper = mapper;
+ }
+
+ @Override
+ public List<UserDto> apply(@Nonnull List<Long> partitionOfLogins) {
+ return mapper.selectByIds(partitionOfLogins);
+ }
+ }
+
}
diff --git a/sonar-db/src/main/java/org/sonar/db/user/UserMapper.java b/sonar-db/src/main/java/org/sonar/db/user/UserMapper.java
index e3c32da3ad6..e577c57e241 100644
--- a/sonar-db/src/main/java/org/sonar/db/user/UserMapper.java
+++ b/sonar-db/src/main/java/org/sonar/db/user/UserMapper.java
@@ -45,14 +45,11 @@ public interface UserMapper {
@CheckForNull
UserDto selectUserByLogin(String login);
- List<UserDto> selectUsersByLogins(@Param("logins") List<String> logins);
-
List<UserDto> selectUsers(UserQuery query);
List<UserDto> selectByLogins(List<String> logins);
- @CheckForNull
- GroupDto selectGroupByName(String name);
+ List<UserDto> selectByIds(@Param("ids") List<Long> ids);
long countByEmail(String email);
diff --git a/sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml b/sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml
index 7d9e4d69230..36f61886772 100644
--- a/sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml
+++ b/sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml
@@ -62,13 +62,14 @@
</foreach>
</select>
- <select id="selectUsersByLogins" parameterType="map" resultType="User">
+ <select id="selectByIds" parameterType="string" resultType="User">
SELECT
<include refid="userColumns"/>
- FROM users u WHERE
- (<foreach item="login" index="index" collection="logins" open="(" separator=" or " close=")">
- u.login=#{login}
- </foreach>)
+ FROM users u
+ WHERE u.id in
+ <foreach collection="ids" open="(" close=")" item="id" separator=",">
+ #{id}
+ </foreach>
</select>
<select id="selectUsers" parameterType="map" resultType="User">
@@ -98,11 +99,6 @@
where lower(u.email)=#{email} AND u.active=${_true}
</select>
- <select id="selectGroupByName" parameterType="string" resultType="Group">
- SELECT id, name, description, created_at AS "createdAt", updated_at AS "updatedAt"
- FROM groups WHERE name=#{id}
- </select>
-
<delete id="removeUserFromGroups" parameterType="long">
DELETE FROM groups_users WHERE user_id=#{id}
</delete>
diff --git a/sonar-db/src/test/java/org/sonar/db/user/UserDaoTest.java b/sonar-db/src/test/java/org/sonar/db/user/UserDaoTest.java
index 6afef4c64b3..2e5f9ecd41b 100644
--- a/sonar-db/src/test/java/org/sonar/db/user/UserDaoTest.java
+++ b/sonar-db/src/test/java/org/sonar/db/user/UserDaoTest.java
@@ -77,6 +77,17 @@ public class UserDaoTest {
}
@Test
+ public void selectUsersIds() {
+ db.prepareDbUnit(getClass(), "selectUsersByIds.xml");
+
+ Collection<UserDto> users = underTest.selectByIds(session, asList(100L, 101L, 987L));
+ assertThat(users).hasSize(2);
+ assertThat(users).extracting("login").containsOnly("marius", "inactive_user");
+
+ assertThat(underTest.selectByIds(session, Collections.<Long>emptyList())).isEmpty();
+ }
+
+ @Test
public void selectUserByLogin_ignore_inactive() {
db.prepareDbUnit(getClass(), "selectActiveUserByLogin.xml");
diff --git a/sonar-db/src/test/resources/org/sonar/db/user/UserDaoTest/selectUsersByIds.xml b/sonar-db/src/test/resources/org/sonar/db/user/UserDaoTest/selectUsersByIds.xml
new file mode 100644
index 00000000000..3be84a27b69
--- /dev/null
+++ b/sonar-db/src/test/resources/org/sonar/db/user/UserDaoTest/selectUsersByIds.xml
@@ -0,0 +1,9 @@
+<dataset>
+ <users id="100" login="inactive_user" name="Disabled" email="inactive@lesbronzes.fr" created_at="1418215735482"
+ updated_at="1418215735485" active="[false]"/>
+ <users id="101" login="marius" name="Marius" email="marius@lesbronzes.fr" created_at="1418215735482"
+ updated_at="1418215735485" active="[true]"/>
+ <users id="102" login="jcdus" name="Jean-Claude Dus" email="jcdus@lesbronzes.fr" created_at="1418215735482"
+ updated_at="1418215735485" active="[true]"/>
+
+</dataset>