20150306023106_fix_namespace_duplication.rb 1.08 KB
Newer Older
1
# rubocop:disable all
2
class FixNamespaceDuplication < ActiveRecord::Migration[4.2]
Valery Sizov's avatar
Valery Sizov committed
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
  def up
    #fixes path duplication
    select_all('SELECT MAX(id) max, COUNT(id) cnt, path FROM namespaces GROUP BY path HAVING COUNT(id) > 1').each do |nms|
      bad_nms_ids = select_all("SELECT id FROM namespaces WHERE path = '#{nms['path']}' AND id <> #{nms['max']}").map{|x| x["id"]}
      execute("UPDATE projects SET namespace_id = #{nms["max"]} WHERE namespace_id IN(#{bad_nms_ids.join(', ')})")
      execute("DELETE FROM namespaces WHERE id IN(#{bad_nms_ids.join(', ')})")
    end

    #fixes name duplication
    select_all('SELECT MAX(id) max, COUNT(id) cnt, name FROM namespaces GROUP BY name HAVING COUNT(id) > 1').each do |nms|
      bad_nms_ids = select_all("SELECT id FROM namespaces WHERE name = '#{nms['name']}' AND id <> #{nms['max']}").map{|x| x["id"]}
      execute("UPDATE projects SET namespace_id = #{nms["max"]} WHERE namespace_id IN(#{bad_nms_ids.join(', ')})")
      execute("DELETE FROM namespaces WHERE id IN(#{bad_nms_ids.join(', ')})")
    end
  end

  def down
    # not implemented
  end
end