Module: ActiveRecord::Import::SQLite3Adapter
- Includes:
- ImportSupport
- Included in:
- ConnectionAdapters::SQLite3Adapter
- Defined in:
- lib/activerecord-import/adapters/sqlite3_adapter.rb
Constant Summary collapse
- MIN_VERSION_FOR_IMPORT =
"3.7.11".freeze
- SQLITE_LIMIT_COMPOUND_SELECT =
500
Instance Method Summary collapse
-
#insert_many(sql, values, _options = {}, *args) ⇒ Object
sql
can be a single string or an array. - #next_value_for_sequence(sequence_name) ⇒ Object
- #pre_sql_statements(options) ⇒ Object
-
#supports_import?(current_version = sqlite_version) ⇒ Boolean
Override our conformance to ActiveRecord::Import::ImportSupport interface to ensure that we only support import in supported version of SQLite.
Instance Method Details
#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.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/activerecord-import/adapters/sqlite3_adapter.rb', line 20 def insert_many( sql, values, = {}, *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 [number_of_inserts, []] end |
#next_value_for_sequence(sequence_name) ⇒ Object
52 53 54 |
# File 'lib/activerecord-import/adapters/sqlite3_adapter.rb', line 52 def next_value_for_sequence(sequence_name) %{nextval('#{sequence_name}')} end |
#pre_sql_statements(options) ⇒ Object
43 44 45 46 47 48 49 50 |
# File 'lib/activerecord-import/adapters/sqlite3_adapter.rb', line 43 def pre_sql_statements( ) sql = [] # Options :recursive and :on_duplicate_key_ignore are mutually exclusive if ([:ignore] || [:on_duplicate_key_ignore]) && ![:recursive] sql << "OR IGNORE" end sql + super end |
#supports_import?(current_version = sqlite_version) ⇒ Boolean
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.
10 11 12 13 14 15 16 |
# File 'lib/activerecord-import/adapters/sqlite3_adapter.rb', line 10 def supports_import?(current_version = sqlite_version) if current_version >= MIN_VERSION_FOR_IMPORT true else false end end |