discourse/db/migrate/20140715160720_update_users_case_insensitive_emails.rb
2023-01-09 11:59:41 +00:00

29 lines
855 B
Ruby

# frozen_string_literal: true
class UpdateUsersCaseInsensitiveEmails < ActiveRecord::Migration[4.2]
def up
execute "DROP INDEX index_users_on_email"
# Find duplicate emails.
results = execute <<SQL
SELECT id, email, count
FROM (SELECT id, email,
row_number() OVER(PARTITION BY lower(email) ORDER BY id asc) AS count
FROM users) dups
WHERE dups.count > 1
SQL
results.each do |row|
execute "UPDATE users SET email = '#{row["email"].downcase}#{row["count"]}' WHERE id = #{row["id"]}"
end
execute "UPDATE users SET email = lower(email)"
execute "CREATE UNIQUE INDEX index_users_on_email ON users ((lower(email)));"
end
def down
execute "DROP INDEX index_users_on_email"
execute "CREATE UNIQUE INDEX index_users_on_email ON users (email);"
end
end