Class: Migration::BaseDropper
- Inherits:
-
Object
- Object
- Migration::BaseDropper
- Defined in:
- lib/migration/base_dropper.rb
Constant Summary collapse
- FUNCTION_SCHEMA_NAME =
"discourse_functions"
Class Method Summary collapse
- .create_readonly_function(table_name, column_name = nil) ⇒ Object
- .drop_readonly_function(table_name, column_name = nil) ⇒ Object
- .existing_discourse_function_names ⇒ Object
- .function_schema_exists? ⇒ Boolean
- .old_readonly_function_name(table_name, column_name = nil) ⇒ Object
- .readonly_function_name(table_name, column_name = nil, with_schema: true) ⇒ Object
- .readonly_trigger_name(table_name, column_name = nil) ⇒ Object
Class Method Details
.create_readonly_function(table_name, column_name = nil) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/migration/base_dropper.rb', line 7 def self.create_readonly_function(table_name, column_name = nil) DB.exec <<~SQL CREATE SCHEMA IF NOT EXISTS #{FUNCTION_SCHEMA_NAME}; SQL = ( if column_name "Discourse: #{column_name} in #{table_name} is readonly" else "Discourse: #{table_name} is read only" end ) DB.exec <<~SQL CREATE OR REPLACE FUNCTION #{readonly_function_name(table_name, column_name)} RETURNS trigger AS $rcr$ BEGIN RAISE EXCEPTION '#{}'; END $rcr$ LANGUAGE plpgsql; SQL end |
.drop_readonly_function(table_name, column_name = nil) ⇒ Object
30 31 32 |
# File 'lib/migration/base_dropper.rb', line 30 def self.drop_readonly_function(table_name, column_name = nil) DB.exec("DROP FUNCTION IF EXISTS #{readonly_function_name(table_name, column_name)} CASCADE") end |
.existing_discourse_function_names ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/migration/base_dropper.rb', line 60 def self.existing_discourse_function_names DB.query_single(<<~SQL) SELECT routine_name::text FROM information_schema.routines WHERE routine_type = 'FUNCTION' AND specific_schema = '#{FUNCTION_SCHEMA_NAME}' SQL end |
.function_schema_exists? ⇒ Boolean
52 53 54 55 56 57 58 |
# File 'lib/migration/base_dropper.rb', line 52 def self.function_schema_exists? DB.exec(<<~SQL).to_s == "1" SELECT schema_name FROM information_schema.schemata WHERE schema_name = '#{FUNCTION_SCHEMA_NAME}' SQL end |
.old_readonly_function_name(table_name, column_name = nil) ⇒ Object
44 45 46 |
# File 'lib/migration/base_dropper.rb', line 44 def self.old_readonly_function_name(table_name, column_name = nil) readonly_function_name(table_name, column_name).sub("#{FUNCTION_SCHEMA_NAME}.", "") end |
.readonly_function_name(table_name, column_name = nil, with_schema: true) ⇒ Object
34 35 36 37 38 39 40 41 42 |
# File 'lib/migration/base_dropper.rb', line 34 def self.readonly_function_name(table_name, column_name = nil, with_schema: true) function_name = ["raise", table_name, column_name, "readonly()"].compact.join("_") if with_schema && function_schema_exists? "#{FUNCTION_SCHEMA_NAME}.#{function_name}" else function_name end end |
.readonly_trigger_name(table_name, column_name = nil) ⇒ Object
48 49 50 |
# File 'lib/migration/base_dropper.rb', line 48 def self.readonly_trigger_name(table_name, column_name = nil) [table_name, column_name, "readonly"].compact.join("_") end |