discourse/db/migrate/20180718062728_create_post_reply_keys.rb
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

56 lines
1.2 KiB
Ruby

# frozen_string_literal: true
require 'migration/column_dropper'
class CreatePostReplyKeys < ActiveRecord::Migration[5.2]
def up
create_table :post_reply_keys do |t|
t.integer :user_id, null: false
t.integer :post_id, null: false
t.uuid :reply_key, null: false
t.timestamps null: false
end
add_index :post_reply_keys, :reply_key, unique: true
Migration::ColumnDropper.mark_readonly(:email_logs, :reply_key)
sql = <<~SQL
DELETE FROM email_logs
WHERE id IN (
SELECT id
FROM (
SELECT
id,
ROW_NUMBER() OVER(PARTITION BY post_id, user_id ORDER BY id DESC) AS row_num
FROM email_logs
) t
WHERE t.row_num > 1
)
SQL
execute(sql)
sql = <<~SQL
INSERT INTO post_reply_keys(
user_id, post_id, reply_key, updated_at, created_at
) SELECT
user_id,
post_id,
reply_key,
updated_at,
created_at
FROM email_logs
WHERE reply_key IS NOT NULL AND post_id IS NOT NULL AND user_id IS NOT NULL
SQL
execute(sql)
add_index :post_reply_keys, [:user_id, :post_id], unique: true
end
def down
raise ActiveRecord::IrreversibleMigration
end
end