From 9a86ee019c97e81e698e8387d7bc4ff106b8f05b Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Thu, 3 Dec 2015 15:25:09 +0100 Subject: [PATCH] SONAR-6925 add missing index on ce_activity.is_last_key --- ...03_add_index_on_ce_activity_is_last_key.rb | 32 +++++++++++++++++++ .../org/sonar/db/version/DatabaseVersion.java | 2 +- .../org/sonar/db/version/rows-h2.sql | 1 + .../org/sonar/db/version/schema-h2.ddl | 2 ++ .../org/sonar/db/ce/CeActivityDaoTest.java | 9 +++++- 5 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 server/sonar-web/src/main/webapp/WEB-INF/db/migrate/1003_add_index_on_ce_activity_is_last_key.rb diff --git a/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/1003_add_index_on_ce_activity_is_last_key.rb b/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/1003_add_index_on_ce_activity_is_last_key.rb new file mode 100644 index 00000000000..74703118717 --- /dev/null +++ b/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/1003_add_index_on_ce_activity_is_last_key.rb @@ -0,0 +1,32 @@ +# +# 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.3 +# +class AddIndexOnCeActivityIsLastKey < ActiveRecord::Migration + + def self.up + add_index :ce_activity, :is_last_key, :name => 'ce_activity_islastkey' + end + +end + + diff --git a/sonar-db/src/main/java/org/sonar/db/version/DatabaseVersion.java b/sonar-db/src/main/java/org/sonar/db/version/DatabaseVersion.java index 2faa9191b04..a9180d4e9c8 100644 --- a/sonar-db/src/main/java/org/sonar/db/version/DatabaseVersion.java +++ b/sonar-db/src/main/java/org/sonar/db/version/DatabaseVersion.java @@ -29,7 +29,7 @@ import org.sonar.db.MyBatis; public class DatabaseVersion { - public static final int LAST_VERSION = 1002; + public static final int LAST_VERSION = 1003; /** * The minimum supported version which can be upgraded. Lower diff --git a/sonar-db/src/main/resources/org/sonar/db/version/rows-h2.sql b/sonar-db/src/main/resources/org/sonar/db/version/rows-h2.sql index 4f97c05b4d5..0b770f42727 100644 --- a/sonar-db/src/main/resources/org/sonar/db/version/rows-h2.sql +++ b/sonar-db/src/main/resources/org/sonar/db/version/rows-h2.sql @@ -363,6 +363,7 @@ INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('941'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('1000'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('1001'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('1002'); +INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('1003'); 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; diff --git a/sonar-db/src/main/resources/org/sonar/db/version/schema-h2.ddl b/sonar-db/src/main/resources/org/sonar/db/version/schema-h2.ddl index 97655698ec4..d71d0d7399d 100644 --- a/sonar-db/src/main/resources/org/sonar/db/version/schema-h2.ddl +++ b/sonar-db/src/main/resources/org/sonar/db/version/schema-h2.ddl @@ -710,3 +710,5 @@ CREATE INDEX "CE_ACTIVITY_COMPONENT_UUID" ON "CE_ACTIVITY" ("COMPONENT_UUID"); CREATE UNIQUE INDEX "USER_TOKENS_TOKEN_HASH" ON "USER_TOKENS" ("TOKEN_HASH"); CREATE UNIQUE INDEX "USER_TOKENS_LOGIN_NAME" ON "USER_TOKENS" ("LOGIN", "NAME"); + +CREATE INDEX "CE_ACTIVITY_ISLASTKEY" ON "CE_ACTIVITY" ("IS_LAST_KEY"); diff --git a/sonar-db/src/test/java/org/sonar/db/ce/CeActivityDaoTest.java b/sonar-db/src/test/java/org/sonar/db/ce/CeActivityDaoTest.java index 564f413c29a..8b94ef241bd 100644 --- a/sonar-db/src/test/java/org/sonar/db/ce/CeActivityDaoTest.java +++ b/sonar-db/src/test/java/org/sonar/db/ce/CeActivityDaoTest.java @@ -73,11 +73,18 @@ public class CeActivityDaoTest { insert("TASK_2", REPORT, "PROJECT_2", CeActivityDto.Status.SUCCESS); assertThat(underTest.selectByUuid(db.getSession(), "TASK_2").get().getIsLast()).isTrue(); - // two tasks on PROJECT_1, the more recent one is TASK_3 + // two tasks on PROJECT_1, the most recent one is TASK_3 insert("TASK_3", REPORT, "PROJECT_1", CeActivityDto.Status.FAILED); assertThat(underTest.selectByUuid(db.getSession(), "TASK_1").get().getIsLast()).isFalse(); assertThat(underTest.selectByUuid(db.getSession(), "TASK_2").get().getIsLast()).isTrue(); assertThat(underTest.selectByUuid(db.getSession(), "TASK_3").get().getIsLast()).isTrue(); + + // inserting a cancelled task does not change the last task + insert("TASK_4", REPORT, "PROJECT_1", CeActivityDto.Status.CANCELED); + assertThat(underTest.selectByUuid(db.getSession(), "TASK_1").get().getIsLast()).isFalse(); + assertThat(underTest.selectByUuid(db.getSession(), "TASK_2").get().getIsLast()).isTrue(); + assertThat(underTest.selectByUuid(db.getSession(), "TASK_3").get().getIsLast()).isTrue(); + assertThat(underTest.selectByUuid(db.getSession(), "TASK_4").get().getIsLast()).isFalse(); } @Test -- 2.39.5