module ActiveRecord::Import::PostgreSQLAdapter
Constants
- MIN_VERSION_FOR_UPSERT
Public Instance Methods
increment_locking_column!(results, locking_column)
click to toggle source
# File lib/activerecord-import/adapters/postgresql_adapter.rb, line 206 def increment_locking_column!(results, locking_column) if locking_column.present? results << "\"#{locking_column}\"=EXCLUDED.\"#{locking_column}\"+1" end end
next_value_for_sequence(sequence_name)
click to toggle source
# File lib/activerecord-import/adapters/postgresql_adapter.rb, line 64 def next_value_for_sequence(sequence_name) %{nextval('#{sequence_name}')} end
returning_columns(options)
click to toggle source
# File lib/activerecord-import/adapters/postgresql_adapter.rb, line 90 def returning_columns(options) columns = [] columns += Array(options[:primary_key]) if options[:primary_key].present? columns |= Array(options[:returning]) if options[:returning].present? columns end
split_ids_and_results(values, columns, options)
click to toggle source
# File lib/activerecord-import/adapters/postgresql_adapter.rb, line 46 def split_ids_and_results(values, columns, options) ids = [] results = [] id_indexes = Array(options[:primary_key]).map { |key| columns.index(key) } returning_indexes = Array(options[:returning]).map { |key| columns.index(key) } values.each do |value| value_array = Array(value) ids << id_indexes.map { |i| value_array[i] } results << returning_indexes.map { |i| value_array[i] } end ids.map!(&:first) if id_indexes.size == 1 results.map!(&:first) if returning_indexes.size == 1 [ids, results] end
sql_for_conflict_target( args = {} )
click to toggle source
# File lib/activerecord-import/adapters/postgresql_adapter.rb, line 175 def sql_for_conflict_target( args = {} ) constraint_name = args[:constraint_name] conflict_target = args[:conflict_target] index_predicate = args[:index_predicate] if constraint_name.present? "ON CONSTRAINT #{constraint_name} " elsif conflict_target.present? '(' << Array( conflict_target ).reject( &:blank? ).join( ', ' ) << ') '.tap do |sql| sql << "WHERE #{index_predicate} " if index_predicate end end end
sql_for_default_conflict_target( table_name, primary_key )
click to toggle source
# File lib/activerecord-import/adapters/postgresql_adapter.rb, line 188 def sql_for_default_conflict_target( table_name, primary_key ) conflict_target = Array(primary_key).join(', ') "(#{conflict_target}) " if conflict_target.present? end
supports_on_duplicate_key_update?(current_version = postgresql_version)
click to toggle source
# File lib/activerecord-import/adapters/postgresql_adapter.rb, line 198 def supports_on_duplicate_key_update?(current_version = postgresql_version) current_version >= MIN_VERSION_FOR_UPSERT end
supports_setting_primary_key_of_imported_objects?()
click to toggle source
# File lib/activerecord-import/adapters/postgresql_adapter.rb, line 202 def supports_setting_primary_key_of_imported_objects? true end