# License: AGPL-3.0-or-later WITH WTO-AP-3.0-or-later # Full license explanation at https://github.com/houdiniproject/houdini/blob/master/LICENSE class BackupUploaderColumns < ActiveRecord::Migration[5.2] def up # copy all HoudiniUpgrade::UPLOADERS_TO_MIGRATE.each do |uploader_table| create_table uploader_table.backup_table do |table| table.references uploader_table.name, foreign_key: true, index: { name: "idx_#{uploader_table.backup_table}_on_fk"} uploader_table.fields.each do |f| table.string f.migrated_name end end end # copy all HoudiniUpgrade::UPLOADERS_TO_MIGRATE.each do |table| execute <<-SQL INSERT INTO #{table.backup_table} (#{table.foreign_key}, #{table.fields.map(&:migrated_name).join(', ')}) ( SELECT id, #{table.fields.map(&:migrated_name).join(', ')} FROM #{table.name}) SQL end # delete columns HoudiniUpgrade::UPLOADERS_TO_MIGRATE.each do |table| table.fields.each do |f| remove_column table.name, f.migrated_name end end end def down ## readd columns HoudiniUpgrade::UPLOADERS_TO_MIGRATE.each do |table| table.fields.each do |f| add_column table.name, f.migrated_name, :string end end # copy all HoudiniUpgrade::UPLOADERS_TO_MIGRATE.each do |table| execute <<-SQL UPDATE #{table.name} SET (#{table.fields.map(&:migrated_name).join(', ')}) = ( SELECT #{table.fields.map{|f| table.backup_table + "." + f.migrated_name}.join(', ')} FROM #{table.backup_table} WHERE #{table.backup_table}.#{table.foreign_key} = #{table.name}.id ) SQL end # delete tables HoudiniUpgrade::UPLOADERS_TO_MIGRATE.each{ |entity, _| drop_table entity.backup_table} end end