class FixOtherVarietiesAndSpecieVarieties < ActiveRecord::Migration[5.0]

  VARIETY_CHANGES = [
    %w[artocarpus_altilis artocarpus],
    %w[artocarpus_elasticus artocarpus],
    %w[artocarpus_heterophyllus artocarpus],
    %w[artocarpus_hirsutus artocarpus],
    %w[artocarpus_integer artocarpus],
    %w[artocarpus_mariannensis artocarpus],
    %w[artocarpus_odoratissimus artocarpus],
    %w[artocarpus_rigidus artocarpus],
    %w[artocarpus_tamaran artocarpus],
    %w[actinidia_chinensis actinidia],
    %w[actinidia_deliciosa actinidia],
    %w[allium_porrum_belton allium_porrum],
    %w[allium_porrum_duraton allium_porrum],
    %w[allium_porrum_kenton allium_porrum],
    %w[allium_porrum_krypton allium_porrum],
    %w[allium_porrum_leblond allium_porrum],
    %w[allium_porrum_lexton allium_porrum],
    %w[allium_porrum_longton allium_porrum],
    %w[allium_porrum_mégaton allium_porrum],
    %w[allium_porrum_pluston allium_porrum],
    %w[allium_porrum_poulton allium_porrum],
    %w[allium_porrum_vitaton allium_porrum],
    %w[asparagus_africanus asparagus],
    %w[asparagus_officianalis asparagus],
    %w[alnus_cordata alnus],
    %w[alnus_glutinosa alnus],
    %w[alnus_japonica alnus],
    %w[alnus_maritima alnus],
    %w[alnus_nepalensis alnus],
    %w[alnus_oblongifolia alnus],
    %w[alnus_pendula alnus],
    %w[alnus_rhombifolia alnus],
    %w[alnus_rubra alnus],
    %w[alnus_serrulata alnus],
    %w[alnus_trabeculosa alnus],
    %w[alnus_viridis alnus],
    %w[musa_acuminata musa],
    %w[musa_balbisiana musa],
    %w[musa_textilis musa],
    %w[musa_velutina musa],
    %w[berberis_x_ottawensis berberis],
    %w[bos_taurus_abondance bos_taurus],
    %w[bos_taurus_angus bos_taurus],
    %w[bos_taurus_armoricaine bos_taurus],
    %w[bos_taurus_aubrac bos_taurus],
    %w[bos_taurus_ayrshire bos_taurus],
    %w[bos_taurus_bazadaise bos_taurus],
    %w[bos_taurus_bearnaise bos_taurus],
    %w[bos_taurus_betizu bos_taurus],
    %w[bos_taurus_blanc_bleu bos_taurus],
    %w[bos_taurus_bleu_de_bazougers bos_taurus],
    %w[bos_taurus_bleu_du_nord bos_taurus],
    %w[bos_taurus_blonde_aquitaine bos_taurus],
    %w[bos_taurus_bordelaise bos_taurus],
    %w[bos_taurus_brahma bos_taurus],
    %w[bos_taurus_bretonne_pie_noire bos_taurus],
    %w[bos_taurus_brune bos_taurus],
    %w[bos_taurus_canadienne bos_taurus],
    %w[bos_taurus_charolaise bos_taurus],
    %w[bos_taurus_casta bos_taurus],
    %w[bos_taurus_chianina bos_taurus],
    %w[bos_taurus_corse bos_taurus],
    %w[bos_taurus_creole_guadeloupe bos_taurus],
    %w[bos_taurus_creole_martinique bos_taurus],
    %w[bos_taurus_croise bos_taurus],
    %w[bos_taurus_dairy_shorthorn bos_taurus],
    %w[bos_taurus_de_combat bos_taurus],
    %w[bos_taurus_ferrandaise bos_taurus],
    %w[bos_taurus_flamande_originelle bos_taurus],
    %w[bos_taurus_froment_du_leon bos_taurus],
    %w[bos_taurus_galloway bos_taurus],
    %w[bos_taurus_gasconne bos_taurus],
    %w[bos_taurus_gelbvieh bos_taurus],
    %w[bos_taurus_guernesey bos_taurus],
    %w[bos_taurus_herefort bos_taurus],
    %w[bos_taurus_herens bos_taurus],
    %w[bos_taurus_highland_cattle bos_taurus],
    %w[bos_taurus_indicus bos_taurus],
    %w[bos_taurus_inra_95 bos_taurus],
    %w[bos_taurus_jersiaise bos_taurus],
    %w[bos_taurus_limousine bos_taurus],
    %w[bos_taurus_lourdaise bos_taurus],
    %w[bos_taurus_maraichine bos_taurus],
    %w[bos_taurus_marchigiana bos_taurus],
    %w[bos_taurus_marine_landaise bos_taurus],
    %w[bos_taurus_montbeliarde bos_taurus],
    %w[bos_taurus_mirandaise bos_taurus],
    %w[bos_taurus_nantaise bos_taurus],
    %w[bos_taurus_n_dama bos_taurus],
    %w[bos_taurus_normande bos_taurus],
    %w[bos_taurus_pie_rouge_des_plaines bos_taurus],
    %w[bos_taurus_parthenaise bos_taurus],
    %w[bos_taurus_prim_holstein bos_taurus],
    %w[bos_taurus_piemontaise bos_taurus],
    %w[bos_taurus_primigenius bos_taurus],
    %w[bos_taurus_raco_di_biou bos_taurus],
    %w[bos_taurus_rouge_des_pres bos_taurus],
    %w[bos_taurus_salers bos_taurus],
    %w[bos_taurus_rouge_flamande bos_taurus],
    %w[bos_taurus_saosnoise bos_taurus],
    %w[bos_taurus_south_devon bos_taurus],
    %w[bos_taurus_simmental_francaise bos_taurus],
    %w[bos_taurus_tarentaise bos_taurus],
    %w[bos_taurus_villars_de_lans bos_taurus],
    %w[bos_taurus_vosgienne bos_taurus],
    %w[coffea_arabica coffea],
    %w[coffea_canephora coffea],
    %w[coffea_benghalensis coffea],
    %w[coffea_congensis coffea],
    %w[coffea_liberica coffea],
    %w[coffea_stenophylla coffea],
    %w[chrysophyllum_africanum chrysophyllum],
    %w[chrysophyllum_cainito chrysophyllum],
    %w[chrysophyllum_argenteum chrysophyllum],
    %w[chrysophyllum_mexicanum chrysophyllum],
    %w[chrysophyllum_oliviforme chrysophyllum],
    %w[chrysophyllum_pauciflorum chrysophyllum],
    %w[equus_caballus_arabe equus_caballus],
    %w[equus_caballus_camargue equus_caballus],
    %w[equus_caballus_irish_cob equus_caballus],
    %w[equus_caballus_pur_sang equus_caballus],
    %w[equus_caballus_shetland equus_caballus],
    %w[castanea_bantarde castanea],
    %w[castanea_bossue castanea],
    %w[castanea_bouchaud castanea],
    %w[castanea_grosse_nousillade castanea],
    %w[castanea_jaunan castanea],
    %w[castanea_marron_de_veuil castanea],
    %w[castanea_nousillade castanea],
    %w[castanea_patouille_jaune castanea],
    %w[castanea_patouille_noire castanea],
    %w[castanea_perote castanea],
    %w[castanea_pillemongrin castanea],
    %w[castanea_pointue castanea],
    %w[castanea_rouillaud castanea],
    %w[castanea_saint_michel castanea],
    %w[castanea_torse castanea],
    %w[castanea_vert_josnon castanea],
    %w[capra_hircus_alpine capra_hircus],
    %w[capra_hircus_angora capra_hircus],
    %w[capra_hircus_corse capra_hircus],
    %w[capra_hircus_creole capra_hircus],
    %w[capra_hircus_des_fosses capra_hircus],
    %w[capra_hircus_massif_central capra_hircus],
    %w[capra_hircus_poitevine capra_hircus],
    %w[capra_hircus_provencale capra_hircus],
    %w[capra_hircus_pyreneenne capra_hircus],
    %w[capra_hircus_rove capra_hircus],
    %w[capra_hircus_saanencapra_hircus],
    %w[cucumis_anguria cucumis],
    %w[cucumis_dipsaceus cucumis],
    %w[cucumis_melo cucumis],
    %w[cucumis_metuliferus cucumis],
    %w[dioscorea_alata dioscorea],
    %w[dioscorea_altissima dioscorea],
    %w[dioscorea_bulbifera dioscorea],
    %w[dioscorea_dumetorum dioscorea],
    %w[dioscorea_cayenensis dioscorea],
    %w[dioscorea_elephantipes dioscorea],
    %w[dioscorea_esculenta dioscorea],
    %w[dioscorea_floridana dioscorea],
    %w[dioscorea_hispida dioscorea],
    %w[dioscorea_japonica dioscorea],
    %w[dioscorea_nummularia dioscorea],
    %w[dioscorea_mexicana dioscorea],
    %w[dioscorea_oppositifolia dioscorea],
    %w[dioscorea_pentaphylla dioscorea],
    %w[dioscorea_polygonoides dioscorea],
    %w[dioscorea_pilosiuscula dioscorea],
    %w[dioscorea_polystachya dioscorea],
    %w[dioscorea_preussii dioscorea],
    %w[dioscorea_praehensilis dioscorea],
    %w[dioscorea_rotundata dioscorea],
    %w[dioscorea_sansibarensis dioscorea],
    %w[dioscorea_trifida dioscorea],
    %w[dioscorea_villosa dioscorea],
    %w[oryctolagus_cuniculus_blanc_de_vienne oryctolagus_cuniculus],
    %w[oryctolagus_cuniculus_bleu_de_vienne oryctolagus_cuniculus],
    %w[oryctolagus_cuniculus_gris_de_vienne oryctolagus_cuniculus],
    %w[oryctolagus_cuniculus_nain_belier oryctolagus_cuniculus],
    %w[passiflora_affinis passiflora],
    %w[passiflora_anadenia passiflora],
    %w[passiflora_antioquiensis passiflora],
    %w[passiflora_arizonica passiflora],
    %w[passiflora_berteroana passiflora],
    %w[passiflora_bicornis passiflora],
    %w[passiflora_biflora passiflora],
    %w[passiflora_bilobata passiflora],
    %w[passiflora_bryonioides passiflora],
    %w[passiflora_caerulea passiflora],
    %w[passiflora_ciliata passiflora],
    %w[passiflora_cincinnata passiflora],
    %w[passiflora_coccinea passiflora],
    %w[passiflora_edulis passiflora],
    %w[passiflora_filipes passiflora],
    %w[passiflora_foetida passiflora],
    %w[passiflora_gracilis passiflora],
    %w[passiflora_incarnata passiflora],
    %w[passiflora_laurifolia passiflora],
    %w[passiflora_ligularis passiflora],
    %w[passiflora_lutea passiflora],
    %w[passiflora_maliformis passiflora],
    %w[passiflora_manicata passiflora],
    %w[passiflora_mexicana passiflora],
    %w[passiflora_mixta passiflora],
    %w[passiflora_morifolia passiflora],
    %w[passiflora_multiflora passiflora],
    %w[passiflora_murucuja passiflora],
    %w[passiflora_pallens passiflora],
    %w[passiflora_pallida passiflora],
    %w[passiflora_quadrangularis passiflora],
    %w[passiflora_racemosa passiflora],
    %w[passiflora_rubra passiflora],
    %w[passiflora_serratodigitata passiflora],
    %w[passiflora_sexflora passiflora],
    %w[passiflora_suberosa passiflora],
    %w[passiflora_subpeltata passiflora],
    %w[passiflora_tarminiana passiflora],
    %w[passiflora_tenuiloba passiflora],
    %w[passiflora_tripartita passiflora],
    %w[passiflora_tripartita_mollissima passiflora],
    %w[passiflora_tuberosa passiflora],
    %w[passiflora_tulae passiflora],
    %w[passiflora_vitifolia passiflora],
    %w[sus_scrofa_carelie sus_scrofa],
    %w[sus_scrofa_corse sus_scrofa],
    %w[sus_scrofa_creole_de_guadeloupe sus_scrofa],
    %w[sus_scrofa_cul_noir_limousin sus_scrofa],
    %w[sus_scrofa_drb sus_scrofa],
    %w[sus_scrofa_drc sus_scrofa],
    %w[sus_scrofa_duroc_selpa sus_scrofa],
    %w[sus_scrofa_fh012 sus_scrofa],
    %w[sus_scrofa_fh016 sus_scrofa],
    %w[sus_scrofa_fh019 sus_scrofa],
    %w[sus_scrofa_fh025 sus_scrofa],
    %w[sus_scrofa_gallia sus_scrofa],
    %w[sus_scrofa_gascon sus_scrofa],
    %w[sus_scrofa_jia_xing sus_scrofa],
    %w[sus_scrofa_l1010 sus_scrofa],
    %w[sus_scrofa_l1020 sus_scrofa],
    %w[sus_scrofa_laconie sus_scrofa],
    %w[sus_scrofa_landrace_francais sus_scrofa],
    %w[sus_scrofa_landrace_selpa sus_scrofa],
    %w[sus_scrofa_large_white_female_lineage sus_scrofa],
    %w[sus_scrofa_large_white_male_lineage sus_scrofa],
    %w[sus_scrofa_mei_shan sus_scrofa],
    %w[sus_scrofa_musclor sus_scrofa],
    %w[sus_scrofa_penshire sus_scrofa],
    %w[sus_scrofa_pie_noir_du_pays_basque sus_scrofa],
    %w[sus_scrofa_pietrain sus_scrofa],
    %w[sus_scrofa_porc_blanc_de_l_ouest sus_scrofa],
    %w[sus_scrofa_porc_de_bayeux sus_scrofa],
    %w[sus_scrofa_proligene_121 sus_scrofa],
    %w[sus_scrofa_proligene_321 sus_scrofa],
    %w[sus_scrofa_tia_meslan sus_scrofa],
    %w[sus_scrofa_willebrand sus_scrofa],
    %w[sus_scrofa_x20 sus_scrofa],
    %w[sus_scrofa_x30 sus_scrofa],
    %w[sus_scrofa_x70 sus_scrofa],
    %w[sus_scrofa_x80 sus_scrofa],
  ].freeze

  TABLE_COLUMNS = [
    %w[product_natures variety], %w[product_natures derivative_of],
    %w[product_nature_variants derivative_of],
    %w[products variety], %w[products derivative_of],
    %w[activities cultivation_variety], %w[manure_management_plan_zones cultivation_variety]
  ].freeze

  def change
    request = VARIETY_CHANGES.flat_map do |(former_variety, new_variety)|
      TABLE_COLUMNS.map do |(table, column)|
        <<~SQL
          UPDATE #{table}
            SET #{column} = '#{new_variety}'
          WHERE #{column} = '#{former_variety}'
        SQL
      end
    end

    execute request.join(';')

    variants_request = VARIETY_CHANGES.map do |(former_variety, new_variety)|
      <<~SQL
        UPDATE product_nature_variants
          SET variety = '#{new_variety}',
              specie_variety = '#{former_variety}'
        WHERE variety = '#{former_variety}'
      SQL
    end

    execute variants_request.join(';')
  end
end
