diff options
author | Julien Lancelot <julien.lancelot@gmail.com> | 2013-07-01 09:26:01 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@gmail.com> | 2013-07-01 09:26:01 +0200 |
commit | 6b164ea3666f10f1065c934da37273ca44339196 (patch) | |
tree | 809c87d2a09686bdae047a6ca2d25ec6e57a12de /sonar-core/src | |
parent | b319c87ecf00b6c95b5dcb7924bdc8689b5153a0 (diff) | |
download | sonarqube-6b164ea3666f10f1065c934da37273ca44339196.tar.gz sonarqube-6b164ea3666f10f1065c934da37273ca44339196.zip |
SONAR-4449 Fix SQL returning issues with all columns
Diffstat (limited to 'sonar-core/src')
3 files changed, 33 insertions, 65 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java index 1fa8b6d024c..ca403f21a64 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java @@ -101,25 +101,21 @@ public class IssueDao implements BatchComponent, ServerComponent { private List<IssueDto> selectIssueIds(IssueQuery query, @Nullable Integer userId, Integer maxResults, SqlSession session){ IssueMapper mapper = session.getMapper(IssueMapper.class); - return mapper.selectIssues(query, query.componentRoots(), userId, query.requiredRole(), maxResults, true); + return mapper.selectIssueIds(query, query.componentRoots(), userId, query.requiredRole(), maxResults); } public List<IssueDto> selectIssues(IssueQuery query) { SqlSession session = mybatis.openSession(); try { - return selectIssues(query, null, Integer.MAX_VALUE, session); + return selectIssues(query, null, session); } finally { MyBatis.closeQuietly(session); } } public List<IssueDto> selectIssues(IssueQuery query, @Nullable Integer userId, SqlSession session){ - return selectIssues(query, userId, query.maxResults(), session); - } - - public List<IssueDto> selectIssues(IssueQuery query, @Nullable Integer userId, Integer maxResults, SqlSession session){ IssueMapper mapper = session.getMapper(IssueMapper.class); - return mapper.selectIssues(query, query.componentRoots(), userId, query.requiredRole(), maxResults, false); + return mapper.selectIssues(query, query.componentRoots(), userId, query.requiredRole()); } @VisibleForTesting diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueMapper.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueMapper.java index d8ea5863a07..31339c7e920 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueMapper.java @@ -37,9 +37,17 @@ public interface IssueMapper { * Return a paginated list of authorized issue ids for a user. * If the role is null, then the authorisation check is disabled. */ + List<IssueDto> selectIssueIds(@Param("query") IssueQuery query, @Param("componentRootKeys") Collection<String> componentRootKeys, + @Nullable @Param("userId") Integer userId, @Nullable @Param("role") String role, + @Param("maxResults") Integer maxResult); + + /** + * Return a none paginated list of authorized issues for a user. + * If the role is null, then the authorisation check is disabled. + */ List<IssueDto> selectIssues(@Param("query") IssueQuery query, @Param("componentRootKeys") Collection<String> componentRootKeys, - @Nullable @Param("userId") Integer userId, @Nullable @Param("role") String role, - @Param("maxResults") Integer maxResult, @Param("returnOnlyIdAndSortColumns") boolean returnOnlyIdAndSortColumns); + @Nullable @Param("userId") Integer userId, @Nullable @Param("role") String role); + void insert(IssueDto issue); diff --git a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml index 575f3d92e02..2cb15386ef9 100644 --- a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml @@ -186,72 +186,36 @@ </select> <select id="selectIssues" parameterType="map" resultType="Issue" fetchSize="100000"> - select - <choose> - <when test="returnOnlyIdAndSortColumns == true"> - i.id - <include refid="sortColumn"/> - from issues i - </when> - <otherwise> - <include refid="issueColumns"/> - 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 - </otherwise> - </choose> + select <include refid="issueColumns"/> + 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 <include refid="selectQueryConditions"/> - <if test="maxResults != null"> - limit #{maxResults} - </if> + </select> + + <select id="selectIssueIds" parameterType="map" resultType="Issue" fetchSize="100000"> + select i.id <include refid="sortColumn"/> + from issues i + <include refid="selectQueryConditions"/> + limit #{maxResults} </select> <!-- SQL Server --> - <select id="selectIssues" parameterType="map" resultType="Issue" fetchSize="100000" databaseId="mssql"> - select - <if test="maxResults != null"> - top (#{maxResults}) - </if> - <choose> - <when test="returnOnlyIdAndSortColumns == true"> - i.id - <include refid="sortColumn"/> - from issues i - </when> - <otherwise> - <include refid="issueColumns"/> - 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 - </otherwise> - </choose> + <select id="selectIssueIds" parameterType="map" resultType="Issue" fetchSize="100000" databaseId="mssql"> + select top (#{maxResults}) i.id <include refid="sortColumn"/> + from issues i <include refid="selectQueryConditions"/> </select> <!-- Oracle --> - <select id="selectIssues" parameterType="map" resultType="Issue" fetchSize="100000" databaseId="oracle"> + <select id="selectIssueIds" parameterType="map" resultType="Issue" fetchSize="100000" databaseId="oracle"> select * from (select - <choose> - <when test="returnOnlyIdAndSortColumns == true"> - i.id - <include refid="sortColumn"/> - from issues i - </when> - <otherwise> - <include refid="issueColumns"/> - 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 - </otherwise> - </choose> - <include refid="selectQueryConditions"/> + i.id <include refid="sortColumn"/> + from issues i + <include refid="selectQueryConditions"/> ) - <if test="maxResults != null"> - where rownum <= #{maxResults} - </if> + where rownum <= #{maxResults} </select> <sql id="selectQueryConditions"> |