class RubyEventStore::ROM::SQL::Changesets::UpdateEvents

Constants

UPSERT_COLUMNS

Public Instance Methods

commit() click to toggle source
# File lib/ruby_event_store/rom/adapters/sql/changesets/update_events.rb, line 12
def commit
  if SQL.supports_on_duplicate_key_update?(relation.dataset.db)
    commit_on_duplicate_key_update
  elsif SQL.supports_insert_conflict_update?(relation.dataset.db)
    commit_insert_conflict_update
  else
    raise "Database doesn't support upserts: #{relation.dataset.db.adapter_scheme}"
  end
end

Private Instance Methods

commit_insert_conflict_update() click to toggle source
# File lib/ruby_event_store/rom/adapters/sql/changesets/update_events.rb, line 28
def commit_insert_conflict_update
  relation.dataset.insert_conflict(
    # constraint: 'index_name',
    target: :id,
    update: UPSERT_COLUMNS.each_with_object({}) do |column, memo|
      memo[column] = Sequel[:excluded][column]
    end
  ).multi_insert(to_a)
end
commit_on_duplicate_key_update() click to toggle source
# File lib/ruby_event_store/rom/adapters/sql/changesets/update_events.rb, line 24
def commit_on_duplicate_key_update
  relation.dataset.on_duplicate_key_update(*UPSERT_COLUMNS).multi_insert(to_a)
end