Commit 8aae77e0 authored by Steve Müller's avatar Steve Müller

Merge pull request #2390 from fprochazka/php7-throwable

Catch Throwable in Connection::transactional()
parents affe2f49 db06fceb
......@@ -32,6 +32,7 @@ use Doctrine\DBAL\Cache\QueryCacheProfile;
use Doctrine\DBAL\Cache\ArrayStatement;
use Doctrine\DBAL\Cache\CacheException;
use Doctrine\DBAL\Driver\PingableConnection;
use Throwable;
/**
* A wrapper around a Doctrine\DBAL\Driver\Connection that adds features like
......@@ -773,7 +774,7 @@ class Connection implements DriverConnection
{
try {
$stmt = new Statement($statement, $this);
} catch (\Exception $ex) {
} catch (Exception $ex) {
throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $statement);
}
......@@ -824,7 +825,7 @@ class Connection implements DriverConnection
} else {
$stmt = $this->_conn->query($query);
}
} catch (\Exception $ex) {
} catch (Exception $ex) {
throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $query, $this->resolveParams($params, $types));
}
......@@ -933,7 +934,7 @@ class Connection implements DriverConnection
$statement = call_user_func_array(array($this->_conn, 'query'), $args);
break;
}
} catch (\Exception $ex) {
} catch (Exception $ex) {
throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $args[0]);
}
......@@ -984,7 +985,7 @@ class Connection implements DriverConnection
} else {
$result = $this->_conn->exec($query);
}
} catch (\Exception $ex) {
} catch (Exception $ex) {
throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $query, $this->resolveParams($params, $types));
}
......@@ -1015,7 +1016,7 @@ class Connection implements DriverConnection
try {
$result = $this->_conn->exec($statement);
} catch (\Exception $ex) {
} catch (Exception $ex) {
throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $statement);
}
......@@ -1103,6 +1104,9 @@ class Connection implements DriverConnection
} catch (Exception $e) {
$this->rollBack();
throw $e;
} catch (Throwable $e) {
$this->rollBack();
throw $e;
}
}
......
......@@ -196,11 +196,30 @@ class ConnectionTest extends \Doctrine\Tests\DbalFunctionalTestCase
$conn->executeQuery($conn->getDatabasePlatform()->getDummySelectSQL());
throw new \RuntimeException("Ooops!");
});
$this->fail('Expected exception');
} catch (\RuntimeException $expected) {
$this->assertEquals(0, $this->_conn->getTransactionNestingLevel());
}
}
public function testTransactionalWithThrowable()
{
if (version_compare(PHP_VERSION, '7.0', '<')) {
$this->markTestSkipped('Only for PHP 7.0 and above.');
}
try {
$this->_conn->transactional(function($conn) {
/* @var $conn \Doctrine\DBAL\Connection */
$conn->executeQuery($conn->getDatabasePlatform()->getDummySelectSQL());
throw new \Error("Ooops!");
});
$this->fail('Expected exception');
} catch (\Error $expected) {
$this->assertEquals(0, $this->_conn->getTransactionNestingLevel());
}
}
public function testTransactional()
{
$this->_conn->transactional(function($conn) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment