/** * Method to roll back a transaction. * * @param boolean $toSavepoint If true, rollback to the last savepoint. * @return self Returns this object to support chaining. * * @throws \RuntimeException */ public function transactionRollback($toSavepoint = false) { if (version_compare($this->cmsRelease, '3.2', '>=')) { $this->_db->transactionRollback($toSavepoint); } else { if (!$toSavepoint || $this->transactionDepth <= 1) { if ($this->query('ROLLBACK')) { $this->transactionDepth = 0; } return $this; } $savepoint = 'SP_' . ($this->transactionDepth - 1); if ($this->query('ROLLBACK TO SAVEPOINT ' . $this->nameQuote($savepoint))) { $this->transactionDepth--; } } return $this; }
/** * Method to update an object in the database. * * @return void * * @since 12.1 * @throws RuntimeException */ protected function doUpdate() { // Get the primary key. $primaryKey = $this->getTableKey('primary', 'primary'); try { // Start a transaction. $this->db->transactionStart(); // Update the data for each table. foreach ($this->tables as $alias => $table) { // Store the data to the database. $dump = $this->dumpTable($alias); $this->db->updateObject($table, $dump, $primaryKey); } // Commit the transaction. $this->db->transactionCommit(); } catch (RuntimeException $error) { // Rollback the transaction. $this->db->transactionRollback(); // Rethrow the error. throw $error; } }