public function __destruct() { // If we rolled back then the transaction would have already been popped. if ($this->connection->inTransaction() && !$this->rolledBack) { $this->connection->popTransaction($this->name); } }
public function popTransaction($name) { if ($this->savepointSupport) { return parent::popTransaction($name); } if (!$this->supportsTransactions()) { return; } if (!$this->inTransaction()) { throw new DatabaseTransactionNoActiveException(); } // Commit everything since SAVEPOINT $name. while ($savepoint = array_pop($this->transactionLayers)) { if ($savepoint != $name) { continue; } // If there are no more layers left then we should commit or rollback. if (empty($this->transactionLayers)) { // If there was any rollback() we should roll back whole transaction. if ($this->willRollback) { $this->willRollback = FALSE; PDO::rollBack(); } elseif (!PDO::commit()) { throw new DatabaseTransactionCommitFailedException(); } } else { break; } } }