Error message
You are browsing documentation for drupal 7.x, which is not supported anymore. Read the updated version of this page for drupal 11.x (the latest version).function DatabaseConnection_mysql::popCommittableTransactions
Overridden to work around issues to MySQL not supporting transactional DDL.
Overrides DatabaseConnection::popCommittableTransactions
File
-
includes/
database/ mysql/ database.inc, line 535
Class
Code
protected function popCommittableTransactions() {
// Commit all the committable layers.
foreach (array_reverse ($this->transactionLayers ) as $name => $active) {
// Stop once we found an active transaction.
if ($active) {
break;
}
// If there are no more layers left then we should commit.
unset($this->transactionLayers [$name]);
if (empty($this->transactionLayers )) {
if (!$this->doCommit ()) {
throw new DatabaseTransactionCommitFailedException ();
}
}
else {
// Attempt to release this savepoint in the standard way.
try {
$this->query ('RELEASE SAVEPOINT ' . $name);
} catch (PDOException $e) {
// However, in MySQL (InnoDB), savepoints are automatically committed
// when tables are altered or created (DDL transactions are not
// supported). This can cause exceptions due to trying to release
// savepoints which no longer exist.
//
// To avoid exceptions when no actual error has occurred, we silently
// succeed for MySQL error code 1305 ("SAVEPOINT does not exist").
if ($e->errorInfo[1] == '1305') {
// If one SAVEPOINT was released automatically, then all were.
// Therefore, clean the transaction stack.
$this->transactionLayers = array();
// We also have to explain to PDO that the transaction stack has
// been cleaned-up.
$this->doCommit ();
}
else {
throw $e;
}
}
}
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.