public Connection::rollback($savepoint_name = 'drupal_transaction')
Rolls back the transaction entirely or to a named savepoint.
This method throws an exception if no transaction is active.
Parameters
string $savepoint_name: (optional) The name of the savepoint. The default, 'drupal_transaction', will roll the entire transaction back.
Throws
\Drupal\Core\Database\TransactionOutOfOrderException
\Drupal\Core\Database\TransactionNoActiveException
See also
\Drupal\Core\Database\Transaction::rollback()
File
- core/lib/Drupal/Core/Database/Connection.php, line 1062
Class
- Connection
- Base Database API class.
Namespace
Drupal\Core\Database
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | public function rollback( $savepoint_name = 'drupal_transaction' ) { if (! $this ->supportsTransactions()) { return ; } 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(); } // We need to find the point we're rolling back to, all other savepoints // before are no longer needed. If we rolled back other active savepoints, // we need to throw an exception. $rolled_back_other_active_savepoints = FALSE; while ( $savepoint = array_pop ( $this ->transactionLayers)) { if ( $savepoint == $savepoint_name ) { // If it is the last the transaction in the stack, then it is not a // savepoint, it is the transaction itself so we will need to roll back // the transaction rather than a savepoint. if ( empty ( $this ->transactionLayers)) { break ; } $this ->query( 'ROLLBACK TO SAVEPOINT ' . $savepoint ); $this ->popCommittableTransactions(); if ( $rolled_back_other_active_savepoints ) { throw new TransactionOutOfOrderException(); } return ; } else { $rolled_back_other_active_savepoints = TRUE; } } $this ->connection->rollBack(); if ( $rolled_back_other_active_savepoints ) { throw new TransactionOutOfOrderException(); } } |
Please login to continue.