Remove email column from user table

This commit is contained in:
Sam 2017-08-29 11:50:56 -04:00
parent b3fd091379
commit c705159d22
4 changed files with 24 additions and 7 deletions

View File

@ -1123,7 +1123,6 @@ end
# name :string
# seen_notification_id :integer default(0), not null
# last_posted_at :datetime
# email :string(513)
# password_hash :string(64)
# salt :string(32)
# active :boolean default(FALSE), not null

View File

@ -35,8 +35,9 @@ Group.user_trust_level_change!(-1, TrustLevel[4])
ColumnDropper.drop(
table: 'users',
after_migration: 'AddUserAuthTokens',
after_migration: 'CreateUserEmails',
columns: %w[
email
email_always
mailing_list_mode
email_digests

View File

@ -30,13 +30,13 @@ class ColumnDropper
on_drop&.call
columns.each do |column|
ActiveRecord::Base.exec_sql <<~SQL
DROP TRIGGER IF EXISTS #{readonly_trigger_name(table, column)} ON #{table};
DROP FUNCTION IF EXISTS #{readonly_function_name(table, column)};
SQL
# safe cause it is protected on method entry, can not be passed in params
ActiveRecord::Base.exec_sql("ALTER TABLE #{table} DROP COLUMN IF EXISTS #{column}")
ActiveRecord::Base.exec_sql <<~SQL
DROP FUNCTION IF EXISTS #{readonly_function_name(table, column)};
DROP TRIGGER IF EXISTS #{readonly_trigger_name(table, column)} ON #{table};
SQL
end
Discourse.reset_active_record_cache

View File

@ -72,6 +72,23 @@ RSpec.describe ColumnDropper do
SQL
end
it 'should be droppable' do
name = Topic
.exec_sql("SELECT name FROM schema_migration_details LIMIT 1")
.getvalue(0, 0)
dropped_proc_called = false
ColumnDropper.drop(
table: table_name,
after_migration: name,
columns: ['email'],
delay: 0.minutes,
on_drop: ->() { dropped_proc_called = true }
)
expect(dropped_proc_called).to eq(true)
end
it 'should prevent updates to the readonly column' do
expect do
ActiveRecord::Base.connection.raw_connection.exec <<~SQL