Carbonite.Multi.insert_transaction
You're seeing just the function
insert_transaction
, go back to Carbonite.Multi module for more information.
Link to this function
insert_transaction(multi, params \\ %{}, opts \\ [])
View Source (since 0.2.0)Specs
insert_transaction(Ecto.Multi.t(), params(), [insert_transaction_option()]) :: Ecto.Multi.t()
Adds an insert operation for a Carbonite.Transaction
to an Ecto.Multi
.
Options
carbonite_prefix
defines the audit trail's schema, defaults to"carbonite_default"
params
map of params for theCarbonite.Transaction
(e.g.,:meta
)
Multiple inserts in the same transaction
Normally, you should have exactly one insert_transaction/3
call per database transaction. In
practise, there are two scenarios in this function may be called multiple times:
- If an operation A, which calls
insert_transaction/3
, sometimes is nested within an outer operation B, which also callsinsert_transaction/3
. - In tests using Ecto's SQL sandbox, subsequent calls to transactional operations (even to the
same operation twice) are wrapped inside the overarching test transaction, and hence also
effectively call
insert_transaction/3
within the same transaction.
While the first scenario can be resolved using appropriate control flow (e.g. by conditionally
disabling the inner insert_transaction/3
call), the second scenario is quite common and often
unavoidable.
Therefore, insert_transaction/3
ignores subsequent calls within the same database
transaction (equivalent to ON CONFLICT DO NOTHING
), discarding metadata passed to all
calls but the first.