Method: ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#build_insert_sql

Defined in:
lib/active_record/connection_adapters/postgresql_adapter.rb

#build_insert_sql(insert) ⇒ Object

:nodoc:



438
439
440
441
442
443
444
445
446
447
448
449
450
451
# File 'lib/active_record/connection_adapters/postgresql_adapter.rb', line 438

def build_insert_sql(insert) # :nodoc:
  sql = +"INSERT #{insert.into} #{insert.values_list}"

  if insert.skip_duplicates?
    sql << " ON CONFLICT #{insert.conflict_target} DO NOTHING"
  elsif insert.update_duplicates?
    sql << " ON CONFLICT #{insert.conflict_target} DO UPDATE SET "
    sql << insert.touch_model_timestamps_unless { |column| "#{insert.model.quoted_table_name}.#{column} IS NOT DISTINCT FROM excluded.#{column}" }
    sql << insert.updatable_columns.map { |column| "#{column}=excluded.#{column}" }.join(",")
  end

  sql << " RETURNING #{insert.returning}" if insert.returning
  sql
end