From be0d79c48f1240e2840f01e28ff008e44e6bd0c6 Mon Sep 17 00:00:00 2001 From: zYne Date: Tue, 14 Nov 2006 21:57:11 +0000 Subject: [PATCH] Updated transaction drivers --- lib/Doctrine/Transaction/Firebird.php | 2 +- lib/Doctrine/Transaction/Mssql.php | 37 ++++++++++++++++++++++++++- lib/Doctrine/Transaction/Mysql.php | 4 +-- lib/Doctrine/Transaction/Oracle.php | 2 +- lib/Doctrine/Transaction/Pgsql.php | 2 +- lib/Doctrine/Transaction/Sqlite.php | 2 +- 6 files changed, 42 insertions(+), 7 deletions(-) diff --git a/lib/Doctrine/Transaction/Firebird.php b/lib/Doctrine/Transaction/Firebird.php index c92c6f91b..ea22bf4a3 100644 --- a/lib/Doctrine/Transaction/Firebird.php +++ b/lib/Doctrine/Transaction/Firebird.php @@ -84,7 +84,7 @@ class Doctrine_Transaction_Firebird extends Doctrine_Transaction { * @throws Doctrine_Transaction_Exception if using unknown isolation level or unknown wait option * @return void */ - public function setTransactionIsolation($isolation, $options = array()) { + public function setIsolation($isolation, $options = array()) { switch ($isolation) { case 'READ UNCOMMITTED': $nativeIsolation = 'READ COMMITTED RECORD_VERSION'; diff --git a/lib/Doctrine/Transaction/Mssql.php b/lib/Doctrine/Transaction/Mssql.php index 170c4f723..a58a29227 100644 --- a/lib/Doctrine/Transaction/Mssql.php +++ b/lib/Doctrine/Transaction/Mssql.php @@ -30,4 +30,39 @@ Doctrine::autoload('Doctrine_Transaction'); * @since 1.0 * @version $Revision$ */ -class Doctrine_Transaction_Mssql extends Doctrine_Transaction { } +class Doctrine_Transaction_Mssql extends Doctrine_Transaction { + /** + * Set the transacton isolation level. + * + * @param string standard isolation level (SQL-92) + * portable modes: + * READ UNCOMMITTED (allows dirty reads) + * READ COMMITTED (prevents dirty reads) + * REPEATABLE READ (prevents nonrepeatable reads) + * SERIALIZABLE (prevents phantom reads) + * mssql specific modes: + * SNAPSHOT + * + * @link http://msdn2.microsoft.com/en-us/library/ms173763.aspx + * @throws PDOException if something fails at the PDO level + * @throws Doctrine_Transaction_Exception if using unknown isolation level or unknown wait option + * @return void + */ + public function setIsolation($isolation, $options = array()) { + switch ($isolation) { + case 'READ UNCOMMITTED': + case 'READ COMMITTED': + case 'REPEATABLE READ': + case 'SERIALIZABLE': + case 'SNAPSHOT': + + break; + default: + throw new Doctrine_Transaction_Exception('isolation level is not supported: ' . $isolation); + } + + $query = 'SET TRANSACTION ISOLATION LEVEL ' . $isolation; + + $this->conn->getDbh()->query($query); + } +} diff --git a/lib/Doctrine/Transaction/Mysql.php b/lib/Doctrine/Transaction/Mysql.php index daf1e7f36..720b86f82 100644 --- a/lib/Doctrine/Transaction/Mysql.php +++ b/lib/Doctrine/Transaction/Mysql.php @@ -80,7 +80,7 @@ class Doctrine_Transaction_Mysql extends Doctrine_Transaction { * @throws PDOException if something fails at the PDO level * @return void */ - public function setTransactionIsolation($isolation) { + public function setIsolation($isolation) { switch ($isolation) { case 'READ UNCOMMITTED': case 'READ COMMITTED': @@ -93,7 +93,7 @@ class Doctrine_Transaction_Mysql extends Doctrine_Transaction { } $query = "SET SESSION TRANSACTION ISOLATION LEVEL $isolation"; - + return $this->conn->getDbh()->query($query); } /** diff --git a/lib/Doctrine/Transaction/Oracle.php b/lib/Doctrine/Transaction/Oracle.php index 24a0d039e..e73a26b2e 100644 --- a/lib/Doctrine/Transaction/Oracle.php +++ b/lib/Doctrine/Transaction/Oracle.php @@ -78,7 +78,7 @@ class Doctrine_Transaction_Oracle extends Doctrine_Transaction { * @throws Doctrine_Transaction_Exception if using unknown isolation level * @return void */ - public function setTransactionIsolation($isolation) { + public function setIsolation($isolation) { switch($isolation) { case 'READ UNCOMMITTED': $isolation = 'READ COMMITTED'; diff --git a/lib/Doctrine/Transaction/Pgsql.php b/lib/Doctrine/Transaction/Pgsql.php index 670374423..98aaac09f 100644 --- a/lib/Doctrine/Transaction/Pgsql.php +++ b/lib/Doctrine/Transaction/Pgsql.php @@ -80,7 +80,7 @@ class Doctrine_Transaction_Pgsql extends Doctrine_Transaction { * @throws Doctrine_Transaction_Exception if using unknown isolation level or unknown wait option * @return void */ - public function setTransactionIsolation($isolation) { + public function setIsolation($isolation) { switch ($isolation) { case 'READ UNCOMMITTED': case 'READ COMMITTED': diff --git a/lib/Doctrine/Transaction/Sqlite.php b/lib/Doctrine/Transaction/Sqlite.php index f4eb09682..97bf76f42 100644 --- a/lib/Doctrine/Transaction/Sqlite.php +++ b/lib/Doctrine/Transaction/Sqlite.php @@ -43,7 +43,7 @@ class Doctrine_Transaction_Sqlite extends Doctrine_Transaction { * @throws Doctrine_Transaction_Exception if using unknown isolation level * @return void */ - public function setTransactionIsolation($isolation) { + public function setIsolation($isolation) { switch ($isolation) { case 'READ UNCOMMITTED': $isolation = 0;