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