Class: Rapids::Batch::CreateTrigger

Inherits:
Object
  • Object
show all
Includes:
ModelExtensions
Defined in:
lib/rapids/batch/create_trigger.rb

Instance Method Summary collapse

Methods included from ModelExtensions

#batch_table_name, #columns, #default_on_nil, #quote_bound_value, #sql_column_name

Constructor Details

#initialize(model, batch_definition, options = {}) ⇒ CreateTrigger

Returns a new instance of CreateTrigger.



9
10
11
12
13
# File 'lib/rapids/batch/create_trigger.rb', line 9

def initialize(model,batch_definition,options = {})
  @model = model
  @batch = batch_definition
  @options = options
end

Instance Method Details

#to_sqlObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rapids/batch/create_trigger.rb', line 15

def to_sql
  declares = @batch.find_or_creates.map do |find_or_create|
    "declare #{variable_name(find_or_create.name,[])} integer;"
  end.join("\n")

  columns_helper = ColumnsHelper.new(@model,@batch)
  main_columns = columns_helper.find_all{|column,path| path == []}

  insert_header = (main_columns.map(&:first) + criteria_columns(@model,association_find_or_creates.map(&:name))).map{|a|sql_column_name(a,[])}
  insert_values = main_columns.map{|a|"new.#{sql_column_name(a.first,[])}"} + association_find_or_creates.map(&:name).map{|name|variable_name(name,[])}

  <<-TRIGGER_SQL
    create trigger `#{batch_table_name}_trigger` after insert on `#{batch_table_name}` for each row
    begin
      #{declares}
      
      #{find_or_create_sql(@model,@batch)}
      
      #{@options[:replace] ? "replace" : "insert"} into `#{@model.table_name}` (#{insert_header.join(",")})
                                  values (#{insert_values.join(",")});
      #{updates_sql(@model,@batch)}
    end
  TRIGGER_SQL
end