Browse Source

Add Connection::inTransaction() to check if a transaction is running.

ADmad 11 years ago
parent
commit
e2eeb3fabb
2 changed files with 68 additions and 0 deletions
  1. 10 0
      src/Database/Connection.php
  2. 58 0
      tests/TestCase/Database/ConnectionTest.php

+ 10 - 0
src/Database/Connection.php

@@ -574,6 +574,16 @@ class Connection
     }
 
     /**
+     * Checks if a transaction is running.
+     *
+     * @return bool True is a transaction is runnning else false.
+     */
+    public function inTransaction()
+    {
+        return $this->_transactionStarted;
+    }
+
+    /**
      * Quotes value to be used safely in database query.
      *
      * @param mixed $value The value to quote.

+ 58 - 0
tests/TestCase/Database/ConnectionTest.php

@@ -578,6 +578,64 @@ class ConnectionTest extends TestCase
     }
 
     /**
+     * Tests inTransaction()
+     *
+     * @return void
+     */
+    public function testInTransaction()
+    {
+        $this->connection->begin();
+        $this->assertTrue($this->connection->inTransaction());
+
+        $this->connection->begin();
+        $this->assertTrue($this->connection->inTransaction());
+
+        $this->connection->commit();
+        $this->assertTrue($this->connection->inTransaction());
+
+        $this->connection->commit();
+        $this->assertFalse($this->connection->inTransaction());
+
+        $this->connection->begin();
+        $this->assertTrue($this->connection->inTransaction());
+
+        $this->connection->begin();
+        $this->connection->rollback();
+        $this->assertFalse($this->connection->inTransaction());
+    }
+
+    /**
+     * Tests inTransaction() with save points
+     *
+     * @return void
+     */
+    public function testInTransactionWithSavePoints()
+    {
+        $this->skipIf(!$this->connection->useSavePoints(true));
+        $this->connection->begin();
+        $this->assertTrue($this->connection->inTransaction());
+
+        $this->connection->begin();
+        $this->assertTrue($this->connection->inTransaction());
+
+        $this->connection->commit();
+        $this->assertTrue($this->connection->inTransaction());
+
+        $this->connection->commit();
+        $this->assertFalse($this->connection->inTransaction());
+
+        $this->connection->begin();
+        $this->assertTrue($this->connection->inTransaction());
+
+        $this->connection->begin();
+        $this->connection->rollback();
+        $this->assertTrue($this->connection->inTransaction());
+
+        $this->connection->rollback();
+        $this->assertFalse($this->connection->inTransaction());
+    }
+
+    /**
      * Tests connection can quote values to be safely used in query strings
      *
      * @return void