0fc9f9d3e7
DB schema generated by a migration may look different in rails 4 and 5 (because rails 5 may use different default values). For this reason it's important to explicitly set for which rails version a migration was written for. See https://stackoverflow.com/questions/35929869/activerecordmigration-deprecation-warning-asks-for-rails-version-but-im-no/35930912#35930912
22 lines
1.1 KiB
Ruby
22 lines
1.1 KiB
Ruby
# rubocop:disable all
|
|
class FixNamespaceDuplication < ActiveRecord::Migration[4.2]
|
|
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
|