Ejemplo n.º 1
0
 /**
  * Method to initialize a transaction.
  *
  * @param   boolean  $asSavepoint  If true and a transaction is already active, a savepoint will be created.
  * @return  self                   Returns this object to support chaining.
  *
  * @throws  \RuntimeException
  */
 public function transactionStart($asSavepoint = false)
 {
     if (version_compare($this->cmsRelease, '3.2', '>=')) {
         $this->_db->transactionStart($asSavepoint);
     } else {
         if (!$asSavepoint || !$this->transactionDepth) {
             if ($this->query('START TRANSACTION')) {
                 $this->transactionDepth = 1;
             }
             return $this;
         }
         $savepoint = 'SP_' . $this->transactionDepth;
         if ($this->query('SAVEPOINT ' . $this->nameQuote($savepoint))) {
             $this->transactionDepth++;
         }
     }
     return $this;
 }
Ejemplo n.º 2
0
 /**
  * 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;
     }
 }