Module: SchemaPlus::Triggers::ActiveRecord::ConnectionAdapters::AbstractAdapter

Defined in:
lib/schema_plus/triggers/active_record/connection_adapters/abstract_adapter.rb

Instance Method Summary collapse

Instance Method Details

#create_trigger(table_name, trigger_name, triggers, definition, options = {}) ⇒ Object

Create a trigger. Valid options are :force



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/schema_plus/triggers/active_record/connection_adapters/abstract_adapter.rb', line 8

def create_trigger(table_name, trigger_name, triggers, definition, options = {})
  SchemaMonkey::Middleware::Migration::CreateTrigger.start(connection: self, table_name: table_name, trigger_name: trigger_name, triggers: triggers, definition: definition, options: options) do |env|
    table_name   = env.table_name
    trigger_name = env.trigger_name
    triggers     = env.triggers
    definition   = env.definition
    options      = env.options

    definition   = definition.to_sql if definition.respond_to? :to_sql
    if options[:force]
      drop_trigger(table_name, trigger_name, if_exists: true)
    end

    execute "CREATE TRIGGER #{quote_table_name(trigger_name)} #{triggers} ON #{quote_table_name(table_name)} #{definition}"
  end
end

#drop_trigger(table_name, trigger_name, options = {}) ⇒ Object

Remove a trigger. Valid options are :if_exists and :cascade

drop_trigger 'my_table', 'trigger_name', if_exists: true


29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/schema_plus/triggers/active_record/connection_adapters/abstract_adapter.rb', line 29

def drop_trigger(table_name, trigger_name, options = {})
  SchemaMonkey::Middleware::Migration::CreateTrigger.start(connection: self, table_name: table_name, trigger_name: trigger_name, options: options) do |env|
    table_name   = env.table_name
    trigger_name = env.trigger_name
    options      = env.options

    sql = "DROP TRIGGER"
    sql += " IF EXISTS" if options[:if_exists]
    sql += " #{quote_table_name(trigger_name)} ON #{quote_table_name(table_name)}"
    sql += " CASCADE" if options[:cascade]

    execute sql
  end
end

#trigger_definition(table_name, trigger_name, name = nil) ⇒ Object

(abstract) Return the Trigger definition



56
57
58
# File 'lib/schema_plus/triggers/active_record/connection_adapters/abstract_adapter.rb', line 56

def trigger_definition(table_name, trigger_name, name = nil)
  raise "Internal Error: Connection adapter did not override abstract function"
end

#triggers(name = nil) ⇒ Object

(abstract) Return the Trigger objects for triggers



51
52
53
# File 'lib/schema_plus/triggers/active_record/connection_adapters/abstract_adapter.rb', line 51

def triggers(name = nil)
  raise "Internal Error: Connection adapter did not override abstract function"
end