123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <?php
- /**
- * CDbTransaction class file
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.yiiframework.com/
- * @copyright 2008-2013 Yii Software LLC
- * @license http://www.yiiframework.com/license/
- */
- /**
- * CDbTransaction represents a DB transaction.
- *
- * It is usually created by calling {@link CDbConnection::beginTransaction}.
- *
- * The following code is a common scenario of using transactions:
- * <pre>
- * $transaction=$connection->beginTransaction();
- * try
- * {
- * $connection->createCommand($sql1)->execute();
- * $connection->createCommand($sql2)->execute();
- * //.... other SQL executions
- * $transaction->commit();
- * }
- * catch(Exception $e)
- * {
- * $transaction->rollback();
- * }
- * </pre>
- *
- * @property CDbConnection $connection The DB connection for this transaction.
- * @property boolean $active Whether this transaction is active.
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @package system.db
- * @since 1.0
- */
- class CDbTransaction extends CComponent
- {
- private $_connection=null;
- private $_active;
- /**
- * Constructor.
- * @param CDbConnection $connection the connection associated with this transaction
- * @see CDbConnection::beginTransaction
- */
- public function __construct(CDbConnection $connection)
- {
- $this->_connection=$connection;
- $this->_active=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())
- {
- Yii::trace('Committing transaction','system.db.CDbTransaction');
- $this->_connection->getPdoInstance()->commit();
- $this->_active=false;
- }
- else
- throw new CDbException(Yii::t('yii','CDbTransaction is inactive and cannot perform commit or roll back operations.'));
- }
- /**
- * 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())
- {
- Yii::trace('Rolling back transaction','system.db.CDbTransaction');
- $this->_connection->getPdoInstance()->rollBack();
- $this->_active=false;
- }
- else
- throw new CDbException(Yii::t('yii','CDbTransaction is inactive and cannot perform commit or roll back operations.'));
- }
- /**
- * @return CDbConnection 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 $value whether this transaction is active
- */
- protected function setActive($value)
- {
- $this->_active=$value;
- }
- }
|