mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 22:50:45 +08:00
24347ace10
`Upload#url` is more likely and can change from time to time. When it does changes, we don't want to have to look through multiple tables to ensure that the URLs are all up to date. Instead, we simply associate uploads properly to `UserProfile` so that it does not have to replicate the URLs in the table.
39 lines
1.3 KiB
Ruby
39 lines
1.3 KiB
Ruby
require_dependency 'migration/base_dropper'
|
|
|
|
module Migration
|
|
class ColumnDropper
|
|
def self.mark_readonly(table_name, column_name)
|
|
BaseDropper.create_readonly_function(table_name, column_name)
|
|
|
|
DB.exec <<~SQL
|
|
CREATE TRIGGER #{BaseDropper.readonly_trigger_name(table_name, column_name)}
|
|
BEFORE INSERT OR UPDATE OF #{column_name}
|
|
ON #{table_name}
|
|
FOR EACH ROW
|
|
WHEN (NEW.#{column_name} IS NOT NULL)
|
|
EXECUTE PROCEDURE #{BaseDropper.readonly_function_name(table_name, column_name)};
|
|
SQL
|
|
end
|
|
|
|
def self.execute_drop(table, columns)
|
|
table = table.to_s
|
|
|
|
columns.each do |column|
|
|
column = column.to_s
|
|
self.drop_readonly(table, column)
|
|
# safe cause it is protected on method entry, can not be passed in params
|
|
DB.exec("ALTER TABLE #{table} DROP COLUMN IF EXISTS #{column}")
|
|
end
|
|
end
|
|
|
|
def self.drop_readonly(table, column)
|
|
DB.exec <<~SQL
|
|
DROP FUNCTION IF EXISTS #{BaseDropper.readonly_function_name(table, column)} CASCADE;
|
|
-- Backward compatibility for old functions created in the public
|
|
-- schema
|
|
DROP FUNCTION IF EXISTS #{BaseDropper.old_readonly_function_name(table, column)} CASCADE;
|
|
SQL
|
|
end
|
|
end
|
|
end
|