]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5060 Remove duplicates from groups_users table before creation of unique index
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Fri, 14 Feb 2014 17:04:23 +0000 (18:04 +0100)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Fri, 14 Feb 2014 17:04:23 +0000 (18:04 +0100)
sonar-server/src/main/webapp/WEB-INF/db/migrate/460_add_unique_constraint_to_groups_users.rb

index 4dce8b477740d3f02644b9de5b7232c26f322d03..ebb6a3a2618d977aa1157cba5bec3c098d797f04 100644 (file)
 #
 class AddUniqueConstraintToGroupsUsers < ActiveRecord::Migration
 
+  class GroupsUser < ActiveRecord::Base
+  end
+
   def self.up
+    GroupsUser.reset_column_information
+
+    duplicated_ids = ActiveRecord::Base.connection.select_rows('select user_id,group_id from groups_users group by user_id,group_id having count(*) > 1')
+    say_with_time "Remove duplications for #{duplicated_ids.size} user group associations" do
+      duplicated_ids.each do |user_id, group_id|
+        # delete all rows, then reinsert one
+        GroupsUser.delete_all([ "user_id=? and group_id=?", user_id, group_id ])
+        ActiveRecord::Base.connection.execute("insert into groups_users (user_id,group_id) values (%s,%s)" % [user_id, group_id])
+      end
+    end
+
     add_index :groups_users, [:group_id, :user_id], :name => 'GROUPS_USERS_UNIQUE', :unique => true
   end
 end