X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/20378927432d882bed657806b6c7e026d3e2b986..89f541d2b534b9cad4ee668f702f1270bf056171:/services/api/db/migrate/20140817035914_add_unique_name_constraints.rb diff --git a/services/api/db/migrate/20140817035914_add_unique_name_constraints.rb b/services/api/db/migrate/20140817035914_add_unique_name_constraints.rb index 749b455db8..8acae9f203 100644 --- a/services/api/db/migrate/20140817035914_add_unique_name_constraints.rb +++ b/services/api/db/migrate/20140817035914_add_unique_name_constraints.rb @@ -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