private DefaultIssue setComponent(DefaultIssue issue, @Nullable ReportComponent component) {
if (component != null) {
- issue.setComponentId((long)component.id());
+ issue.setComponentId((long) component.id());
issue.setComponentUuid(component.uuid());
}
return issue;
boolean saved = false;
if (issue.isNew()) {
Integer ruleId = ruleCache.get(issue.ruleKey()).getId();
- mapper.insert(IssueDto.toDtoForBatchInsert(issue, issue.componentId(), context.getProject().getId(), ruleId, system2.now()));
+ mapper.insert(IssueDto.toDtoForComputationInsert(issue, issue.componentId(), context.getProject().getId(), ruleId, system2.now()));
count++;
saved = true;
} else if (issue.isChanged()) {
CopyScmAccountsFromAuthorsToUsers.class,
FeedIssueChangesLongDates.class,
FeedAnalysisReportsLongDates.class,
- UpdateProjectsModuleUuidPath.class
+ UpdateProjectsModuleUuidPath.class,
+ FeedIssueComponentUuids.class
);
}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.server.db.migrations.v51;
+
+import org.sonar.core.persistence.Database;
+import org.sonar.server.db.migrations.BaseDataChange;
+import org.sonar.server.db.migrations.MassUpdate;
+import org.sonar.server.db.migrations.MassUpdate.Handler;
+import org.sonar.server.db.migrations.Select.Row;
+import org.sonar.server.db.migrations.SqlStatement;
+
+import java.sql.SQLException;
+
+public class FeedIssueComponentUuids extends BaseDataChange {
+
+ public FeedIssueComponentUuids(Database db) {
+ super(db);
+ }
+
+ @Override
+ public void execute(Context context) throws SQLException {
+ MassUpdate update = context.prepareMassUpdate().rowPluralName("issues");
+ update.select(
+ "SELECT c.uuid, c.project_uuid, i.id " +
+ "FROM issues i " +
+ "INNER JOIN projects c ON i.component_id=c.id " +
+ "WHERE i.component_uuid is null");
+ update.update("UPDATE issues SET component_uuid=?, project_uuid=? WHERE id=?");
+ update.execute(new Handler() {
+ @Override
+ public boolean handle(Row row, SqlStatement update) throws SQLException {
+ update.setString(1, row.getString(1));
+ update.setString(2, row.getString(2));
+ update.setLong(3, row.getLong(3));
+
+ return true;
+ }
+ });
+ }
+}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.server.db.migrations.v51;
+
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.sonar.core.persistence.DbTester;
+
+public class FeedIssueComponentUuidsTest {
+ @ClassRule
+ public static DbTester db = new DbTester().schema(FeedIssueComponentUuidsTest.class, "schema.sql");
+
+ FeedIssueComponentUuids sut;
+
+ @Before
+ public void setUp() throws Exception {
+ db.truncateTables();
+
+ sut = new FeedIssueComponentUuids(db.database());
+ }
+
+ @Test
+ public void migrate_empty_db() throws Exception {
+ sut.execute();
+ }
+
+ @Test
+ public void migrate() throws Exception {
+ db.prepareDbUnit(this.getClass(), "before.xml");
+ sut.execute();
+ db.assertDbUnit(this.getClass(), "after-result.xml", "issues");
+ }
+}
public class IssueDaoTest extends AbstractDaoTestCase {
- private IssueDao dao;
+ private IssueDao sut;
private DbSession session;
@Before
public void before() throws Exception {
this.session = getMyBatis().openSession(false);
- this.dao = new IssueDao(getMyBatis());
+ this.sut = new IssueDao(getMyBatis());
}
@After
public void get_by_key() {
setupData("shared", "get_by_key");
- IssueDto issue = dao.selectByKey(session, "ABCDE");
+ IssueDto issue = sut.selectByKey(session, "ABCDE");
assertThat(issue.getKee()).isEqualTo("ABCDE");
assertThat(issue.getId()).isEqualTo(100L);
assertThat(issue.getComponentId()).isEqualTo(401);
public void get_by_keys() {
setupData("shared", "get_by_key");
- List<IssueDto> issues = dao.selectByKeys(session, Arrays.asList("ABCDE"));
+ List<IssueDto> issues = sut.selectByKeys(session, Arrays.asList("ABCDE"));
assertThat(issues).hasSize(1);
}
public void find_by_action_plan() {
setupData("shared", "find_by_action_plan");
- List<IssueDto> issues = dao.findByActionPlan(session, "AP-1");
+ List<IssueDto> issues = sut.findByActionPlan(session, "AP-1");
assertThat(issues).hasSize(1);
IssueDto issue = issues.get(0);
// BCDE is a non-root module, we should find 2 issues from classes and one on itself
DefaultResultHandler handler = new DefaultResultHandler();
- dao.selectNonClosedIssuesByModuleUuid(session, "BCDE", handler);
+ sut.selectNonClosedIssuesByModuleUuid(session, "BCDE", handler);
assertThat(handler.getResultList()).extracting("key").containsOnly("100", "101", "103");
// DBCA is a a simple project with a single file
handler = new DefaultResultHandler();
- dao.selectNonClosedIssuesByModuleUuid(session, "DBCA", handler);
+ sut.selectNonClosedIssuesByModuleUuid(session, "DBCA", handler);
assertThat(handler.getResultList()).hasSize(1);
BatchIssueDto batchIssueDto = (BatchIssueDto) handler.getResultList().get(0);
// ABCD is the root module, we should find all 4 issues
DefaultResultHandler handler = new DefaultResultHandler();
- dao.selectNonClosedIssuesByProjectUuid(session, "ABCD", handler);
+ sut.selectNonClosedIssuesByProjectUuid(session, "ABCD", handler);
assertThat(handler.getResultList()).hasSize(4);
// DBCA is a a simple project with a single file
handler = new DefaultResultHandler();
- dao.selectNonClosedIssuesByProjectUuid(session, "DBCA", handler);
+ sut.selectNonClosedIssuesByProjectUuid(session, "DBCA", handler);
assertThat(handler.getResultList()).hasSize(1);
BatchIssueDto batchIssueDto = (BatchIssueDto) handler.getResultList().get(0);
@Test
public void insert() throws Exception {
IssueDto dto = new IssueDto();
- dto.setComponent(new ComponentDto().setKey("struts:Action").setId(123L));
- dto.setProject(new ComponentDto().setKey("struts").setId(100L));
+ dto.setComponent(new ComponentDto().setKey("struts:Action").setId(123L).setUuid("component-uuid"));
+ dto.setProject(new ComponentDto().setKey("struts").setId(100L).setUuid("project-uuid"));
dto.setRule(RuleTesting.newDto(RuleKey.of("squid", "S001")).setId(200));
dto.setKee("ABCDE");
dto.setLine(500);
dto.setCreatedAt(1400000000000L);
dto.setUpdatedAt(1450000000000L);
- dao.insert(session, dto);
+ sut.insert(session, dto);
session.commit();
checkTables("insert", new String[] {"id"}, "issues");
}
-
- @Test
- public void update() throws Exception {
- setupData("update");
-
- IssueDto dto = new IssueDto();
- dto.setComponent(new ComponentDto().setKey("struts:Action").setId(123L));
- dto.setProject(new ComponentDto().setKey("struts").setId(101L));
- dto.setRule(RuleTesting.newDto(RuleKey.of("squid", "S001")).setId(200));
- dto.setKee("ABCDE");
- dto.setLine(500);
- dto.setEffortToFix(3.14);
- dto.setDebt(10L);
- dto.setResolution("FIXED");
- dto.setStatus("RESOLVED");
- dto.setSeverity("BLOCKER");
- dto.setReporter("emmerik");
- dto.setAuthorLogin("morgan");
- dto.setAssignee("karadoc");
- dto.setActionPlanKey("current_sprint");
- dto.setIssueAttributes("JIRA=FOO-1234");
- dto.setChecksum("123456789");
- dto.setMessage("the message");
-
- dto.setIssueCreationDate(DateUtils.parseDate("2013-05-18"));
- dto.setIssueUpdateDate(DateUtils.parseDate("2013-05-19"));
- dto.setIssueCloseDate(DateUtils.parseDate("2013-05-20"));
- dto.setCreatedAt(1400000000000L);
- dto.setUpdatedAt(1450000000000L);
-
- dao.update(session, dto);
- session.commit();
-
- checkTables("update", new String[] {"id"}, "issues");
- }
}
--- /dev/null
+<dataset>
+ <issues id="1" kee="ABC"
+ component_id="100" component_uuid="COMPONENTUUID" root_component_id="10" project_uuid="PROJECTUUID"
+ resolution="OPEN" status="OPEN" severity="BLOCKER" manual_severity="[false]"
+ assignee="[null]" author_login="[null]" checksum="[null]" effort_to_fix="[null]" technical_debt="10"
+ message="[null]" line="5000" rule_id="10" reporter="emmerik" issue_attributes="foo=bar"
+ action_plan_key="[null]" tags="[null]"
+ issue_creation_date="2013-05-18" issue_update_date="2013-05-18" issue_close_date="2013-05-18"
+ created_at="1500000000000" updated_at="1500000000000"
+ />
+
+ <!-- re-entrant migration - ignore the issues that are already fed with uuids -->
+ <issues id="2" kee="DEF"
+ component_id="101" component_uuid="ANOTHERUUID" root_component_id="11" project_uuid="ANOTHER2UUID"
+ resolution="OPEN" status="OPEN" severity="BLOCKER" manual_severity="[false]"
+ assignee="[null]" author_login="[null]" checksum="[null]" effort_to_fix="[null]" technical_debt="10"
+ message="[null]" line="5000" rule_id="10" reporter="emmerik" issue_attributes="foo=bar"
+ action_plan_key="[null]" tags="[null]"
+ issue_creation_date="2013-05-18" issue_update_date="2013-05-18" issue_close_date="2013-05-18"
+ created_at="1500000000000" updated_at="1500000000000"
+ />
+</dataset>
--- /dev/null
+<dataset>
+ <projects long_name="org.struts.RequestContext" id="100" scope="FIL" qualifier="FIL"
+ kee="org.struts:struts-core:src/org/struts/RequestContext.java"
+ uuid="COMPONENTUUID" project_uuid="PROJECTUUID" module_uuid="[null]" module_uuid_path="[null]"
+ name="RequestContext.java" root_id="2"
+ description="[null]" deprecated_kee="[null]"
+ enabled="[true]" language="java" copy_resource_id="[null]" person_id="[null]"
+ path="src/org/struts/RequestContext.java" created_at="2014-06-18"/>
+
+ <issues id="1" kee="ABC"
+ component_id="100" component_uuid="[null]" root_component_id="10" project_uuid="[null]"
+ resolution="OPEN" status="OPEN" severity="BLOCKER" manual_severity="[false]"
+ assignee="[null]" author_login="[null]" checksum="[null]" effort_to_fix="[null]" technical_debt="10"
+ message="[null]" line="5000" rule_id="10" reporter="emmerik" issue_attributes="foo=bar"
+ action_plan_key="[null]" tags="[null]"
+ issue_creation_date="2013-05-18" issue_update_date="2013-05-18" issue_close_date="2013-05-18"
+ created_at="1500000000000" updated_at="1500000000000"
+ />
+
+ <!-- re-entrant migration - ignore the issues that are already fed with uuids -->
+ <issues id="2" kee="DEF"
+ component_id="101" component_uuid="ANOTHERUUID" root_component_id="11" project_uuid="ANOTHER2UUID"
+ resolution="OPEN" status="OPEN" severity="BLOCKER" manual_severity="[false]"
+ assignee="[null]" author_login="[null]" checksum="[null]" effort_to_fix="[null]" technical_debt="10"
+ message="[null]" line="5000" rule_id="10" reporter="emmerik" issue_attributes="foo=bar"
+ action_plan_key="[null]" tags="[null]"
+ issue_creation_date="2013-05-18" issue_update_date="2013-05-18" issue_close_date="2013-05-18"
+ created_at="1500000000000" updated_at="1500000000000"
+ />
+</dataset>
--- /dev/null
+CREATE TABLE "PROJECTS" (
+ "ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
+ "KEE" VARCHAR(400),
+ "ROOT_ID" INTEGER,
+ "UUID" VARCHAR(50),
+ "PROJECT_UUID" VARCHAR(50),
+ "MODULE_UUID" VARCHAR(50),
+ "MODULE_UUID_PATH" VARCHAR(4000),
+ "NAME" VARCHAR(256),
+ "DESCRIPTION" VARCHAR(2000),
+ "ENABLED" BOOLEAN NOT NULL DEFAULT TRUE,
+ "SCOPE" VARCHAR(3),
+ "QUALIFIER" VARCHAR(10),
+ "DEPRECATED_KEE" VARCHAR(400),
+ "PATH" VARCHAR(2000),
+ "LANGUAGE" VARCHAR(20),
+ "COPY_RESOURCE_ID" INTEGER,
+ "LONG_NAME" VARCHAR(256),
+ "PERSON_ID" INTEGER,
+ "CREATED_AT" TIMESTAMP,
+ "AUTHORIZATION_UPDATED_AT" BIGINT
+);
+
+CREATE TABLE "ISSUES" (
+ "ID" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
+ "KEE" VARCHAR(50) UNIQUE NOT NULL,
+ "COMPONENT_ID" INTEGER NOT NULL,
+ "COMPONENT_UUID" VARCHAR(50),
+ "ROOT_COMPONENT_ID" INTEGER,
+ "PROJECT_UUID" VARCHAR(50),
+ "RULE_ID" INTEGER,
+ "SEVERITY" VARCHAR(10),
+ "MANUAL_SEVERITY" BOOLEAN NOT NULL,
+ "MESSAGE" VARCHAR(4000),
+ "LINE" INTEGER,
+ "EFFORT_TO_FIX" DOUBLE,
+ "TECHNICAL_DEBT" INTEGER,
+ "STATUS" VARCHAR(20),
+ "RESOLUTION" VARCHAR(20),
+ "CHECKSUM" VARCHAR(1000),
+ "REPORTER" VARCHAR(255),
+ "ASSIGNEE" VARCHAR(255),
+ "AUTHOR_LOGIN" VARCHAR(255),
+ "ACTION_PLAN_KEY" VARCHAR(50) NULL,
+ "ISSUE_ATTRIBUTES" VARCHAR(4000),
+ "TAGS" VARCHAR(4000),
+ "ISSUE_CREATION_DATE" TIMESTAMP,
+ "ISSUE_CLOSE_DATE" TIMESTAMP,
+ "ISSUE_UPDATE_DATE" TIMESTAMP,
+ "CREATED_AT" BIGINT,
+ "UPDATED_AT" BIGINT
+);
<dataset>
<issues id="1" kee="ABCDE" resolution="OPEN" status="OPEN" severity="BLOCKER" manual_severity="[false]"
- assignee="[null]"
- author_login="[null]"
- checksum="[null]"
- effort_to_fix="[null]"
- technical_debt="10"
- message="[null]"
- line="5000"
- component_id="100"
- root_component_id="10"
- rule_id="200"
- created_at="1000000000"
- updated_at="1000000000"
- reporter="emmerik"
- issue_attributes="foo=bar"
- tags="[null]"
- action_plan_key="[null]"
- issue_creation_date="2013-05-18"
- issue_update_date="2013-05-18"
- issue_close_date="2013-05-18"
+ assignee="[null]"
+ author_login="[null]"
+ checksum="[null]"
+ effort_to_fix="[null]"
+ technical_debt="10"
+ message="[null]"
+ line="5000"
+ component_id="100"
+ component_uuid="BCDE"
+ project_uuid="ABCD"
+ root_component_id="10"
+ rule_id="200"
+ created_at="1000000000"
+ updated_at="1000000000"
+ reporter="emmerik"
+ issue_attributes="foo=bar"
+ tags="[null]"
+ action_plan_key="[null]"
+ issue_creation_date="2013-05-18"
+ issue_update_date="2013-05-18"
+ issue_close_date="2013-05-18"
/>
- <issue_changes id="1" kee="FGHIJ" issue_key="ABCDE" change_type="comment" user_login="emmerik" change_data="the comment"
- created_at="[null]" updated_at="[null]" issue_change_creation_date="[null]" />
+ <issue_changes id="1" kee="FGHIJ" issue_key="ABCDE" change_type="comment" user_login="emmerik"
+ change_data="the comment"
+ created_at="[null]" updated_at="[null]" issue_change_creation_date="[null]"/>
</dataset>
message="[null]"
line="5000"
component_id="100"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="10"
rule_id="200"
created_at="1000000000"
issue_creation_date="2013-05-18 00:00:00.0"
issue_update_date="2013-05-18 00:00:00.0"
issue_close_date="2013-05-18 00:00:00.0"
- />
+ />
<issue_changes id="1" kee="FGHIJ" issue_key="ABCDE" change_type="comment" user_login="emmerik"
change_data="the comment" created_at="[null]" updated_at="[null]" issue_change_creation_date="[null]"/>
<issue_changes id="2" kee="[null]" issue_key="ABCDE" change_type="diff" user_login="emmerik"
- change_data="severity=INFO|BLOCKER" created_at="[null]" updated_at="[null]" issue_change_creation_date="[null]"/>
+ change_data="severity=INFO|BLOCKER" created_at="[null]" updated_at="[null]"
+ issue_change_creation_date="[null]"/>
</dataset>
message="[null]"
line="3000"
component_id="100"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="10"
rule_id="200"
created_at="1000000000"
id="100"
kee="ABCDE"
component_id="123"
+ component_uuid="component-uuid"
+ project_uuid="project-uuid"
root_component_id="100"
rule_id="200"
severity="BLOCKER"
+++ /dev/null
-<dataset>
- <issues
- id="100"
- kee="ABCDE"
- component_id="123"
- root_component_id="101"
- rule_id="200"
- severity="BLOCKER"
- manual_severity="[false]"
- message="the message"
- line="500"
- effort_to_fix="3.14"
- technical_debt="10"
- status="RESOLVED"
- resolution="FIXED"
- checksum="123456789"
- reporter="emmerik"
- author_login="morgan"
- assignee="karadoc"
- issue_attributes="JIRA=FOO-1234"
- tags="[null]"
- issue_creation_date="2013-05-18"
- issue_update_date="2013-05-19"
- issue_close_date="2013-05-20"
- created_at="1400000000000"
- updated_at="1450000000000"
- action_plan_key="current_sprint"
- />
-</dataset>
+++ /dev/null
-<dataset>
- <issues
- id="100"
- kee="ABCDE"
- component_id="123"
- root_component_id="100"
- rule_id="200"
- severity="INFO"
- manual_severity="[false]"
- message="old"
- line="[null]"
- effort_to_fix="[null]"
- technical_debt="[null]"
- status="OPEN"
- resolution="[null]"
- checksum="[null]"
- reporter="[null]"
- author_login="[null]"
- assignee="[null]"
- issue_attributes="[null]"
- issue_creation_date="[null]"
- issue_update_date="[null]"
- issue_close_date="[null]"
- created_at="1400000000000"
- updated_at="1400000000000"
- action_plan_key="[null]"
- />
-</dataset>
--- /dev/null
+#
+# SonarQube, open source software quality management tool.
+# Copyright (C) 2008-2014 SonarSource
+# mailto:contact AT sonarsource DOT com
+#
+# SonarQube is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 3 of the License, or (at your option) any later version.
+#
+# SonarQube is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+#
+# SonarQube 5.1
+#
+class AddIssueComponentUuids < ActiveRecord::Migration
+
+ def self.up
+ add_column 'issues', :component_uuid, :string, :limit => 50, :null => true
+ add_column 'issues', :project_uuid, :string, :limit => 50, :null => true
+ add_index 'issues', 'component_uuid', :name => 'issues_component_uuid'
+ add_index 'issues', 'project_uuid', :name => 'issues_project_uuid'
+ end
+end
--- /dev/null
+#
+# SonarQube, open source software quality management tool.
+# Copyright (C) 2008-2014 SonarSource
+# mailto:contact AT sonarsource DOT com
+#
+# SonarQube is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 3 of the License, or (at your option) any later version.
+#
+# SonarQube is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+#
+# SonarQube 5.1
+#
+class FeedIssueComponentUuids < ActiveRecord::Migration
+
+ def self.up
+ execute_java_migration('org.sonar.server.db.migrations.v51.FeedIssueComponentUuids')
+ end
+end
/**
* On batch side, component keys and uuid are useless
*/
- public static IssueDto toDtoForBatchInsert(DefaultIssue issue, long componentId, long projectId, int ruleId, long now) {
+ public static IssueDto toDtoForComputationInsert(DefaultIssue issue, long componentId, long projectId, int ruleId, long now) {
return new IssueDto()
.setKee(issue.key())
.setLine(issue.line())
/**
* On server side, we need component keys and uuid
*/
- public static IssueDto toDtoForServerInsert(DefaultIssue issue, ComponentDto component, ComponentDto project, Integer ruleId, long now) {
- return toDtoForBatchInsert(issue, component.getId(), project.getId(), ruleId, now)
+ public static IssueDto toDtoForServerInsert(DefaultIssue issue, ComponentDto component, ComponentDto project, int ruleId, long now) {
+ return toDtoForComputationInsert(issue, component.getId(), project.getId(), ruleId, now)
.setComponent(component)
.setProject(project);
}
*/
public class DatabaseVersion implements BatchComponent, ServerComponent {
- public static final int LAST_VERSION = 770;
+ public static final int LAST_VERSION = 772;
/**
* List of all the tables.n
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, tags,
resolution, checksum, reporter, assignee, author_login, issue_attributes, issue_creation_date, issue_update_date,
- issue_close_date, created_at, updated_at)
- VALUES (#{kee,jdbcType=VARCHAR}, #{componentId,jdbcType=BIGINT}, #{projectId,jdbcType=BIGINT}, #{ruleId,jdbcType=INTEGER}, #{actionPlanKey,jdbcType=VARCHAR}, #{severity,jdbcType=VARCHAR}, #{manualSeverity,jdbcType=BOOLEAN},
- #{message,jdbcType=VARCHAR}, #{line,jdbcType=INTEGER}, #{effortToFix,jdbcType=DOUBLE}, #{debt,jdbcType=INTEGER}, #{status,jdbcType=VARCHAR}, #{tagsString,jdbcType=VARCHAR},
- #{resolution,jdbcType=VARCHAR}, #{checksum,jdbcType=VARCHAR}, #{reporter,jdbcType=VARCHAR}, #{assignee,jdbcType=VARCHAR}, #{authorLogin,jdbcType=VARCHAR}, #{issueAttributes,jdbcType=VARCHAR}, #{issueCreationDate,jdbcType=TIMESTAMP},
- #{issueUpdateDate,jdbcType=TIMESTAMP}, #{issueCloseDate,jdbcType=TIMESTAMP}, #{createdAt,jdbcType=BIGINT}, #{updatedAt,jdbcType=BIGINT})
+ issue_close_date, created_at, updated_at, component_uuid, project_uuid)
+ VALUES (#{kee,jdbcType=VARCHAR}, #{componentId,jdbcType=BIGINT}, #{projectId,jdbcType=BIGINT},
+ #{ruleId,jdbcType=INTEGER}, #{actionPlanKey,jdbcType=VARCHAR}, #{severity,jdbcType=VARCHAR},
+ #{manualSeverity,jdbcType=BOOLEAN}, #{message,jdbcType=VARCHAR}, #{line,jdbcType=INTEGER},
+ #{effortToFix,jdbcType=DOUBLE}, #{debt,jdbcType=INTEGER}, #{status,jdbcType=VARCHAR},
+ #{tagsString,jdbcType=VARCHAR}, #{resolution,jdbcType=VARCHAR}, #{checksum,jdbcType=VARCHAR},
+ #{reporter,jdbcType=VARCHAR}, #{assignee,jdbcType=VARCHAR}, #{authorLogin,jdbcType=VARCHAR},
+ #{issueAttributes,jdbcType=VARCHAR},
+ #{issueCreationDate,jdbcType=TIMESTAMP},#{issueUpdateDate,jdbcType=TIMESTAMP}, #{issueCloseDate,jdbcType=TIMESTAMP},
+ #{createdAt,jdbcType=BIGINT}, #{updatedAt,jdbcType=BIGINT},
+ #{componentUuid,jdbcType=VARCHAR}, #{projectUuid,jdbcType=VARCHAR})
</insert>
<!--
author_login=#{authorLogin},
tags=#{tagsString},
root_component_id=#{projectId},
+ project_uuid=#{projectUuid},
issue_attributes=#{issueAttributes},
issue_creation_date=#{issueCreationDate},
issue_update_date=#{issueUpdateDate},
author_login=#{authorLogin},
tags=#{tagsString},
root_component_id=#{projectId},
+ project_uuid=#{projectUuid},
issue_attributes=#{issueAttributes},
issue_creation_date=#{issueCreationDate},
issue_update_date=#{issueUpdateDate},
i.component_id as componentId,
i.root_component_id as projectId,
i.rule_id as ruleId,
+ i.component_uuid as componentUuid,
+ i.project_uuid as projectUuid,
i.action_plan_key as actionPlanKey,
i.severity as severity,
i.manual_severity as manualSeverity,
p.kee as componentKey,
root.kee as projectKey
from issues i
- inner join (select p.id,p.kee from projects p where (p.root_id=#{id} and p.qualifier <> 'BRC') or (p.id=#{id})) p on p.id=i.component_id
+ inner join (select p.id,p.kee from projects p where (p.root_id=#{id} and p.qualifier <> '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 <> 'CLOSED'
r.plugin_name as ruleRepo,
component.kee as componentKey
FROM issues i
- INNER JOIN (SELECT p.id,p.kee FROM projects p WHERE p.module_uuid=#{uuid} OR p.uuid=#{uuid}) component ON component.id=i.component_id
+ INNER JOIN (SELECT p.id,p.kee FROM projects p WHERE p.module_uuid=#{uuid} OR p.uuid=#{uuid}) component ON
+ component.id=i.component_id
INNER JOIN rules r ON r.id=i.rule_id
WHERE i.status <> 'CLOSED'
</select>
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('754');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('755');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('756');
+INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('757');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('758');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('759');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('760');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('768');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('769');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('770');
+INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('771');
+INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('772');
INSERT INTO USERS(ID, LOGIN, NAME, EMAIL, CRYPTED_PASSWORD, SALT, CREATED_AT, UPDATED_AT, REMEMBER_TOKEN, REMEMBER_TOKEN_EXPIRES_AT) VALUES (1, 'admin', 'Administrator', '', 'a373a0e667abb2604c1fd571eb4ad47fe8cc0878', '48bc4b0d93179b5103fd3885ea9119498e9d161b', '1418215735482', '1418215735482', null, null);
ALTER TABLE USERS ALTER COLUMN ID RESTART WITH 2;
"ID" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
"KEE" VARCHAR(50) UNIQUE NOT NULL,
"COMPONENT_ID" INTEGER NOT NULL,
+ "COMPONENT_UUID" VARCHAR(50),
"ROOT_COMPONENT_ID" INTEGER,
+ "PROJECT_UUID" VARCHAR(50),
"RULE_ID" INTEGER,
"SEVERITY" VARCHAR(10),
"MANUAL_SEVERITY" BOOLEAN NOT NULL,
CREATE INDEX "ISSUES_COMPONENT_ID" ON "ISSUES" ("COMPONENT_ID");
+CREATE INDEX "ISSUES_COMPONENT_UUID" ON "ISSUES" ("COMPONENT_UUID");
+
CREATE INDEX "ISSUES_ROOT_COMPONENT_ID" ON "ISSUES" ("ROOT_COMPONENT_ID");
+CREATE INDEX "ISSUES_PROJECT_UUID" ON "ISSUES" ("PROJECT_UUID");
+
CREATE INDEX "ISSUES_RULE_ID" ON "ISSUES" ("RULE_ID");
CREATE INDEX "ISSUES_SEVERITY" ON "ISSUES" ("SEVERITY");
}
@Test
- public void testInsert() throws Exception {
+ public void insert() throws Exception {
IssueDto dto = new IssueDto();
dto.setComponentId(123l);
+ dto.setComponentUuid("component-uuid");
dto.setProjectId(100l);
+ dto.setProjectUuid("project-uuid");
dto.setRuleId(200);
dto.setKee("ABCDE");
dto.setLine(500);
mapper.insert(dto);
session.commit();
- checkTables("testInsert", new String[]{"id"}, "issues");
+ checkTables("testInsert", new String[] {"id"}, "issues");
}
@Test
- public void testUpdate() throws Exception {
+ public void update() throws Exception {
setupData("testUpdate");
IssueDto dto = new IssueDto();
dto.setComponentId(123l);
dto.setProjectId(101l);
+ dto.setProjectUuid("project-uuid-2");
dto.setRuleId(200);
dto.setKee("ABCDE");
dto.setLine(500);
mapper.update(dto);
session.commit();
- checkTables("testUpdate", new String[]{"id"}, "issues");
+ checkTables("testUpdate", new String[] {"id"}, "issues");
}
@Test
IssueDto dto = new IssueDto();
dto.setComponentId(123l);
dto.setProjectId(101l);
+ dto.setProjectUuid("project-uuid-2");
dto.setRuleId(200);
dto.setKee("ABCDE");
dto.setLine(500);
assertThat(count).isEqualTo(1);
session.commit();
- checkTables("testUpdate", new String[]{"id"}, "issues");
+ checkTables("testUpdate", new String[] {"id"}, "issues");
}
@Test
IssueDto dto = new IssueDto();
dto.setComponentId(123l);
dto.setProjectId(101l);
+ dto.setProjectUuid("project-uuid-2");
dto.setRuleId(200);
dto.setKee("ABCDE");
dto.setLine(500);
assertThat(count).isEqualTo(0);
session.commit();
- checkTables("updateBeforeSelectedDate_with_conflict", new String[]{"id"}, "issues");
+ checkTables("updateBeforeSelectedDate_with_conflict", new String[] {"id"}, "issues");
}
}
.setUpdateDate(date)
.setCloseDate(date)
+ .setComponentUuid("component-uuid")
+ .setProjectUuid("project-uuid")
.setComponentKey("struts:Action");
saver.save(issue);
.setUpdateDate(date)
.setCloseDate(date)
+ .setComponentUuid("component-uuid")
+ .setProjectUuid("project-uuid")
.setComponentKey("struts:Action");
saver.save(session, issue);
@Test
public void server_insert_new_issues_with_session() throws Exception {
- ComponentDto project = new ComponentDto().setId(10L);
- ComponentDto component = new ComponentDto().setId(100L);
+ ComponentDto project = new ComponentDto().setId(10L).setUuid("project-uuid");
+ ComponentDto component = new ComponentDto().setId(100L).setUuid("component-uuid");
FakeServerSaver saver = new FakeServerSaver(getMyBatis(), new FakeRuleFinder(), component, project);
DefaultIssueComment comment = DefaultIssueComment.create("ABCDE", "emmerik", "the comment");
.setUpdateDate(date)
.setCloseDate(date)
- .setComponentKey("struts:Action");
+ .setComponentKey("struts:Action")
+ .setComponentUuid("component-uuid")
+ .setProjectUuid("project-uuid");
saver.save(session, issue);
session.commit();
@Override
protected void doInsert(DbSession session, long now, DefaultIssue issue) {
int ruleId = rule(issue).getId();
- IssueDto dto = IssueDto.toDtoForBatchInsert(issue, 100l, 10l, ruleId, now);
+ IssueDto dto = IssueDto.toDtoForComputationInsert(issue, 100l, 10l, ruleId, now);
session.getMapper(IssueMapper.class).insert(dto);
}
id="100"
kee="ABCDE"
component_id="123"
+ component_uuid="component-uuid"
+ project_uuid="project-uuid"
root_component_id="100"
rule_id="200"
severity="BLOCKER"
id="100"
kee="ABCDE"
component_id="123"
+ component_uuid="component-uuid"
+ project_uuid="project-uuid-2"
root_component_id="101"
rule_id="200"
severity="BLOCKER"
id="100"
kee="ABCDE"
component_id="123"
+ component_uuid="component-uuid"
+ project_uuid="project-uuid"
root_component_id="100"
rule_id="200"
severity="INFO"
id="100"
kee="ABCDE"
component_id="123"
+ component_uuid="component-uuid"
+ project_uuid="project-uuid"
root_component_id="100"
rule_id="200"
severity="INFO"
id="100"
kee="ABCDE"
component_id="123"
+ component_uuid="component-uuid"
+ project_uuid="project-uuid"
root_component_id="100"
rule_id="200"
severity="INFO"
<dataset>
<issues id="1" kee="ABCDE" resolution="OPEN" status="OPEN" severity="BLOCKER" manual_severity="[false]"
- assignee="[null]"
- author_login="[null]"
- checksum="[null]"
- effort_to_fix="[null]"
- technical_debt="10"
- message="[null]"
- line="5000"
- component_id="100"
- root_component_id="10"
- rule_id="200"
- created_at="[null]"
- updated_at="[null]"
- reporter="emmerik"
- issue_attributes="foo=bar"
- tags="[null]"
- action_plan_key="[null]"
- issue_creation_date="2013-05-18"
- issue_update_date="2013-05-18"
- issue_close_date="2013-05-18"
+ assignee="[null]"
+ author_login="[null]"
+ checksum="[null]"
+ effort_to_fix="[null]"
+ technical_debt="10"
+ message="[null]"
+ line="5000"
+ component_id="100"
+ root_component_id="10"
+ component_uuid="component-uuid"
+ project_uuid="project-uuid"
+ rule_id="200"
+ created_at="[null]"
+ updated_at="[null]"
+ reporter="emmerik"
+ issue_attributes="foo=bar"
+ tags="[null]"
+ action_plan_key="[null]"
+ issue_creation_date="2013-05-18"
+ issue_update_date="2013-05-18"
+ issue_close_date="2013-05-18"
/>
- <issue_changes id="1" kee="FGHIJ" issue_key="ABCDE" change_type="comment" user_login="emmerik" change_data="the comment"
- created_at="[null]" updated_at="[null]" issue_change_creation_date="[null]" />
+ <issue_changes id="1" kee="FGHIJ" issue_key="ABCDE" change_type="comment" user_login="emmerik"
+ change_data="the comment"
+ created_at="[null]" updated_at="[null]" issue_change_creation_date="[null]"/>
</dataset>
message="[null]"
line="444"
component_id="100"
+ component_uuid="component-uuid"
+ project_uuid="project-uuid"
root_component_id="10"
rule_id="200"
reporter="[null]"
issue_creation_date="2005-05-12 00:00:00.0"
issue_update_date="2013-05-18 00:00:00.0"
issue_close_date="[null]"
- />
+ />
</dataset>
<dataset>
<rules tags="[null]" system_tags="[null]" id="200" name="Avoid Cycles" plugin_rule_key="AvoidCycles"
- plugin_config_key="[null]" plugin_name="squid" />
+ plugin_config_key="[null]" plugin_name="squid"/>
<projects id="10" scope="PRJ" qualifier="TRK" kee="struts" name="Struts"/>
<projects id="100" scope="FIL" qualifier="CLA" kee="struts:Action" name="Action"/>
message="[null]"
line="1"
component_id="100"
+ component_uuid="component-uuid"
+ project_uuid="project-uuid"
root_component_id="10"
rule_id="200"
reporter="[null]"
issue_creation_date="2005-05-12 00:00:00.0"
issue_update_date="2013-05-18 00:00:00.0"
issue_close_date="[null]"
- />
+ />
</dataset>
message="[null]"
line="5000"
component_id="100"
+ component_uuid="component-uuid"
+ project_uuid="[null]"
root_component_id="10"
rule_id="200"
created_at="2013-05-18"
issue_creation_date="2013-05-18 00:00:00.0"
issue_update_date="2013-05-18 00:00:00.0"
issue_close_date="2013-05-18 00:00:00.0"
- />
+ />
<issue_changes id="1" kee="FGHIJ" issue_key="ABCDE" change_type="comment" user_login="emmerik"
change_data="the comment" created_at="[null]" updated_at="[null]" issue_change_creation_date="[null]"/>
<issue_changes id="2" kee="[null]" issue_key="ABCDE" change_type="diff" user_login="emmerik"
- change_data="severity=INFO|BLOCKER" created_at="[null]" updated_at="[null]" issue_change_creation_date="[null]"/>
+ change_data="severity=INFO|BLOCKER" created_at="[null]" updated_at="[null]"
+ issue_change_creation_date="[null]"/>
</dataset>
message="[null]"
line="3000"
component_id="100"
+ component_uuid="component-uuid"
+ project_uuid="[null]"
root_component_id="10"
rule_id="200"
created_at="1400000000000"
issue_creation_date="2010-01-01"
issue_update_date="2010-02-02"
issue_close_date="[null]"
- />
+ />
</dataset>
<!-- Open issue on file -->
<issues id="1" kee="ISSUE-1"
component_id="3"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CLOSED"
issue_close_date="2014-04-09"
<!-- Open issue on directory -->
<issues id="2" kee="ISSUE-2"
component_id="2"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CLOSED"
issue_close_date="2014-04-09"
<!-- Open issue on project -->
<issues id="3" kee="ISSUE-3"
component_id="1"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CLOSED"
issue_close_date="2014-04-09"
<!-- Resolved issue on file -> not to be updated -->
<issues id="4" kee="ISSUE-4"
component_id="3"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CLOSED"
issue_close_date="2015-12-08"
<!-- Open issue on file -->
<issues id="1" kee="ISSUE-1"
component_id="3"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="OPEN"
issue_close_date="[null]"
<!-- Open issue on directory -->
<issues id="2" kee="ISSUE-2"
component_id="2"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="OPEN"
issue_close_date="[null]"
<!-- Open issue on project -->
<issues id="3" kee="ISSUE-3"
component_id="1"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CONFIRM"
issue_close_date="[null]"
<!-- Resolved issue on file -> not to be updated -->
<issues id="4" kee="ISSUE-4"
component_id="3"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CLOSED"
issue_close_date="2015-12-08"
<!-- old open issues -->
<issues id="3" kee="ISSUE-3"
component_id="1"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="OPEN"
issue_close_date="[null]"
<!-- recent open and closed issues -->
<issues id="4" kee="ISSUE-4"
component_id="100"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="OPEN"
issue_close_date="[null]"
<projects id="1" enabled="[true]" root_id="[null]" created_at="[null]"
long_name="[null]" scope="PRJ" qualifier="TRK" kee="project" name="project"
- description="[null]" language="java" copy_resource_id="[null]" person_id="[null]" authorization_updated_at="[null]"/>
+ description="[null]" language="java" copy_resource_id="[null]" person_id="[null]"
+ authorization_updated_at="[null]"/>
<snapshots id="1"
project_id="1" parent_snapshot_id="[null]" root_project_id="1" root_snapshot_id="[null]"
period3_mode="[null]" period3_param="[null]" period3_date="[null]"
period4_mode="[null]" period4_param="[null]" period4_date="[null]"
period5_mode="[null]" period5_param="[null]" period5_date="[null]"
- depth="[null]" scope="PRJ" qualifier="TRK" created_at="2008-12-02 13:58:00.00" build_date="2008-12-02 13:58:00.00" version="[null]" path="[null]"/>
+ depth="[null]" scope="PRJ" qualifier="TRK" created_at="2008-12-02 13:58:00.00"
+ build_date="2008-12-02 13:58:00.00" version="[null]" path="[null]"/>
<!-- old closed issues on file and project -->
<issues id="1" kee="ISSUE-1"
component_id="100"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CLOSED"
issue_close_date="2010-01-01"
- resolution="FIXED" line="200" severity="BLOCKER" reporter="perceval" assignee="arthur" rule_id="500" manual_severity="[false]"
- message="[null]" action_plan_key="[null]" effort_to_fix="[null]" technical_debt="[null]" issue_attributes="[null]" checksum="[null]" author_login="[null]"
- updated_at="[null]" issue_creation_date="2013-04-16" issue_update_date="2013-04-16" created_at="1400000000000"/>
- <issue_changes id="1" kee="[null]" issue_key="ISSUE-1" created_at="[null]" updated_at="[null]" user_login="admin" change_type="comment" change_data="abc" issue_change_creation_date="[null]"/>
+ resolution="FIXED" line="200" severity="BLOCKER" reporter="perceval" assignee="arthur" rule_id="500"
+ manual_severity="[false]"
+ message="[null]" action_plan_key="[null]" effort_to_fix="[null]" technical_debt="[null]"
+ issue_attributes="[null]" checksum="[null]" author_login="[null]"
+ updated_at="[null]" issue_creation_date="2013-04-16" issue_update_date="2013-04-16"
+ created_at="1400000000000"/>
+ <issue_changes id="1" kee="[null]" issue_key="ISSUE-1" created_at="[null]" updated_at="[null]" user_login="admin"
+ change_type="comment" change_data="abc" issue_change_creation_date="[null]"/>
<issues id="2" kee="ISSUE-2"
component_id="1"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CLOSED"
issue_close_date="2010-01-01"
- resolution="FIXED" line="200" severity="BLOCKER" reporter="perceval" assignee="arthur" rule_id="500" manual_severity="[false]"
- message="[null]" action_plan_key="[null]" effort_to_fix="[null]" technical_debt="[null]" issue_attributes="[null]" checksum="[null]" author_login="[null]"
- updated_at="[null]" issue_creation_date="2013-04-16" issue_update_date="2013-04-16" created_at="1400000000000"/>
- <issue_changes id="2" kee="[null]" issue_key="ISSUE-2" created_at="[null]" updated_at="[null]" user_login="admin" change_type="comment" change_data="abc" issue_change_creation_date="[null]"/>
+ resolution="FIXED" line="200" severity="BLOCKER" reporter="perceval" assignee="arthur" rule_id="500"
+ manual_severity="[false]"
+ message="[null]" action_plan_key="[null]" effort_to_fix="[null]" technical_debt="[null]"
+ issue_attributes="[null]" checksum="[null]" author_login="[null]"
+ updated_at="[null]" issue_creation_date="2013-04-16" issue_update_date="2013-04-16"
+ created_at="1400000000000"/>
+ <issue_changes id="2" kee="[null]" issue_key="ISSUE-2" created_at="[null]" updated_at="[null]" user_login="admin"
+ change_type="comment" change_data="abc" issue_change_creation_date="[null]"/>
<!-- old open issues -->
<issues id="3" kee="ISSUE-3"
component_id="1"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="OPEN"
issue_close_date="[null]"
- resolution="[null]" line="200" severity="BLOCKER" reporter="perceval" assignee="arthur" rule_id="500" manual_severity="[false]"
- message="[null]" action_plan_key="[null]" effort_to_fix="[null]" technical_debt="[null]" issue_attributes="[null]" checksum="[null]" author_login="[null]"
- updated_at="[null]" issue_creation_date="2013-04-16" issue_update_date="2013-04-16" created_at="1400000000000"/>
- <issue_changes id="3" kee="[null]" issue_key="ISSUE-3" created_at="[null]" updated_at="[null]" user_login="admin" change_type="comment" change_data="abc" issue_change_creation_date="[null]"/>
+ resolution="[null]" line="200" severity="BLOCKER" reporter="perceval" assignee="arthur" rule_id="500"
+ manual_severity="[false]"
+ message="[null]" action_plan_key="[null]" effort_to_fix="[null]" technical_debt="[null]"
+ issue_attributes="[null]" checksum="[null]" author_login="[null]"
+ updated_at="[null]" issue_creation_date="2013-04-16" issue_update_date="2013-04-16"
+ created_at="1400000000000"/>
+ <issue_changes id="3" kee="[null]" issue_key="ISSUE-3" created_at="[null]" updated_at="[null]" user_login="admin"
+ change_type="comment" change_data="abc" issue_change_creation_date="[null]"/>
<!-- recent open and closed issues -->
<issues id="4" kee="ISSUE-4"
component_id="100"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="OPEN"
issue_close_date="[null]"
- resolution="[null]" line="200" severity="BLOCKER" reporter="perceval" assignee="arthur" rule_id="500" manual_severity="[false]"
- message="[null]" action_plan_key="[null]" effort_to_fix="[null]" technical_debt="[null]" issue_attributes="[null]" checksum="[null]" author_login="[null]"
- updated_at="[null]" issue_creation_date="2013-04-16" issue_update_date="2013-04-16" created_at="1400000000000"/>
- <issue_changes id="4" kee="[null]" issue_key="ISSUE-4" created_at="[null]" updated_at="[null]" user_login="admin" change_type="comment" change_data="abc" issue_change_creation_date="[null]"/>
+ resolution="[null]" line="200" severity="BLOCKER" reporter="perceval" assignee="arthur" rule_id="500"
+ manual_severity="[false]"
+ message="[null]" action_plan_key="[null]" effort_to_fix="[null]" technical_debt="[null]"
+ issue_attributes="[null]" checksum="[null]" author_login="[null]"
+ updated_at="[null]" issue_creation_date="2013-04-16" issue_update_date="2013-04-16"
+ created_at="1400000000000"/>
+ <issue_changes id="4" kee="[null]" issue_key="ISSUE-4" created_at="[null]" updated_at="[null]" user_login="admin"
+ change_type="comment" change_data="abc" issue_change_creation_date="[null]"/>
<issues id="5" kee="ISSUE-5"
component_id="100"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CLOSED"
issue_close_date="2025-01-01"
- resolution="FIXED" line="200" severity="BLOCKER" reporter="perceval" assignee="arthur" rule_id="500" manual_severity="[false]"
- message="[null]" action_plan_key="[null]" effort_to_fix="[null]" technical_debt="[null]" issue_attributes="[null]" checksum="[null]" author_login="[null]"
- updated_at="[null]" issue_creation_date="2013-04-16" issue_update_date="2013-04-16" created_at="1400000000000"/>
- <issue_changes id="5" kee="[null]" issue_key="ISSUE-5" created_at="[null]" updated_at="[null]" user_login="admin" change_type="comment" change_data="abc" issue_change_creation_date="[null]"/>
+ resolution="FIXED" line="200" severity="BLOCKER" reporter="perceval" assignee="arthur" rule_id="500"
+ manual_severity="[false]"
+ message="[null]" action_plan_key="[null]" effort_to_fix="[null]" technical_debt="[null]"
+ issue_attributes="[null]" checksum="[null]" author_login="[null]"
+ updated_at="[null]" issue_creation_date="2013-04-16" issue_update_date="2013-04-16"
+ created_at="1400000000000"/>
+ <issue_changes id="5" kee="[null]" issue_key="ISSUE-5" created_at="[null]" updated_at="[null]" user_login="admin"
+ change_type="comment" change_data="abc" issue_change_creation_date="[null]"/>
</dataset>
<!-- old open issues -> do not purge -->
<issues id="3" kee="ISSUE-3"
component_id="1"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="OPEN"
issue_close_date="[null]"
<!-- recent open and closed issues -> do not purge -->
<issues id="4" kee="ISSUE-4"
component_id="100"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="OPEN"
issue_close_date="[null]"
<issues id="5" kee="ISSUE-5"
component_id="100"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CLOSED"
issue_close_date="2025-01-01"
<!-- old closed issues on file and project -> to be purged -->
<issues id="1" kee="ISSUE-1"
component_id="100"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CLOSED"
issue_close_date="2010-01-01"
<issues id="2" kee="ISSUE-2"
component_id="1"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CLOSED"
issue_close_date="2010-01-01"
<!-- recent open and closed issues -> do not purge -->
<issues id="4" kee="ISSUE-4"
component_id="100"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="OPEN"
issue_close_date="[null]"
<issues id="5" kee="ISSUE-5"
component_id="100"
+ component_uuid="[null]"
+ project_uuid="[null]"
root_component_id="1"
status="CLOSED"
issue_close_date="2025-01-01"