Browse Source

SONAR-5529 - Implemented findAfterDate in IssueDao V.2

tags/5.0-RC1
Stephane Gamard 9 years ago
parent
commit
da55098737

+ 23
- 0
server/sonar-server/src/main/java/org/sonar/server/issue/db/IssueDao.java View File

@@ -20,6 +20,7 @@
package org.sonar.server.issue.db;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import org.sonar.api.utils.System2;
import org.sonar.core.issue.db.IssueDto;
import org.sonar.core.issue.db.IssueMapper;
@@ -27,6 +28,9 @@ import org.sonar.core.persistence.DaoComponent;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.db.BaseDao;

import java.sql.Timestamp;
import java.util.Date;

public class IssueDao extends BaseDao<IssueMapper, IssueDto, String> implements DaoComponent {

public IssueDao() {
@@ -42,4 +46,23 @@ public class IssueDao extends BaseDao<IssueMapper, IssueDto, String> implements
protected IssueDto doGetNullableByKey(DbSession session, String key) {
return mapper(session).selectByKey(key);
}

@Override
protected IssueDto doUpdate(DbSession session, IssueDto issue) {
mapper(session).update(issue);
return issue;
}

@Override
protected IssueDto doInsert(DbSession session, IssueDto issue) {
Preconditions.checkNotNull(issue.getKey(), "Cannot insert Issue with empty key!");
Preconditions.checkNotNull(issue.getComponentId(), "Cannot insert Issue with no Component!");
mapper(session).insert(issue);
return issue;
}

@Override
protected Iterable<IssueDto> findAfterDate(DbSession session, Date date) {
return mapper(session).selectAfterDate(new Timestamp(date.getTime()));
}
}

+ 44
- 0
server/sonar-server/src/test/java/org/sonar/server/issue/db/IssueDaoTest.java View File

@@ -0,0 +1,44 @@
package org.sonar.server.issue.db;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.System2;
import org.sonar.core.persistence.AbstractDaoTestCase;
import org.sonar.core.persistence.DbSession;

import java.util.Date;

import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.Mockito.mock;

public class IssueDaoTest extends AbstractDaoTestCase {

private IssueDao dao;
private DbSession session;
private System2 system2;

@Before
public void before() throws Exception {
this.session = getMyBatis().openSession(false);
this.system2 = mock(System2.class);
this.dao = new IssueDao(system2);
}

@After
public void after() {
this.session.close();
}

@Test
public void find_after_dates() throws Exception {
setupData("shared", "should_select_all");

Date t0 = new Date(0);
assertThat(dao.findAfterDate(session, t0)).hasSize(3);

Date t2014 = DateUtils.parseDate("2014-01-01");
assertThat(dao.findAfterDate(session, t2014)).hasSize(1);
}
}

+ 22
- 0
server/sonar-server/src/test/resources/org/sonar/server/issue/db/IssueDaoTest/shared.xml View File

@@ -0,0 +1,22 @@
<dataset>

<group_roles id="1" group_id="[null]" resource_id="399" role="user"/>

<projects id="399" kee="struts" root_id="[null]" qualifier="TRK" scope="PRJ"/>
<projects id="400" kee="struts-core" root_id="399" qualifier="BRC" scope="PRJ"/>
<projects id="401" kee="Action.java" root_id="400" qualifier="CLA" scope="PRJ"/>
<projects id="402" kee="Filter.java" root_id="400" qualifier="CLA" scope="PRJ"/>

<snapshots id="100" project_id="399" root_snapshot_id="[null]" parent_snapshot_id="[null]" root_project_id="399"
path="" islast="[true]"/>
<snapshots id="101" project_id="400" root_snapshot_id="100" parent_snapshot_id="100" root_project_id="399" path="100."
islast="[true]"/>
<snapshots id="102" project_id="401" root_snapshot_id="100" parent_snapshot_id="101" root_project_id="399"
path="100.101." islast="[true]"/>
<snapshots id="103" project_id="402" root_snapshot_id="100" parent_snapshot_id="101" root_project_id="399"
path="100.101." islast="[true]"/>

<rules id="500" tags="[null]" system_tags="[null]" plugin_rule_key="AvoidCycle" plugin_name="squid" language="java"/>
<rules id="501" tags="[null]" system_tags="[null]" plugin_rule_key="NullRef" plugin_name="squid" language="xoo"/>

</dataset>

+ 80
- 0
server/sonar-server/src/test/resources/org/sonar/server/issue/db/IssueDaoTest/should_select_all.xml View File

@@ -0,0 +1,80 @@
<dataset>

<!-- rule 500 -->
<issues
id="100"
kee="ABCDE-1"
component_id="401"
root_component_id="399"
rule_id="500"
severity="BLOCKER"
manual_severity="[false]"
message="[null]"
line="200"
effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
reporter="arthur"
assignee="perceval"
author_login="[null]"
issue_attributes="JIRA=FOO-1234"
issue_creation_date="2013-04-16"
issue_update_date="2013-04-16"
issue_close_date="2013-04-16"
created_at="2013-04-16"
updated_at="2013-04-16"
/>

<issues
id="101"
kee="ABCDE-2"
component_id="401"
root_component_id="399"
rule_id="500"
severity="BLOCKER"
manual_severity="[false]"
message="[null]"
line="200"
effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
reporter="arthur"
assignee="perceval"
author_login="[null]"
issue_attributes="JIRA=FOO-1234"
issue_creation_date="2013-04-16"
issue_update_date="2013-04-16"
issue_close_date="2013-04-16"
created_at="2013-04-16"
updated_at="2013-04-16"
/>


<!-- rule 501 -->
<issues
id="102"
kee="ABCDE-3"
component_id="401"
root_component_id="399"
rule_id="501"
severity="BLOCKER"
manual_severity="[false]"
message="[null]"
line="200"
effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
reporter="arthur"
assignee="perceval"
author_login="[null]"
issue_attributes="JIRA=FOO-1234"
issue_creation_date="2014-04-16"
issue_update_date="2014-04-16"
issue_close_date="2014-04-16"
created_at="2014-04-16"
updated_at="2014-04-16"
/>
</dataset>

+ 6
- 4
sonar-core/src/main/java/org/sonar/core/issue/db/IssueMapper.java View File

@@ -25,6 +25,7 @@ import org.sonar.core.rule.RuleDto;

import javax.annotation.Nullable;

import java.sql.Timestamp;
import java.util.Collection;
import java.util.Date;
import java.util.List;
@@ -38,16 +39,15 @@ public interface IssueMapper {
* 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);
@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);

