class Mv::Mysql::Constraint::Builder::Trigger
Public Instance Methods
create()
click to toggle source
# File lib/mv/mysql/constraint/builder/trigger.rb, line 6 def create validation_builders.group_by(&:table_name).each do |table_name, validations| db.execute(drop_trigger_statement(table_name)) db.execute(create_trigger_statement(table_name)) end end
delete()
click to toggle source
# File lib/mv/mysql/constraint/builder/trigger.rb, line 13 def delete validation_builders.group_by(&:table_name).each do |table_name, validations| db.execute(drop_trigger_statement(table_name)) end end
update(new_constraint_builder)
click to toggle source
# File lib/mv/mysql/constraint/builder/trigger.rb, line 19 def update new_constraint_builder delete new_constraint_builder.create end
Private Instance Methods
create_trigger_statement(table_name)
click to toggle source
# File lib/mv/mysql/constraint/builder/trigger.rb, line 31 def create_trigger_statement table_name "CREATE TRIGGER #{name} BEFORE #{update? ? 'UPDATE' : 'INSERT'} ON #{table_name} FOR EACH ROW BEGIN DECLARE var INT; #{trigger_body(table_name)}; END;" end
drop_trigger_statement(table_name)
click to toggle source
# File lib/mv/mysql/constraint/builder/trigger.rb, line 27 def drop_trigger_statement table_name "DROP TRIGGER IF EXISTS #{name};" end
raise_error_statement(message)
click to toggle source
# File lib/mv/mysql/constraint/builder/trigger.rb, line 48 def raise_error_statement message return "SIGNAL SQLSTATE '45000' SET message_text = '#{message}';" if db.support_signal? "SET var = (SELECT MAX(1) FROM `#{message}`);" end
trigger_body(table_name)
click to toggle source
# File lib/mv/mysql/constraint/builder/trigger.rb, line 40 def trigger_body(table_name) validation_builders.select{|b| b.table_name == table_name }.collect(&:conditions).flatten.collect do |condition| "IF NOT(#{condition[:statement]}) THEN #{raise_error_statement(condition[:message])} END IF".squish end.join("; \n") end