Method: ActiveRecord::Import::SQLite3Adapter#insert_many

Defined in:
lib/activerecord-import/adapters/sqlite3_adapter.rb

#insert_many(sql, values, _options = {}, *args) ⇒ Object

sql can be a single string or an array. If it is an array all elements that are in position >= 1 will be appended to the final SQL.


22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/activerecord-import/adapters/sqlite3_adapter.rb', line 22

def insert_many( sql, values, _options = {}, *args ) # :nodoc:
  number_of_inserts = 0

  base_sql, post_sql = if sql.is_a?( String )
    [sql, '']
  elsif sql.is_a?( Array )
    [sql.shift, sql.join( ' ' )]
  end

  value_sets = ::ActiveRecord::Import::ValueSetsRecordsParser.parse(values,
    max_records: SQLITE_LIMIT_COMPOUND_SELECT)

  transaction(requires_new: true) do
    value_sets.each do |value_set|
      number_of_inserts += 1
      sql2insert = base_sql + value_set.join( ',' ) + post_sql
      insert( sql2insert, *args )
    end
  end

  ActiveRecord::Import::Result.new([], number_of_inserts, [], [])
end