* @link http://www.yiiframework.com/ * @copyright Copyright © 2008-2009 Yii Software LLC * @license http://www.yiiframework.com/license/ */ Prado::using('System.Testing.Data.TDbDataReader'); /** * TDbTransaction represents a DB transaction. * * It is usually created by calling {@link TDbConnection::beginTransaction}. * * The following code is a common scenario of using transactions: *
 * $transaction=$connection->beginTransaction();
 * try
 * {
 *    $connection->createCommand($sql1)->execute();
 *    $connection->createCommand($sql2)->execute();
 *    //.... other SQL executions
 *    $transaction->commit();
 * }
 * catch(Exception $e)
 * {
 *    $transaction->rollBack();
 * }
 * 
* * @author Qiang Xue * @version $Id$ * @package System.Testing.Data * @since 1.0 */ class TDbTransaction extends TComponent { private $_connection=null; private $_active; /** * Constructor. * @param TDbConnection the connection associated with this transaction * @see TDbConnection::beginTransaction */ public function __construct(TDbConnection $connection) { $this->_connection=$connection; $this->setActive(true); } /** * Commits a transaction. * @throws CException if the transaction or the DB connection is not active. */ public function commit() { if($this->_active && $this->_connection->getActive()) { Prado::trace('Committing transaction','System.Testing.Data.TDbTransaction'); $this->_connection->getPdoInstance()->commit(); $this->_active=false; } else throw new TDbException('dbtransaction_transaction_inactive'); } /** * Rolls back a transaction. * @throws CException if the transaction or the DB connection is not active. */ public function rollback() { if($this->_active && $this->_connection->getActive()) { Prado::trace('Rolling back transaction','System.Testing.Data.TDbTransaction'); $this->_connection->getPdoInstance()->rollBack(); $this->_active=false; } else throw new TDbException('dbtransaction_transaction_inactive'); } /** * @return TDbConnection the DB connection for this transaction */ public function getConnection() { return $this->_connection; } /** * @return boolean whether this transaction is active */ public function getActive() { return $this->_active; } /** * @param boolean whether this transaction is active */ protected function setActive($value) { $this->_active=TPropertyValue::ensureBoolean($value); } }