INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('495');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('496');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('497');
+INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('498');
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', '2011-09-26 22:27:48.0', '2011-09-26 22:27:48.0', null, null);
ALTER TABLE USERS ALTER COLUMN ID RESTART WITH 2;
--- /dev/null
+#
+# SonarQube, open source software quality management tool.
+# Copyright (C) 2008-2013 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.
+#
+
+#
+# Sonar 4.2
+# SONAR-5067
+#
+class RemoveDuplicateActiveRules < ActiveRecord::Migration
+
+ class ActiveRuleParameters < ActiveRecord::Base
+ end
+
+ class ActiveRule < ActiveRecord::Base
+ end
+
+ def self.up
+ remove_active_rules_duplication
+ add_unique_index_on_active_rule
+ end
+
+ def self.remove_active_rules_duplication
+ # Search for all rules activated many times on a same profile
+ rule_actived_many_times_on_same_profile = ActiveRule.all(
+ :select => 'rule_id,profile_id',
+ :group => 'rule_id,profile_id',
+ :having => 'COUNT(*) > 1'
+ )
+
+ rule_actived_many_times_on_same_profile.each do |duplicate_active_rule|
+ # Search for all duplication on current rule and profile
+ active_rules = ActiveRule.all(
+ :conditions => {:rule_id => duplicate_active_rule.rule_id, :profile_id => duplicate_active_rule.profile_id}
+ )
+ # Remove duplication, keep only one active rule (first one)
+ active_rules.drop(1).each do |active_rule|
+ ActiveRuleParameters.delete_all(:active_rule_id => active_rule.id)
+ active_rule.delete
+ end
+ end
+ end
+
+ def self.add_unique_index_on_active_rule
+ begin
+ add_index :active_rules, [:rule_id, :profile_id], :unique => true, :name => 'active_rules_unique'
+ rescue
+ # already exists
+ end
+ end
+end