aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2014-09-05 17:50:55 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2014-09-09 11:41:03 +0200
commit4140a2e060e2c2cfe047a107be7ec71216e962a9 (patch)
treed7f1451be7ddfca384ae9bd02c165c9bd8bf27b1 /sonar-core
parent2c537500205f609f520b675691de3290d53e35aa (diff)
downloadsonarqube-4140a2e060e2c2cfe047a107be7ec71216e962a9.tar.gz
sonarqube-4140a2e060e2c2cfe047a107be7ec71216e962a9.zip
SONAR-5561 Create query to load issue authorization from db
Diffstat (limited to 'sonar-core')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationDto.java19
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationMapper.java6
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml51
3 files changed, 66 insertions, 10 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationDto.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationDto.java
index d66f0c9d231..0c0b767c403 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationDto.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationDto.java
@@ -25,16 +25,18 @@ import org.sonar.core.persistence.Dto;
import java.io.Serializable;
import java.util.List;
+import static com.google.common.collect.Lists.newArrayList;
+
public final class IssueAuthorizationDto extends Dto<String> implements Serializable {
private String project;
private String permission;
- private List<String> groups;
- private List<String> users;
+ private List<String> groups = newArrayList();
+ private List<String> users = newArrayList();
@Override
public String getKey() {
- return null;
+ return project;
}
public String getProject() {
@@ -64,6 +66,11 @@ public final class IssueAuthorizationDto extends Dto<String> implements Serializ
return this;
}
+ public IssueAuthorizationDto addGroup(String group) {
+ groups.add(group);
+ return this;
+ }
+
public List<String> getUsers() {
return users;
}
@@ -72,4 +79,10 @@ public final class IssueAuthorizationDto extends Dto<String> implements Serializ
this.users = users;
return this;
}
+
+ public IssueAuthorizationDto addUser(String user) {
+ users.add(user);
+ return this;
+ }
+
}
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationMapper.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationMapper.java
index d327f7f938d..ca81eccafae 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationMapper.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationMapper.java
@@ -20,8 +20,14 @@
package org.sonar.core.issue.db;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+
public interface IssueAuthorizationMapper {
IssueAuthorizationDto selectByKey(String key);
+ IssueAuthorizationDto selectAfterDate(@Param("date") Date date, @Param("permission") String permission);
+
}
diff --git a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml
index 59dd1496014..d4cf8ba718f 100644
--- a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml
@@ -4,13 +4,50 @@
<mapper namespace="org.sonar.core.issue.db.IssueAuthorizationMapper">
- <select id="selectByKey" parameterType="String" resultType="IssueAuthorization">
- select *
- from issues i
- inner join rules r on r.id=i.rule_id
- inner join projects p on p.id=i.component_id
- inner join projects root on root.id=i.root_component_id
- where i.kee=#{kee}
+ <select id="selectAfterDate" parameterType="map" resultType="map">
+ SELECT
+ project_authorization.project as project,
+ project_authorization.login as user,
+ project_authorization.permission_group as permission_group,
+ project_authorization.permission_role as permission_role
+ FROM (
+ -- users
+ SELECT
+ projects.kee AS project,
+ users.login AS login,
+ NULL AS permission_group,
+ user_roles.role as permission_role
+ FROM projects
+ INNER JOIN user_roles ON user_roles.resource_id = projects.id AND user_roles.role = #{permission}
+ INNER JOIN users ON users.id = user_roles.user_id
+ WHERE
+ projects.authorization_updated_at &gt;= #{date}
+ UNION
+ -- groups without Anyone
+ SELECT
+ projects.kee AS project,
+ NULL AS login,
+ groups.name AS permission_group,
+ group_roles.role as permission_role
+ FROM projects
+ INNER JOIN group_roles ON group_roles.resource_id = projects.id AND group_roles.role = #{permission}
+ INNER JOIN groups ON groups.id = group_roles.group_id
+ WHERE
+ projects.authorization_updated_at &gt;= #{date}
+ AND group_id IS NOT NULL
+ UNION
+ -- Anyone groups
+ SELECT
+ projects.kee AS project,
+ NULL AS login,
+ 'anyone' AS permission_group,
+ group_roles.role as permission_role
+ FROM projects
+ INNER JOIN group_roles ON group_roles.resource_id = projects.id AND group_roles.role = #{permission}
+ WHERE
+ projects.authorization_updated_at &gt;= #{date}
+ AND group_roles.group_id IS NULL
+ ) AS project_authorization
</select>
</mapper>