Merge branch '15964-fix-docs' refs #15964
[arvados.git] / services / api / db / migrate / 20140817035914_add_unique_name_constraints.rb
index 749b455db8d004ad4730a3bb2878c2a1443690d1..8acae9f20345977611a1000d75c63f08099ac5ef 100644 (file)
@@ -1,15 +1,33 @@
-class AddUniqueNameConstraints < ActiveRecord::Migration
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+class AddUniqueNameConstraints < ActiveRecord::Migration[4.2]
   def change
-    # Need some code to ensure uniqueness before adding constraints.
+    # Ensure uniqueness before adding constraints.
+    ["collections", "pipeline_templates", "groups"].each do |table|
+      rows = ActiveRecord::Base.connection.select_all %{
+select uuid, owner_uuid, name from #{table} order by owner_uuid, name
+}
+      prev = {}
+      n = 1
+      rows.each do |r|
+        if r["owner_uuid"] == prev["owner_uuid"] and !r["name"].nil? and r["name"] == prev["name"]
+          n += 1
+          ActiveRecord::Base.connection.execute %{
+update #{table} set name='#{r["name"]} #{n}' where uuid='#{r["uuid"]}'
+}
+        else
+          n = 1
+        end
+        prev = r
+      end
+    end
 
     add_index(:collections, [:owner_uuid, :name], unique: true,
               name: 'collection_owner_uuid_name_unique')
     add_index(:pipeline_templates, [:owner_uuid, :name], unique: true,
               name: 'pipeline_template_owner_uuid_name_unique')
-    add_index(:pipeline_instances, [:owner_uuid, :name], unique: true,
-              name: 'pipeline_instance_owner_uuid_name_unique')
-    add_index(:jobs, [:owner_uuid, :name], unique: true,
-              name: 'jobs_owner_uuid_name_unique')
     add_index(:groups, [:owner_uuid, :name], unique: true,
               name: 'groups_owner_uuid_name_unique')
   end