Sha256: 6687960c94f364a3ebfe02a3827a6879dd2c14195787ab37cc1926c910484f1f

Contents?: true

Size: 1.05 KB

Versions: 7

Compression:

Stored size: 1.05 KB

Contents

class AddIndexOnNameParentIdAndTaxonomyIdOnSpreeTaxons < ActiveRecord::Migration[5.2]
  def up
    klass   = Spree::Taxon
    columns = %w[name parent_id taxonomy_id]

    unless index_exists?(klass.table_name, columns)
      remove_index klass.table_name, columns if index_exists?(klass.table_name, columns)

      say "Find duplicate #{klass} records"
      duplicates = klass.
        select((columns + %w[COUNT(*)]).join(',')).
        group("#{columns.join(',')}").
        having('COUNT(*) > 1').
        map { |row| row.attributes.slice(*columns) }

      say "Delete all but the oldest duplicate #{klass} record"
      duplicates.each do |conditions|
        klass.where(conditions).order(:created_at).drop(1).each(&:destroy)
      end

      duplicates.each do |conditions| puts klass.where(conditions).order(:created_at).drop(1) end

      say "Add unique index to #{klass.table_name} for #{columns.inspect}"
      add_index klass.table_name, columns, unique: true
    end
  end

  def down
    remove_index :spree_taxons, [:name, :parent_id, :taxonomy_id]
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
spree_core-4.3.3 db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb
spree_core-4.3.2 db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb
spree_core-4.3.1 db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb
spree_core-4.3.0 db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb
spree_core-4.3.0.rc3 db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb
spree_core-4.3.0.rc2 db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb
spree_core-4.3.0.rc1 db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb