db/migrate/20230605133804_remove_master_variants.rb
class RemoveMasterVariants < ActiveRecord::Migration[7.0]
def change
if ActiveRecord::Base.connection.table_exists? "spree_option_values_variants"
delete_master_option_values
end
handle_master_line_items
handle_master_exchange_variants
delete_master_inventory_units
delete_master_variant_prices
delete_master_stock_items
delete_master_variants
end
private
def handle_master_line_items
ActiveRecord::Base.connection.execute(<<-SQL
UPDATE spree_variants
SET is_master = false
FROM spree_line_items
WHERE spree_variants.is_master = true
AND spree_variants.id = spree_line_items.variant_id
SQL
)
end
def handle_master_exchange_variants
ActiveRecord::Base.connection.execute(<<-SQL
UPDATE spree_variants
SET is_master = false
FROM exchange_variants
WHERE spree_variants.is_master = true
AND spree_variants.id = exchange_variants.variant_id
SQL
)
end
def delete_master_inventory_units
ActiveRecord::Base.connection.execute(<<-SQL
DELETE FROM spree_inventory_units
USING spree_variants
WHERE spree_variants.is_master = true
AND spree_variants.id = spree_inventory_units.variant_id
SQL
)
end
def delete_master_option_values
ActiveRecord::Base.connection.execute(<<-SQL
DELETE FROM spree_option_values_variants
USING spree_variants
WHERE spree_variants.is_master = true
AND spree_variants.id = spree_option_values_variants.variant_id
SQL
)
end
def delete_master_variant_prices
ActiveRecord::Base.connection.execute(<<-SQL
DELETE FROM spree_prices
USING spree_variants
WHERE spree_variants.is_master = true
AND spree_variants.id = spree_prices.variant_id
SQL
)
end
def delete_master_stock_items
ActiveRecord::Base.connection.execute(<<-SQL
DELETE FROM spree_stock_items
USING spree_variants
WHERE spree_variants.is_master = true
AND spree_variants.id = spree_stock_items.variant_id
SQL
)
end
def delete_master_variants
ActiveRecord::Base.connection.execute(<<-SQL
DELETE FROM spree_variants
WHERE is_master = true
SQL
)
end
end