DatabaseTransactionsManager
class DatabaseTransactionsManager
Manages database transaction callbacks in a coroutine-safe manner.
Uses Context to store transaction state per-coroutine, ensuring that concurrent requests don't interfere with each other's transactions.
Constants
| protected COMMITTED_CONTEXT_KEY |
|
| protected PENDING_CONTEXT_KEY |
|
| protected CURRENT_CONTEXT_KEY |
|
Methods
Get all committed transactions for the current coroutine.
Set committed transactions for the current coroutine.
Get all pending transactions for the current coroutine.
Set pending transactions for the current coroutine.
Get current transaction map for the current coroutine.
Set current transaction for a connection.
Get current transaction for a connection.
Start a new database transaction.
Commit the root database transaction and execute callbacks.
Move relevant pending transactions to a committed state.
Rollback the active database transaction.
Remove all pending, completed, and current transactions for the given connection name.
Remove and return all committed descendants of the given transaction.
Execute rollback callbacks for every detached transaction.
Register a transaction callback.
Register a callback for transaction rollback.
Get the transactions that are applicable to callbacks.
Determine if after commit callbacks should be executed for the given transaction level.
Get all of the pending transactions.
Get all of the committed transactions.
Check whether there are pending transactions in non-coroutine storage.
Copy transaction state from the current coroutine to non-coroutine storage.
Clear all transaction state from non-coroutine storage.
Details
at line 30
protected Collection
getCommittedTransactionsInternal()
Get all committed transactions for the current coroutine.
at line 40
protected void
setCommittedTransactions(Collection $transactions)
Set committed transactions for the current coroutine.
at line 50
protected Collection
getPendingTransactionsInternal()
Get all pending transactions for the current coroutine.
at line 60
protected void
setPendingTransactions(Collection $transactions)
Set pending transactions for the current coroutine.
at line 70
protected array
getCurrentTransaction()
Get current transaction map for the current coroutine.
at line 78
protected void
setCurrentTransactionForConnection(string $connection, DatabaseTransactionRecord|null $transaction)
Set current transaction for a connection.
at line 88
protected DatabaseTransactionRecord|null
getCurrentTransactionForConnection(string $connection)
Get current transaction for a connection.
at line 96
void
begin(string $connection, int $level)
Start a new database transaction.
at line 116
Collection
commit(string $connection, int $levelBeingCommitted, int $newTransactionLevel)
Commit the root database transaction and execute callbacks.
at line 152
void
stageTransactions(string $connection, int $levelBeingCommitted)
Move relevant pending transactions to a committed state.
at line 175
void
rollback(string $connection, int $newTransactionLevel)
Rollback the active database transaction.
at line 223
protected void
removeAllTransactionsForConnection(string $connection)
Remove all pending, completed, and current transactions for the given connection name.
at line 263
protected Collection
removeCommittedTransactionsThatAreChildrenOf(DatabaseTransactionRecord $transaction)
Remove and return all committed descendants of the given transaction.
at line 289
protected void
executeRollbackCallbacks(Collection $transactions)
Execute rollback callbacks for every detached transaction.
at line 309
void
addCallback(callable $callback)
Register a transaction callback.
at line 322
void
addCallbackForRollback(callable $callback)
Register a callback for transaction rollback.
at line 334
Collection
callbackApplicableTransactions()
Get the transactions that are applicable to callbacks.
at line 342
bool
afterCommitCallbacksShouldBeExecuted(int $level)
Determine if after commit callbacks should be executed for the given transaction level.
at line 352
Collection
getPendingTransactions()
Get all of the pending transactions.
at line 362
Collection
getCommittedTransactions()
Get all of the committed transactions.
at line 370
static bool
hasNonCoroutinePendingTransactions()
Check whether there are pending transactions in non-coroutine storage.
at line 383
static void
copyToNonCoroutineState()
Copy transaction state from the current coroutine to non-coroutine storage.
Tests only. This copies coroutine-local transaction state into worker-global storage, so request-time use can leak or race across concurrent requests.
at line 398
static void
clearNonCoroutineState()
Clear all transaction state from non-coroutine storage.
Tests only. This mutates worker-global transaction state, so request-time use can race with concurrent requests using the same storage.