diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php b/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php index 50cc927d71..ad34c2957c 100644 --- a/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php +++ b/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php @@ -422,15 +422,6 @@ protected function popCommittableTransactions() { * {@inheritdoc} */ public function rollBack($savepoint_name = 'drupal_transaction') { - if (!$this->inTransaction()) { - throw new TransactionNoActiveException(); - } - // A previous rollback to an earlier savepoint may mean that the savepoint - // in question has already been accidentally committed. - if (!isset($this->transactionLayers[$savepoint_name])) { - throw new TransactionNoActiveException(); - } - // MySQL will automatically commit transactions when tables are altered or // created (DDL transactions are not supported). Prevent triggering an // exception to ensure that the error that has caused the rollback is @@ -439,6 +430,18 @@ public function rollBack($savepoint_name = 'drupal_transaction') { // On PHP 7 $this->connection->inTransaction() will return TRUE and // $this->connection->rollback() does not throw an exception; the // following code is unreachable. + + // If \Drupal\Core\Database\Connection::rollBack() would throw an + // exception then continue to throw an exception. + if (!$this->inTransaction()) { + throw new TransactionNoActiveException(); + } + // A previous rollback to an earlier savepoint may mean that the savepoint + // in question has already been accidentally committed. + if (!isset($this->transactionLayers[$savepoint_name])) { + throw new TransactionNoActiveException(); + } + trigger_error('Rollback attempted when there is no active transaction. This can cause data integrity issues.', E_USER_WARNING); return; }