4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# File 'lib/active_record_upsert/arel/table_extensions.rb', line 4
def compile_upsert(upsert_keys, upsert_options, upsert_values, insert_values, wheres)
target = self[upsert_options.key?(:literal) ? ::Arel::Nodes::SqlLiteral.new(upsert_options[:literal]) : upsert_keys.join(',')]
on_conflict_do_update = ::Arel::OnConflictDoUpdateManager.new
on_conflict_do_update.target = target
on_conflict_do_update.target_condition = upsert_options[:where]
on_conflict_do_update.wheres = wheres
on_conflict_do_update.set(upsert_values)
insert_manager = ::Arel::InsertManager.new
insert_manager.on_conflict = on_conflict_do_update.to_node
insert_manager.into insert_values.first.first.relation
insert_manager.insert(insert_values)
insert_manager
end
|