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,[])}

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