@Nullable @Param("userId") Integer userId, @Nullable @Param("role") String role);

List<RuleDto> findRulesByComponent(@Param("componentKey") String componentKey, @Nullable @Param("createdAt") Date createdAtOrAfter);

@@ -58,4 +58,6 @@ public interface IssueMapper {
int update(IssueDto issue);

int updateIfBeforeSelectedDate(IssueDto issue);

List<IssueDto> selectAfterDate(Timestamp timestamp);
}

+ 0
- 36
sonar-core/src/main/java/org/sonar/core/rule/RuleMapper.java View File

@@ -19,10 +19,7 @@
*/
package org.sonar.core.rule;

import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Select;
import org.sonar.api.rule.RuleKey;

import java.sql.Timestamp;
@@ -64,38 +61,5 @@ public interface RuleMapper {

void deleteParameter(Integer paramId);

final String SELECT_FIELDS="r.id,\n" +
" r.plugin_rule_key as \"ruleKey\",\n" +
" r.plugin_name as \"repositoryKey\",\n" +
" r.description,\n" +
" r.description_format as \"descriptionFormat\",\n" +
" r.status,\n" +
" r.name,\n" +
" r.plugin_config_key as \"configKey\",\n" +
" r.priority as \"severity\",\n" +
" r.is_template as \"isTemplate\",\n" +
" r.language as \"language\",\n" +
" r.template_id as \"templateId\",\n" +
" r.note_data as \"noteData\",\n" +
" r.note_user_login as \"noteUserLogin\",\n" +
" r.note_created_at as \"noteCreatedAt\",\n" +
" r.note_updated_at as \"noteUpdatedAt\",\n" +
" r.characteristic_id as \"subCharacteristicId\",\n" +
" r.default_characteristic_id as \"defaultSubCharacteristicId\",\n" +
" r.remediation_function as \"remediationFunction\",\n" +
" r.default_remediation_function as \"defaultRemediationFunction\",\n" +
" r.remediation_coeff as \"remediationCoefficient\",\n" +
" r.default_remediation_coeff as \"defaultRemediationCoefficient\",\n" +
" r.remediation_offset as \"remediationOffset\",\n" +
" r.default_remediation_offset as \"defaultRemediationOffset\",\n" +
" r.effort_to_fix_description as \"effortToFixDescription\",\n" +
" r.tags as \"tagsField\",\n" +
" r.system_tags as \"systemTagsField\",\n" +
" r.created_at as \"createdAt\",\n" +
" r.updated_at as \"updatedAt\"";

@Select("SELECT " + SELECT_FIELDS + " FROM rules r WHERE r.updated_at IS NULL or r.updated_at >= #{date} ")
@Options(fetchSize = 200, useCache = false, flushCache = true)
@Result(javaType = RuleDto.class)
List<RuleDto> selectAfterDate(@Param("date") Timestamp timestamp);
}

