From 3f0149b5b74d4017ba7f4ca28aa8a3e2053db964 Mon Sep 17 00:00:00 2001 From: "Christophe.Boulain" <> Date: Mon, 15 Jun 2009 07:49:42 +0000 Subject: Primilary import of new db stuff --- framework/Db/TDbTransaction.php | 111 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100755 framework/Db/TDbTransaction.php (limited to 'framework/Db/TDbTransaction.php') diff --git a/framework/Db/TDbTransaction.php b/framework/Db/TDbTransaction.php new file mode 100755 index 00000000..ff9924d3 --- /dev/null +++ b/framework/Db/TDbTransaction.php @@ -0,0 +1,111 @@ + + * @link http://www.yiiframework.com/ + * @copyright Copyright © 2008-2009 Yii Software LLC + * @license http://www.yiiframework.com/license/ + */ + +Prado::using('System.Db.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.db + * @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.db.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.db.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); + } +} -- cgit v1.2.3