function TransactionManagerBase::purge
Purges a Drupal transaction from the manager.
This is only called by a Transaction object's ::__destruct() method and should only be called internally by a database driver.
@internal
Parameters
string $name: The name of the transaction.
string $id: The id of the transaction.
Throws
\Drupal\Core\Database\TransactionOutOfOrderException If a Drupal Transaction with the specified name does not exist.
\Drupal\Core\Database\TransactionCommitFailedException If the commit of the root transaction failed.
File
-
core/
lib/ Drupal/ Core/ Database/ Transaction/ TransactionManagerBase.php, line 317
Class
- TransactionManagerBase
- The database transaction manager base class.
Namespace
Drupal\Core\Database\TransactionCode
public function purge(string $name, string $id) : void {
// If this is a 'root' transaction, and it is voided (that is, no longer in
// the stack), then the transaction on the database is no longer active. An
// action such as a commit, a release savepoint, a rollback, or a DDL
// statement, was executed that terminated the database transaction. So, we
// can process the post transaction callbacks.
if (!isset($this->stack()[$id]) && isset($this->voidedItems[$id]) && $this->rootId === $id) {
$this->processPostTransactionCallbacks();
$this->rootId = NULL;
unset($this->voidedItems[$id]);
return;
}
// If the $id does not correspond to the one in the stack for that $name,
// we are facing an orphaned Transaction object (for example in case of a
// DDL statement breaking an active transaction). That should be listed in
// $voidedItems, so we can remove it from there.
if (!isset($this->stack()[$id]) || $this->stack()[$id]->name !== $name) {
unset($this->voidedItems[$id]);
return;
}
// When we get here, the transaction (or savepoint) is still active on the
// database. We can unpile it, and if we are left with no more items in the
// stack, we can also process the post transaction callbacks.
$this->commit($name, $id);
$this->removeStackItem($id);
if ($this->rootId === $id) {
$this->processPostTransactionCallbacks();
$this->rootId = NULL;
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.