Module: ActiveRecord::Import::AbstractAdapter::InstanceMethods

Included in:
ConnectionAdapters::AbstractAdapter
Defined in:
lib/activerecord-import/adapters/abstract_adapter.rb

Instance Method Summary collapse

Instance Method Details

#after_import_synchronize(instances) ⇒ Object

Synchronizes the passed in ActiveRecord instances with the records in the database by calling reload on each instance.



39
40
41
# File 'lib/activerecord-import/adapters/abstract_adapter.rb', line 39

def after_import_synchronize( instances )
  instances.each(&:reload)
end

#increment_locking_column!(table_name, results, locking_column) ⇒ Object



62
63
64
65
66
# File 'lib/activerecord-import/adapters/abstract_adapter.rb', line 62

def increment_locking_column!(table_name, results, locking_column)
  if locking_column.present?
    results << "\"#{locking_column}\"=#{table_name}.\"#{locking_column}\"+1"
  end
end

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

:nodoc:



7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/activerecord-import/adapters/abstract_adapter.rb', line 7

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

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

  sql2insert = base_sql + values.join( ',' ) + post_sql
  insert( sql2insert, *args )

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

#next_value_for_sequence(sequence_name) ⇒ Object



3
4
5
# File 'lib/activerecord-import/adapters/abstract_adapter.rb', line 3

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

#post_sql_statements(table_name, options) ⇒ Object

Returns an array of post SQL statements given the passed in options.



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/activerecord-import/adapters/abstract_adapter.rb', line 44

def post_sql_statements( table_name, options ) # :nodoc:
  post_sql_statements = []

  if supports_on_duplicate_key_update? && options[:on_duplicate_key_update]
    post_sql_statements << sql_for_on_duplicate_key_update( table_name, options[:on_duplicate_key_update], options[:primary_key], options[:locking_column] )
  elsif logger && options[:on_duplicate_key_update]
    logger.warn "Ignoring on_duplicate_key_update because it is not supported by the database."
  end

  # custom user post_sql
  post_sql_statements << options[:post_sql] if options[:post_sql]

  # with rollup
  post_sql_statements << rollup_sql if options[:rollup]

  post_sql_statements
end

#pre_sql_statements(options) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/activerecord-import/adapters/abstract_adapter.rb', line 22

def pre_sql_statements(options)
  sql = []
  sql << options[:pre_sql] if options[:pre_sql]
  sql << options[:command] if options[:command]

  # add keywords like IGNORE or DELAYED
  if options[:keywords].is_a?(Array)
    sql.concat(options[:keywords])
  elsif options[:keywords]
    sql << options[:keywords].to_s
  end

  sql
end

#supports_on_duplicate_key_update?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/activerecord-import/adapters/abstract_adapter.rb', line 68

def supports_on_duplicate_key_update?
  true
end