Current section

Files

Jump to
arangox_ecto lib arangox_ecto behaviour transaction.ex
Raw

lib/arangox_ecto/behaviour/transaction.ex

defmodule ArangoXEcto.Behaviour.Transaction do
@moduledoc false
alias ArangoXEcto.Adapter
@behaviour Ecto.Adapter.Transaction
@impl true
def in_transaction?(%{pid: pool}) do
match?(%DBConnection{conn_mode: :transaction}, Adapter.get_conn(pool))
end
@impl true
def transaction(adapter_meta, opts, callback) do
Adapter.checkout_or_transaction(:transaction, adapter_meta, opts, callback)
end
@impl true
def rollback(%{pid: pool}, value) do
case Adapter.get_conn(pool) do
%DBConnection{conn_mode: :transaction} = conn -> Arangox.abort(conn, value)
_ -> raise "cannot call rollback outside of transaction"
end
end
end