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 the Carbonite.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:

  1. If an operation A, which calls insert_transaction/3, sometimes is nested within an outer operation B, which also calls insert_transaction/3.
  2. 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.