+ 95
- 63
sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml View File

@@ -60,7 +60,7 @@
</if>
</sql>

<insert id="insert" parameterType="Issue" useGeneratedKeys="false" keyProperty="id" >
<insert id="insert" parameterType="Issue" useGeneratedKeys="false" keyProperty="id">
INSERT INTO issues (kee, component_id, root_component_id, rule_id, action_plan_key, severity, manual_severity,
message, line, effort_to_fix, technical_debt, status,
resolution, checksum, reporter, assignee, author_login, issue_attributes, issue_creation_date, issue_update_date,
@@ -74,7 +74,7 @@
<!--
IMPORTANT - invariant columns can't be updated. See IssueDto#toDtoForUpdate()
-->
<update id="update" parameterType="Issue" >
<update id="update" parameterType="Issue">
update issues set
action_plan_key=#{actionPlanKey},
severity=#{severity},
@@ -101,7 +101,7 @@
<!--
IMPORTANT - invariant columns can't be updated. See IssueDto#toDtoForUpdate()
-->
<update id="updateIfBeforeSelectedDate" parameterType="Issue" >
<update id="updateIfBeforeSelectedDate" parameterType="Issue">
update issues set
action_plan_key=#{actionPlanKey},
severity=#{severity},
@@ -135,38 +135,49 @@
where i.kee=#{kee}
</select>

<select id="selectNonClosedIssuesByModule" parameterType="int" resultType="Issue" >
<select id="selectAfterDate" resultType="Issue" resultSetType="FORWARD_ONLY" fetchSize="200">
select
i.id,
i.kee as kee,
i.component_id as componentId,
i.root_component_id as rootComponentId,
i.rule_id as ruleId,
i.action_plan_key as actionPlanKey,
i.severity as severity,
i.manual_severity as manualSeverity,
i.message as message,
i.line as line,
i.effort_to_fix as effortToFix,
i.technical_debt as debt,
i.status as status,
i.resolution as resolution,
i.checksum as checksum,
i.reporter as reporter,
i.assignee as assignee,
i.author_login as authorLogin,
i.issue_attributes as issueAttributes,
i.issue_creation_date as issueCreationDate,
i.issue_update_date as issueUpdateDate,
i.issue_close_date as issueCloseDate,
i.created_at as createdAt,
i.updated_at as updatedAt,
r.plugin_rule_key as ruleKey,
r.plugin_name as ruleRepo,
p.kee as componentKey,
root.kee as rootComponentKey
<include refid="issueColumns"/>
from issues i
inner join (select p.id,p.kee from projects p where (p.root_id=#{id} and p.qualifier &lt;&gt; 'BRC') or (p.id=#{id})) p on p.id=i.component_id
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.updated_at IS NULL or i.updated_at &gt;= #{date}
</select>

<select id="selectNonClosedIssuesByModule" parameterType="int" resultType="Issue">
select
i.id,
i.kee as kee,
i.component_id as componentId,
i.root_component_id as rootComponentId,
i.rule_id as ruleId,
i.action_plan_key as actionPlanKey,
i.severity as severity,
i.manual_severity as manualSeverity,
i.message as message,
i.line as line,
i.effort_to_fix as effortToFix,
i.technical_debt as debt,
i.status as status,
i.resolution as resolution,
i.checksum as checksum,
i.reporter as reporter,
i.assignee as assignee,
i.author_login as authorLogin,
i.issue_attributes as issueAttributes,
i.issue_creation_date as issueCreationDate,
i.issue_update_date as issueUpdateDate,
i.issue_close_date as issueCloseDate,
i.created_at as createdAt,
i.updated_at as updatedAt,
r.plugin_rule_key as ruleKey,
r.plugin_name as ruleRepo,
p.kee as componentKey,
root.kee as rootComponentKey
from issues i
inner join (select p.id,p.kee from projects p where (p.root_id=#{id} and p.qualifier &lt;&gt; 'BRC') or
(p.id=#{id})) p on p.id=i.component_id
inner join rules r on r.id=i.rule_id
left outer join projects root on root.id=i.root_component_id
where i.status &lt;&gt; 'CLOSED'
@@ -180,13 +191,14 @@
inner join projects p on p.id=i.component_id
inner join projects root on root.id=i.root_component_id
where i.id in
<foreach collection="list" open="(" close=")" item="id" separator=",">
#{id}
</foreach>
<foreach collection="list" open="(" close=")" item="id" separator=",">
#{id}
</foreach>
</select>

<select id="selectIssues" parameterType="map" resultType="Issue">
select <include refid="issueColumns"/>
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
@@ -195,7 +207,8 @@
</select>

<select id="selectIssueIds" parameterType="map" resultType="Issue">
select i.id <include refid="sortColumn"/>
select i.id
<include refid="sortColumn"/>
from issues i
<include refid="selectQueryConditions"/>
limit #{maxResults}
@@ -203,7 +216,8 @@

<!-- SQL Server -->
<select id="selectIssueIds" parameterType="map" resultType="Issue" databaseId="mssql">
select top (#{maxResults}) i.id <include refid="sortColumn"/>
select top (#{maxResults}) i.id
<include refid="sortColumn"/>
from issues i
<include refid="selectQueryConditions"/>
</select>
@@ -211,23 +225,28 @@
<!-- Oracle -->
<select id="selectIssueIds" parameterType="map" resultType="Issue" databaseId="oracle">
select * from (select
i.id <include refid="sortColumn"/>
from issues i
<include refid="selectQueryConditions"/>
i.id
<include refid="sortColumn"/>
from issues i
<include refid="selectQueryConditions"/>
)
where rownum &lt;= #{maxResults}
</select>

<sql id="selectQueryConditions">
<if test="componentRootKeys.size() == 0 and role != null">
inner join (<include refid="org.sonar.core.user.AuthorizationMapper.selectAuthorizedRootProjectIdsQuery" />) authorizedProjects on authorizedProjects.root_project_id=i.root_component_id
inner join (<include refid="org.sonar.core.user.AuthorizationMapper.selectAuthorizedRootProjectIdsQuery"/>)
authorizedProjects on authorizedProjects.root_project_id=i.root_component_id
</if>
<if test="componentRootKeys.size() > 0">
inner join (<include refid="org.sonar.core.resource.ResourceMapper.selectAuthorizedChildrenComponentIdsQuery" />) authorizedComponents on authorizedComponents.project_id=i.component_id
inner join (<include refid="org.sonar.core.resource.ResourceMapper.selectAuthorizedChildrenComponentIdsQuery"/>)
authorizedComponents on authorizedComponents.project_id=i.component_id
</if>
<if test="query.components().size() > 0">
inner join projects project_component on project_component.id=i.component_id and project_component.enabled=${_true} and
<foreach item="component" index="index" collection="query.components()" open="(" separator=" or " close=")">project_component.kee=#{component}
inner join projects project_component on project_component.id=i.component_id and
project_component.enabled=${_true} and
<foreach item="component" index="index" collection="query.components()" open="(" separator=" or " close=")">
project_component.kee=#{component}
</foreach>
</if>
<if test="query.rules().size()>0 or query.languages().size()>0">
@@ -243,19 +262,27 @@
</if>
<where>
<if test="query.issueKeys().size()>0">
and <foreach item="key" index="index" collection="query.issueKeys()" open="(" separator=" or " close=")">i.kee=#{key}
and
<foreach item="key" index="index" collection="query.issueKeys()" open="(" separator=" or " close=")">
i.kee=#{key}
</foreach>
</if>
<if test="query.severities().size()>0">
and <foreach item="severity" index="index" collection="query.severities()" open="(" separator=" or " close=")">i.severity=#{severity}
and
<foreach item="severity" index="index" collection="query.severities()" open="(" separator=" or " close=")">
i.severity=#{severity}
</foreach>
</if>
<if test="query.statuses().size()>0">
and <foreach item="status" index="index" collection="query.statuses()" open="(" separator=" or " close=")">i.status=#{status}
and
<foreach item="status" index="index" collection="query.statuses()" open="(" separator=" or " close=")">
i.status=#{status}
</foreach>
</if>
<if test="query.resolutions().size()>0">
and <foreach item="resolution" index="index" collection="query.resolutions()" open="(" separator=" or " close=")">i.resolution=#{resolution}
and
<foreach item="resolution" index="index" collection="query.resolutions()" open="(" separator=" or " close=")">
i.resolution=#{resolution}
</foreach>
</if>
<if test="query.resolved() != null">
@@ -267,11 +294,15 @@
</if>
</if>
<if test="query.reporters().size()>0">
and <foreach item="reporter" index="index" collection="query.reporters()" open="(" separator=" or " close=")">i.reporter=#{reporter}
and
<foreach item="reporter" index="index" collection="query.reporters()" open="(" separator=" or " close=")">
i.reporter=#{reporter}
</foreach>
</if>
<if test="query.assignees().size()>0">
and <foreach item="assignee" index="index" collection="query.assignees()" open="(" separator=" or " close=")">i.assignee=#{assignee}
and
<foreach item="assignee" index="index" collection="query.assignees()" open="(" separator=" or " close=")">
i.assignee=#{assignee}
</foreach>
</if>
<if test="query.assigned() != null">
@@ -309,16 +340,17 @@
</sql>

<select id="findRulesByComponent" parameterType="String" resultType="Rule">
SELECT <include refid="org.sonar.core.rule.RuleMapper.selectColumns" />
SELECT
<include refid="org.sonar.core.rule.RuleMapper.selectColumns"/>
FROM issues i
INNER JOIN projects p on p.id=i.component_id
INNER JOIN rules r on r.id=i.rule_id
WHERE
p.kee=#{componentKey}
AND i.resolution IS NULL
<if test="createdAt != null">
AND i.issue_creation_date &gt;= #{createdAt}
</if>
p.kee=#{componentKey}
AND i.resolution IS NULL
<if test="createdAt != null">
AND i.issue_creation_date &gt;= #{createdAt}
</if>
</select>

<select id="findSeveritiesByComponent" parameterType="String" resultType="String">
@@ -327,11 +359,11 @@
INNER JOIN projects on projects.id=i.component_id
INNER JOIN rules on rules.id=i.rule_id
WHERE
projects.kee=#{componentKey}
AND i.resolution IS NULL
<if test="createdAt != null">
AND i.issue_creation_date &gt;= #{createdAt}
</if>
projects.kee=#{componentKey}
AND i.resolution IS NULL
<if test="createdAt != null">
AND i.issue_creation_date &gt;= #{createdAt}
</if>
</select>

</mapper>

+ 56
- 27
sonar-core/src/main/resources/org/sonar/core/rule/RuleMapper.xml View File

@@ -36,33 +36,54 @@
</sql>

<select id="selectAll" resultType="Rule">
select <include refid="selectColumns"/> from rules r
select
<include refid="selectColumns"/>
from rules r
</select>

<select id="selectAfterDate" resultType="Rule" resultSetType="FORWARD_ONLY" fetchSize="200">
select
<include refid="selectColumns"/>
from rules r
where r.updated_at IS NULL or r.updated_at &gt;= #{date}
</select>

<select id="selectEnablesAndNonManual" resultType="Rule">
select <include refid="selectColumns"/> from rules r
select
<include refid="selectColumns"/>
from rules r
where r.status != 'REMOVED' and r.plugin_name != 'manual'
</select>

<select id="selectById" parameterType="Integer" resultType="Rule">
select <include refid="selectColumns"/> from rules r WHERE r.id=#{id}
select
<include refid="selectColumns"/>
from rules r WHERE r.id=#{id}
</select>

<select id="selectByKey" parameterType="map" resultType="Rule">
SELECT <include refid="selectColumns"/> FROM rules r WHERE r.plugin_name=#{repository} AND r.plugin_rule_key=#{rule}
SELECT
<include refid="selectColumns"/>
FROM rules r WHERE r.plugin_name=#{repository} AND r.plugin_rule_key=#{rule}
</select>

<select id="selectByName" parameterType="String" resultType="Rule">
select <include refid="selectColumns"/> from rules r WHERE r.name=#{name}
select
<include refid="selectColumns"/>
from rules r WHERE r.name=#{name}
</select>

<select id="selectNonManual" resultType="Rule">
select <include refid="selectColumns"/> from rules r
select
<include refid="selectColumns"/>
from rules r
where r.plugin_name != 'manual'
</select>

<select id="selectBySubCharacteristicId" resultType="Rule">
select <include refid="selectColumns"/> from rules r
select
<include refid="selectColumns"/>
from rules r
where (r.characteristic_id=#{subCharacteristicId} or r.default_characteristic_id=#{subCharacteristicId})
</select>

@@ -99,7 +120,8 @@
</update>

<sql id="insertColumns">
(plugin_rule_key, plugin_name, description, description_format, status, name, plugin_config_key, priority, is_template, language, template_id,
(plugin_rule_key, plugin_name, description, description_format, status, name, plugin_config_key, priority,
is_template, language, template_id,
characteristic_id, default_characteristic_id, remediation_function, default_remediation_function,
remediation_coeff, default_remediation_coeff, remediation_offset, default_remediation_offset,
effort_to_fix_description, tags, system_tags, note_data, note_user_login, note_created_at, note_updated_at,
@@ -107,17 +129,19 @@
</sql>

<insert id="insert" parameterType="Rule" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
insert into rules <include refid="insertColumns"/>
insert into rules
<include refid="insertColumns"/>
values (#{ruleKey}, #{repositoryKey}, #{description}, #{descriptionFormat}, #{status}, #{name}, #{configKey},
#{severity}, #{isTemplate}, #{language}, #{templateId},
#{subCharacteristicId}, #{defaultSubCharacteristicId}, #{remediationFunction}, #{defaultRemediationFunction},
#{remediationCoefficient}, #{defaultRemediationCoefficient}, #{remediationOffset}, #{defaultRemediationOffset},
#{effortToFixDescription}, #{tagsField}, #{systemTagsField}, #{noteData}, #{noteUserLogin}, #{noteCreatedAt},
#{noteUpdatedAt}, #{createdAt}, #{updatedAt})
#{severity}, #{isTemplate}, #{language}, #{templateId},
#{subCharacteristicId}, #{defaultSubCharacteristicId}, #{remediationFunction}, #{defaultRemediationFunction},
#{remediationCoefficient}, #{defaultRemediationCoefficient}, #{remediationOffset}, #{defaultRemediationOffset},
#{effortToFixDescription}, #{tagsField}, #{systemTagsField}, #{noteData}, #{noteUserLogin}, #{noteCreatedAt},
#{noteUpdatedAt}, #{createdAt}, #{updatedAt})
</insert>

<insert id="batchInsert" parameterType="Rule" useGeneratedKeys="false">
insert into rules <include refid="insertColumns"/>
insert into rules
<include refid="insertColumns"/>
values (#{ruleKey}, #{repositoryKey}, #{description}, #{descriptionFormat}, #{status}, #{name}, #{configKey},
#{severity}, #{isTemplate}, #{language}, #{templateId},
#{subCharacteristicId}, #{defaultSubCharacteristicId}, #{remediationFunction}, #{defaultRemediationFunction},
@@ -126,7 +150,7 @@
#{noteUpdatedAt}, #{createdAt}, #{updatedAt})
</insert>

<delete id="deleteParams" parameterType="Integer" >
<delete id="deleteParams" parameterType="Integer">
delete from active_rule_parameters where rules_parameter_id=#{id}
</delete>

@@ -136,45 +160,50 @@
</sql>

<select id="selectAllParams" resultType="RuleParam">
select <include refid="paramColumns"/>
select
<include refid="paramColumns"/>
from rules_parameters p
</select>

<select id="selectParamsByRuleIds" resultType="RuleParam">
SELECT <include refid="paramColumns"/>
SELECT
<include refid="paramColumns"/>
FROM rules_parameters p
<where>
AND (<foreach item="id" index="index" collection="ruleIds" open="(" separator=" or " close=")">p.rule_id=#{id}</foreach>)
AND (<foreach item="id" index="index" collection="ruleIds" open="(" separator=" or " close=")">
p.rule_id=#{id}</foreach>)
</where>
</select>

<select id="selectParamsByRuleKey" resultType="RuleParam" parameterType="org.sonar.api.rule.RuleKey">
SELECT <include refid="paramColumns"/>
SELECT
<include refid="paramColumns"/>
FROM rules_parameters p, rules r
WHERE p.rule_id=r.id
AND r.plugin_name=#{repository} AND r.plugin_rule_key=#{rule}
</select>

<select id="selectParamByRuleAndKey" resultType="RuleParam">
SELECT <include refid="paramColumns"/>
SELECT
<include refid="paramColumns"/>
FROM rules_parameters p
WHERE p.rule_id=#{ruleId} AND p.name=#{key}
</select>

<delete id="deleteParameter" parameterType="Integer" >
<delete id="deleteParameter" parameterType="Integer">
delete from rules_parameters where id=#{id}
</delete>

<insert id="insertParameter" parameterType="RuleParam" keyColumn="id" useGeneratedKeys="true" keyProperty="id" >
<insert id="insertParameter" parameterType="RuleParam" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
INSERT INTO rules_parameters (rule_id, name, param_type, default_value, description)
VALUES (#{ruleId}, #{name}, #{type}, #{defaultValue}, #{description})
</insert>

<update id="updateParameter" parameterType="RuleParam" >
<update id="updateParameter" parameterType="RuleParam">
UPDATE rules_parameters SET
param_type=#{type},
default_value=#{defaultValue},
description=#{description}
param_type=#{type},
default_value=#{defaultValue},
description=#{description}
WHERE id=#{id}
</update>
</mapper>

Loading…
Cancel
Save