Project

General

Profile

Download (1.55 KB) Statistics
| Branch: | Tag: | Revision:
class RemoveDuplicateTokens < ActiveRecord::Migration[4.2]
def up
# only managed hosts should have tokens
Token.where(:id => Token.joins("left outer join hosts on hosts.id = tokens.host_id").
where("hosts.type != 'Host::Managed'").pluck('tokens.id')).delete_all

# deleting duplicate tokens
hosts_with_duplicate_tokens = Token.having('count(*) > 1').group(:host_id).pluck('host_id')
existing_tokens = Host.where(:id => hosts_with_duplicate_tokens).map(&:token).compact
if existing_tokens.empty?
Token.where(:id => Token.where(:host_id => hosts_with_duplicate_tokens).pluck('tokens.id')).delete_all
else
Token.where(:id => Token.where('host_id in (?) and id not in (?)', hosts_with_duplicate_tokens, existing_tokens).pluck('tokens.id')).delete_all
end

remove_foreign_key :tokens, :column => :host_id if foreign_key_exists?(:tokens, { :name => "tokens_host_id_fk" })
remove_index :tokens, :host_id if index_exists? :tokens, :host_id
add_index :tokens, :host_id, :unique => true
add_foreign_key :tokens, :hosts, :name => "tokens_host_id_fk" unless foreign_key_exists?(:tokens, { :name => "tokens_host_id_fk" })
end

def down
remove_foreign_key :tokens, :column => :host_id if foreign_key_exists?(:tokens, { :name => "tokens_host_id_fk" })
remove_index :tokens, :host_id if index_exists? :tokens, :host_id
add_index :tokens, :host_id
add_foreign_key :tokens, :hosts, :name => "tokens_host_id_fk" unless foreign_key_exists?(:tokens, { :name => "tokens_host_id_fk" })
end
end
(270-270/407)