Sha256: a123337f06acc24d4d620ce0f0c716f7a60ed4ef3c18d98e2b99613ce9bf723e

Contents?: true

Size: 1.52 KB

Versions: 5

Compression:

Stored size: 1.52 KB

Contents

module ActiveRecord::Import::SQLite3Adapter
  include ActiveRecord::Import::ImportSupport

  MIN_VERSION_FOR_IMPORT = "3.7.11".freeze
  SQLITE_LIMIT_COMPOUND_SELECT = 500

  # Override our conformance to ActiveRecord::Import::ImportSupport interface
  # to ensure that we only support import in supported version of SQLite.
  # Which INSERT statements with multiple value sets was introduced in 3.7.11.
  def supports_import?(current_version = sqlite_version)
    if current_version >= MIN_VERSION_FOR_IMPORT
      true
    else
      false
    end
  end

  # +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.
  def insert_many(sql, values, *args) # :nodoc:
    number_of_inserts = 0
    ids = []

    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)

    value_sets.each do |value_set|
      number_of_inserts += 1
      sql2insert = base_sql + value_set.join( ',' ) + post_sql
      first_insert_id = insert( sql2insert, *args )
      last_insert_id = first_insert_id + value_set.size - 1
      ids.concat((first_insert_id..last_insert_id).to_a)
    end

    [number_of_inserts, ids]
  end

  def next_value_for_sequence(sequence_name)
    %{nextval('#{sequence_name}')}
  end

  def support_setting_primary_key_of_imported_objects?
    true
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
activerecord-import-uuid-0.2 lib/activerecord-import/adapters/sqlite3_adapter.rb
activerecord-import-uuid-0.1 lib/activerecord-import/adapters/sqlite3_adapter.rb
activerecord-import-0.15.0 lib/activerecord-import/adapters/sqlite3_adapter.rb
activerecord-import-0.14.1 lib/activerecord-import/adapters/sqlite3_adapter.rb
activerecord-import-0.14.0 lib/activerecord-import/adapters/sqlite3_adapter.rb