Disabled and reworked some tests

parent b3b0d311
......@@ -104,7 +104,11 @@ class PDOConnection extends PDO implements Connection, ServerInfoAwareConnection
*/
public function lastInsertId($name = null)
{
return parent::lastInsertId($name);
try {
return parent::lastInsertId($name);
} catch (\PDOException $exception) {
throw new PDOException($exception);
}
}
/**
......
......@@ -3,6 +3,7 @@
namespace Doctrine\Tests\DBAL\Functional;
use Doctrine\DBAL\Driver\OCI8\Driver as OCI8Driver;
use Doctrine\DBAL\Driver\PDOOracle\Driver as PDOOracleDriver;
use Doctrine\DBAL\FetchMode;
use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Schema\Table;
......@@ -21,6 +22,12 @@ class BlobTest extends DbalFunctionalTestCase
{
parent::setUp();
if ($this->connection->getDriver() instanceof PDOOracleDriver) {
// inserting BLOBs as streams on Oracle requires Oracle-specific SQL syntax which is currently not supported
// see http://php.net/manual/en/pdo.lobs.php#example-1035
$this->markTestSkipped('DBAL doesn\'t support storing LOBs represented as streams using PDO_OCI');
}
$table = new Table('blob_table');
$table->addColumn('id', 'integer');
$table->addColumn('clobfield', 'text');
......
......@@ -5,6 +5,9 @@ namespace Doctrine\Tests\DBAL\Functional;
use DateTime;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Driver\Mysqli\Driver as MySQLiDriver;
use Doctrine\DBAL\Driver\OCI8\Driver as Oci8Driver;
use Doctrine\DBAL\Driver\PDOConnection;
use Doctrine\DBAL\Driver\PDOOracle\Driver as PDOOracleDriver;
use Doctrine\DBAL\Driver\SQLSrv\Driver as SQLSrvDriver;
use Doctrine\DBAL\FetchMode;
use Doctrine\DBAL\ParameterType;
......@@ -14,6 +17,7 @@ use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Statement;
use Doctrine\DBAL\Types\Type;
use Doctrine\Tests\DbalFunctionalTestCase;
use PDO;
use const CASE_LOWER;
use const PHP_EOL;
use function array_change_key_case;
......@@ -749,7 +753,7 @@ class DataAccessTest extends DbalFunctionalTestCase
*/
public function testFetchAllSupportFetchClass()
{
$this->skipOci8AndMysqli();
$this->beforeFetchClassTest();
$this->setupFixture();
$sql = 'SELECT test_int, test_string, test_datetime FROM fetch_table';
......@@ -791,7 +795,7 @@ class DataAccessTest extends DbalFunctionalTestCase
*/
public function testSetFetchModeClassFetchAll()
{
$this->skipOci8AndMysqli();
$this->beforeFetchClassTest();
$this->setupFixture();
$sql = 'SELECT * FROM fetch_table';
......@@ -813,7 +817,7 @@ class DataAccessTest extends DbalFunctionalTestCase
*/
public function testSetFetchModeClassFetch()
{
$this->skipOci8AndMysqli();
$this->beforeFetchClassTest();
$this->setupFixture();
$sql = 'SELECT * FROM fetch_table';
......@@ -908,16 +912,25 @@ class DataAccessTest extends DbalFunctionalTestCase
]);
}
private function skipOci8AndMysqli()
private function beforeFetchClassTest()
{
if (isset($GLOBALS['db_type']) && $GLOBALS['db_type'] === 'oci8') {
$driver = $this->connection->getDriver();
if ($driver instanceof Oci8Driver) {
$this->markTestSkipped('Not supported by OCI8');
}
if ($this->connection->getDriver()->getName() !== 'mysqli') {
if ($driver instanceof MySQLiDriver) {
$this->markTestSkipped('Mysqli driver dont support this feature.');
}
if (! $driver instanceof PDOOracleDriver) {
return;
}
$this->markTestSkipped('Mysqli driver dont support this feature.');
/** @var PDOConnection $connection */
$connection = $this->connection->getWrappedConnection();
$connection->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
}
}
......
......@@ -24,7 +24,7 @@ class PDOStatementTest extends DbalFunctionalTestCase
$table = new Table('stmt_test');
$table->addColumn('id', 'integer');
$table->addColumn('name', 'text');
$table->addColumn('name', 'string');
$this->connection->getSchemaManager()->dropAndCreateTable($table);
}
......
......@@ -2,6 +2,7 @@
namespace Doctrine\Tests\DBAL\Functional;
use Doctrine\DBAL\Driver\PDOOracle\Driver as PDOOracleDriver;
use Doctrine\DBAL\Driver\Statement;
use Doctrine\DBAL\FetchMode;
use Doctrine\DBAL\ParameterType;
......@@ -25,6 +26,10 @@ class StatementTest extends DbalFunctionalTestCase
public function testStatementIsReusableAfterClosingCursor()
{
if ($this->connection->getDriver() instanceof PDOOracleDriver) {
$this->markTestIncomplete('See https://bugs.php.net/bug.php?id=77181');
}
$this->connection->insert('stmt_test', ['id' => 1]);
$this->connection->insert('stmt_test', ['id' => 2]);
......@@ -46,6 +51,10 @@ class StatementTest extends DbalFunctionalTestCase
public function testReuseStatementWithLongerResults()
{
if ($this->connection->getDriver() instanceof PDOOracleDriver) {
$this->markTestIncomplete('PDO_OCI doesn\'t support fetching blobs via PDOStatement::fetchAll()');
}
$sm = $this->connection->getSchemaManager();
$table = new Table('stmt_longer_results');
$table->addColumn('param', 'string');
......@@ -79,6 +88,12 @@ class StatementTest extends DbalFunctionalTestCase
public function testFetchLongBlob()
{
if ($this->connection->getDriver() instanceof PDOOracleDriver) {
// inserting BLOBs as streams on Oracle requires Oracle-specific SQL syntax which is currently not supported
// see http://php.net/manual/en/pdo.lobs.php#example-1035
$this->markTestSkipped('DBAL doesn\'t support storing LOBs represented as streams using PDO_OCI');
}
// make sure memory limit is large enough to not cause false positives,
// but is still not enough to store a LONGBLOB of the max possible size
$this->iniSet('memory_limit', '4G');
......@@ -138,6 +153,10 @@ EOF
public function testReuseStatementAfterClosingCursor()
{
if ($this->connection->getDriver() instanceof PDOOracleDriver) {
$this->markTestIncomplete('See https://bugs.php.net/bug.php?id=77181');
}
$this->connection->insert('stmt_test', ['id' => 1]);
$this->connection->insert('stmt_test', ['id' => 2]);
......
......@@ -3,6 +3,7 @@
namespace Doctrine\Tests\DBAL\Functional;
use DateTime;
use Doctrine\DBAL\Driver\PDOOracle\Driver as PDOOracleDriver;
use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Types\Type;
use Doctrine\Tests\DbalFunctionalTestCase;
......@@ -77,6 +78,12 @@ class TypeConversionTest extends DbalFunctionalTestCase
*/
public function testIdempotentDataConversion($type, $originalValue, $expectedPhpType)
{
if ($type === 'text' && $this->connection->getDriver() instanceof PDOOracleDriver) {
// inserting BLOBs as streams on Oracle requires Oracle-specific SQL syntax which is currently not supported
// see http://php.net/manual/en/pdo.lobs.php#example-1035
$this->markTestSkipped('DBAL doesn\'t support storing LOBs represented as streams using PDO_OCI');
}
$columnName = 'test_' . $type;
$typeInstance = Type::getType($type);
$insertionValue = $typeInstance->convertToDatabaseValue($originalValue, $this->connection->getDatabasePlatform());
......
......@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Doctrine\Tests\DBAL\Functional\Types;
use Doctrine\DBAL\Driver\IBMDB2\DB2Driver;
use Doctrine\DBAL\Driver\PDOOracle\Driver as PDOOracleDriver;
use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Schema\Table;
use Doctrine\Tests\DbalFunctionalTestCase;
......@@ -19,6 +20,10 @@ class BinaryTest extends DbalFunctionalTestCase
{
parent::setUp();
if ($this->connection->getDriver() instanceof PDOOracleDriver) {
$this->markTestSkipped('PDO_OCI doesn\'t support binding binary values');
}
$table = new Table('binary_table');
$table->addColumn('id', 'binary', [
'length' => 16,
......
......@@ -3,6 +3,7 @@
namespace Doctrine\Tests\DBAL\Functional;
use DateTime;
use Doctrine\DBAL\Driver\DriverException;
use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Schema\Sequence;
use Doctrine\DBAL\Schema\Table;
......@@ -149,7 +150,7 @@ class WriteTest extends DbalFunctionalTestCase
}
self::assertEquals(1, $this->connection->insert('write_table', ['test_int' => 2, 'test_string' => 'bar']));
$num = $this->connection->lastInsertId();
$num = $this->lastInsertId();
self::assertNotNull($num, 'LastInsertId() should not be null.');
self::assertGreaterThan(0, $num, 'LastInsertId() should be non-negative number.');
......@@ -175,7 +176,7 @@ class WriteTest extends DbalFunctionalTestCase
$stmt = $this->connection->query($this->connection->getDatabasePlatform()->getSequenceNextValSQL('write_table_id_seq'));
$nextSequenceVal = $stmt->fetchColumn();
$lastInsertId = $this->connection->lastInsertId('write_table_id_seq');
$lastInsertId = $this->lastInsertId('write_table_id_seq');
self::assertGreaterThan(0, $lastInsertId);
self::assertEquals($nextSequenceVal, $lastInsertId);
......@@ -187,7 +188,7 @@ class WriteTest extends DbalFunctionalTestCase
$this->markTestSkipped("Test only works consistently on platforms that support sequences and don't support identity columns.");
}
self::assertFalse($this->connection->lastInsertId(null));
self::assertFalse($this->lastInsertId());
}
/**
......@@ -285,11 +286,11 @@ class WriteTest extends DbalFunctionalTestCase
$this->connection->exec($sql);
$firstId = $this->connection->lastInsertId($seqName);
$firstId = $this->lastInsertId($seqName);
$this->connection->exec($sql);
$secondId = $this->connection->lastInsertId($seqName);
$secondId = $this->lastInsertId($seqName);
self::assertGreaterThan($firstId, $secondId);
}
......@@ -334,4 +335,25 @@ class WriteTest extends DbalFunctionalTestCase
self::assertCount(0, $data);
}
/**
* Returns the ID of the last inserted row or skips the test if the currently used driver
* doesn't support this feature
*
* @return string
*
* @throws DriverException
*/
private function lastInsertId(?string $name = null)
{
try {
return $this->connection->lastInsertId($name);
} catch (DriverException $e) {
if ($e->getCode() === 'IM001') {
$this->markTestSkipped($e->getMessage());
}
throw $e;
}
}
}
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