Class: ActiveRecord::InsertAll::Builder

Inherits:
Object
  • Object
show all
Defined in:
activerecord/lib/active_record/insert_all.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(insert_all) ⇒ Builder

Returns a new instance of Builder.


133
134
135
# File 'activerecord/lib/active_record/insert_all.rb', line 133

def initialize(insert_all)
  @insert_all, @model, @connection = insert_all, insert_all.model, insert_all.connection
end

Instance Attribute Details

#modelObject (readonly)

Returns the value of attribute model


129
130
131
# File 'activerecord/lib/active_record/insert_all.rb', line 129

def model
  @model
end

Instance Method Details

#conflict_targetObject


155
156
157
158
159
160
161
162
163
# File 'activerecord/lib/active_record/insert_all.rb', line 155

def conflict_target
  if index = insert_all.unique_by
    sql = +"(#{format_columns(index.columns)})"
    sql << " WHERE #{index.where}" if index.where
    sql
  elsif update_duplicates?
    "(#{format_columns(insert_all.primary_keys)})"
  end
end

#intoObject


137
138
139
# File 'activerecord/lib/active_record/insert_all.rb', line 137

def into
  "INTO #{model.quoted_table_name} (#{columns_list})"
end

#returningObject


151
152
153
# File 'activerecord/lib/active_record/insert_all.rb', line 151

def returning
  format_columns(insert_all.returning) if insert_all.returning
end

#touch_model_timestamps_unless(&block) ⇒ Object


169
170
171
172
173
174
175
# File 'activerecord/lib/active_record/insert_all.rb', line 169

def touch_model_timestamps_unless(&block)
  model.send(:timestamp_attributes_for_update_in_model).map do |column_name|
    if touch_timestamp_attribute?(column_name)
      "#{column_name}=(CASE WHEN (#{updatable_columns.map(&block).join(" AND ")}) THEN #{model.quoted_table_name}.#{column_name} ELSE CURRENT_TIMESTAMP END),"
    end
  end.compact.join
end

#updatable_columnsObject


165
166
167
# File 'activerecord/lib/active_record/insert_all.rb', line 165

def updatable_columns
  quote_columns(insert_all.updatable_columns)
end

#values_listObject


141
142
143
144
145
146
147
148
149
# File 'activerecord/lib/active_record/insert_all.rb', line 141

def values_list
  types = extract_types_from_columns_on(model.table_name, keys: keys)

  values_list = insert_all.map_key_with_value do |key, value|
    connection.with_yaml_fallback(types[key].serialize(value))
  end

  Arel::InsertManager.new.create_values_list(values_list).to_sql
end