mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 20:26:35 +08:00
30990006a9
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
56 lines
1.2 KiB
Ruby
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
|