diff options
author | Jenkins CI <ci@sonarsource.com> | 2016-04-15 10:36:24 +0200 |
---|---|---|
committer | Jenkins CI <ci@sonarsource.com> | 2016-04-15 10:36:24 +0200 |
commit | d0fd6ac322cab2a2166b7af00d3d1e283f2c7e05 (patch) | |
tree | f8549a5b88a420ea7abe00c0ed0fcfd0ce840017 /sonar-db | |
parent | d464f2d6abcecd7cd2f5ca6f96d7b61b5b88444b (diff) | |
parent | 378d6b7916c97849e83eb3f77d1a9a259d4b3d50 (diff) | |
download | sonarqube-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')
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> |