diff options
Diffstat (limited to 'db/migrate/20140416074002_add_index_on_iid.rb')
-rw-r--r-- | db/migrate/20140416074002_add_index_on_iid.rb | 32 |
1 files changed, 0 insertions, 32 deletions
diff --git a/db/migrate/20140416074002_add_index_on_iid.rb b/db/migrate/20140416074002_add_index_on_iid.rb deleted file mode 100644 index 85269e2a03b..00000000000 --- a/db/migrate/20140416074002_add_index_on_iid.rb +++ /dev/null @@ -1,32 +0,0 @@ -class AddIndexOnIid < ActiveRecord::Migration - def change - RemoveDuplicateIid.clean(Issue) - RemoveDuplicateIid.clean(MergeRequest, 'target_project_id') - RemoveDuplicateIid.clean(Milestone) - - add_index :issues, [:project_id, :iid], unique: true - add_index :merge_requests, [:target_project_id, :iid], unique: true - add_index :milestones, [:project_id, :iid], unique: true - end -end - -class RemoveDuplicateIid - def self.clean(klass, project_field = 'project_id') - duplicates = klass.find_by_sql("SELECT iid, #{project_field} FROM #{klass.table_name} GROUP BY #{project_field}, iid HAVING COUNT(*) > 1") - - duplicates.each do |duplicate| - project_id = duplicate.send(project_field) - iid = duplicate.iid - items = klass.of_projects(project_id).where(iid: iid) - - if items.size > 1 - puts "Remove #{klass.name} duplicates for iid: #{iid} and project_id: #{project_id}" - items.shift - items.each do |item| - item.destroy - puts '.' - end - end - end - end -end |