| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 | 
							- <?php
 - 
 - namespace Doctrine\Tests\DBAL\Functional;
 - 
 - use Doctrine\DBAL\ConnectionException;
 - 
 - require_once __DIR__ . '/../../TestInit.php';
 - 
 - class ConnectionTest extends \Doctrine\Tests\DbalFunctionalTestCase
 - {
 -     public function setUp()
 -     {
 -         $this->resetSharedConn();
 -         parent::setUp();
 -     }
 - 
 -     public function tearDown()
 -     {
 -         parent::tearDown();
 -         $this->resetSharedConn();
 -     }
 - 
 -     public function testGetWrappedConnection()
 -     {
 -         $this->assertInstanceOf('Doctrine\DBAL\Driver\Connection', $this->_conn->getWrappedConnection());
 -     }
 - 
 -     public function testCommitWithRollbackOnlyThrowsException()
 -     {
 -         $this->_conn->beginTransaction();
 -         $this->_conn->setRollbackOnly();
 -         $this->setExpectedException('Doctrine\DBAL\ConnectionException');
 -         $this->_conn->commit();
 -     }
 - 
 -     public function testTransactionNestingBehavior()
 -     {
 -         try {
 -             $this->_conn->beginTransaction();
 -             $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
 -             
 -             try {
 -                 $this->_conn->beginTransaction();
 -                 $this->assertEquals(2, $this->_conn->getTransactionNestingLevel());
 -                 throw new \Exception;
 -                 $this->_conn->commit(); // never reached
 -             } catch (\Exception $e) {
 -                 $this->_conn->rollback();
 -                 $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
 -                 //no rethrow                
 -             }
 -             $this->assertTrue($this->_conn->isRollbackOnly());
 - 
 -             $this->_conn->commit(); // should throw exception
 -             $this->fail('Transaction commit after failed nested transaction should fail.');
 -         } catch (ConnectionException $e) {
 -             $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
 -             $this->_conn->rollback();
 -             $this->assertEquals(0, $this->_conn->getTransactionNestingLevel());
 -         }
 -     }
 - 
 -     public function testTransactionNestingBehaviorWithSavepoints()
 -     {
 -         if (!$this->_conn->getDatabasePlatform()->supportsSavepoints()) {
 -             $this->markTestSkipped('This test requires the platform to support savepoints.');
 -         }
 - 
 -         $this->_conn->setNestTransactionsWithSavepoints(true);
 -         try {
 -             $this->_conn->beginTransaction();
 -             $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
 - 
 -             try {
 -                 $this->_conn->beginTransaction();
 -                 $this->assertEquals(2, $this->_conn->getTransactionNestingLevel());
 -                 $this->_conn->beginTransaction();
 -                 $this->assertEquals(3, $this->_conn->getTransactionNestingLevel());
 -                 $this->_conn->commit();
 -                 $this->assertEquals(2, $this->_conn->getTransactionNestingLevel());
 -                 throw new \Exception;
 -                 $this->_conn->commit(); // never reached
 -             } catch (\Exception $e) {
 -                 $this->_conn->rollback();
 -                 $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
 -                 //no rethrow
 -             }
 -             $this->assertFalse($this->_conn->isRollbackOnly());
 -             try {
 -                 $this->_conn->setNestTransactionsWithSavepoints(false);
 -                 $this->fail('Should not be able to disable savepoints in usage for nested transactions inside an open transaction.');
 -             } catch (ConnectionException $e) {
 -                 $this->assertTrue($this->_conn->getNestTransactionsWithSavepoints());
 -             }
 -             $this->_conn->commit(); // should not throw exception
 -         } catch (ConnectionException $e) {
 -             $this->fail('Transaction commit after failed nested transaction should not fail when using savepoints.');
 -             $this->_conn->rollback();
 -         }
 -     }
 - 
 -     public function testTransactionNestingBehaviorCantBeChangedInActiveTransaction()
 -     {
 -         if (!$this->_conn->getDatabasePlatform()->supportsSavepoints()) {
 -             $this->markTestSkipped('This test requires the platform to support savepoints.');
 -         }
 - 
 -         $this->_conn->beginTransaction();
 -         try {
 -             $this->_conn->setNestTransactionsWithSavepoints(true);
 -             $this->fail('An exception should have been thrown by chaning the nesting transaction behavior within an transaction.');
 -         } catch(ConnectionException $e) {
 -             $this->_conn->rollBack();
 -         }
 -     }
 - 
 -     public function testSetNestedTransactionsThroughSavepointsNotSupportedThrowsException()
 -     {
 -         if ($this->_conn->getDatabasePlatform()->supportsSavepoints()) {
 -             $this->markTestSkipped('This test requires the platform not to support savepoints.');
 -         }
 - 
 -         $this->setExpectedException('Doctrine\DBAL\ConnectionException', "Savepoints are not supported by this driver.");
 - 
 -         $this->_conn->setNestTransactionsWithSavepoints(true);
 -     }
 - 
 -     public function testCreateSavepointsNotSupportedThrowsException()
 -     {
 -         if ($this->_conn->getDatabasePlatform()->supportsSavepoints()) {
 -             $this->markTestSkipped('This test requires the platform not to support savepoints.');
 -         }
 - 
 -         $this->setExpectedException('Doctrine\DBAL\ConnectionException', "Savepoints are not supported by this driver.");
 - 
 -         $this->_conn->createSavepoint('foo');
 -     }
 - 
 -     public function testReleaseSavepointsNotSupportedThrowsException()
 -     {
 -         if ($this->_conn->getDatabasePlatform()->supportsSavepoints()) {
 -             $this->markTestSkipped('This test requires the platform not to support savepoints.');
 -         }
 - 
 -         $this->setExpectedException('Doctrine\DBAL\ConnectionException', "Savepoints are not supported by this driver.");
 - 
 -         $this->_conn->releaseSavepoint('foo');
 -     }
 - 
 -     public function testRollbackSavepointsNotSupportedThrowsException()
 -     {
 -         if ($this->_conn->getDatabasePlatform()->supportsSavepoints()) {
 -             $this->markTestSkipped('This test requires the platform not to support savepoints.');
 -         }
 - 
 -         $this->setExpectedException('Doctrine\DBAL\ConnectionException', "Savepoints are not supported by this driver.");
 - 
 -         $this->_conn->rollbackSavepoint('foo');
 -     }
 - 
 -     public function testTransactionBehaviorWithRollback()
 -     {
 -         try {
 -             $this->_conn->beginTransaction();
 -             $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
 -             
 -             throw new \Exception;
 -               
 -             $this->_conn->commit(); // never reached
 -         } catch (\Exception $e) {
 -             $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
 -             $this->_conn->rollback();
 -             $this->assertEquals(0, $this->_conn->getTransactionNestingLevel());
 -         }
 -     }
 - 
 -     public function testTransactionBehaviour()
 -     {
 -         try {
 -             $this->_conn->beginTransaction();
 -             $this->assertEquals(1, $this->_conn->getTransactionNestingLevel());
 -             $this->_conn->commit();
 -         } catch (\Exception $e) {
 -             $this->_conn->rollback();
 -             $this->assertEquals(0, $this->_conn->getTransactionNestingLevel());
 -         }
 - 
 -         $this->assertEquals(0, $this->_conn->getTransactionNestingLevel());
 -     }
 - 
 -     public function testTransactionalWithException()
 -     {
 -         try {
 -             $this->_conn->transactional(function($conn) {
 -                 $conn->executeQuery($conn->getDatabasePlatform()->getDummySelectSQL());
 -                 throw new \RuntimeException("Ooops!");
 -             });
 -         } catch (\RuntimeException $expected) {
 -             $this->assertEquals(0, $this->_conn->getTransactionNestingLevel());
 -         }
 -     }
 - 
 -     public function testTransactional()
 -     {
 -         $this->_conn->transactional(function($conn) {
 -             /* @var $conn Connection */
 -             $conn->executeQuery($conn->getDatabasePlatform()->getDummySelectSQL());
 -         });
 -     }
 - }
 
 
  |