Disabled and reworked some tests

parent b3b0d311
...@@ -104,7 +104,11 @@ class PDOConnection extends PDO implements Connection, ServerInfoAwareConnection ...@@ -104,7 +104,11 @@ class PDOConnection extends PDO implements Connection, ServerInfoAwareConnection
*/ */
public function lastInsertId($name = null) 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 @@ ...@@ -3,6 +3,7 @@
namespace Doctrine\Tests\DBAL\Functional; namespace Doctrine\Tests\DBAL\Functional;
use Doctrine\DBAL\Driver\OCI8\Driver as OCI8Driver; use Doctrine\DBAL\Driver\OCI8\Driver as OCI8Driver;
use Doctrine\DBAL\Driver\PDOOracle\Driver as PDOOracleDriver;
use Doctrine\DBAL\FetchMode; use Doctrine\DBAL\FetchMode;
use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Table;
...@@ -21,6 +22,12 @@ class BlobTest extends DbalFunctionalTestCase ...@@ -21,6 +22,12 @@ class BlobTest extends DbalFunctionalTestCase
{ {
parent::setUp(); 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 = new Table('blob_table');
$table->addColumn('id', 'integer'); $table->addColumn('id', 'integer');
$table->addColumn('clobfield', 'text'); $table->addColumn('clobfield', 'text');
......
...@@ -5,6 +5,9 @@ namespace Doctrine\Tests\DBAL\Functional; ...@@ -5,6 +5,9 @@ namespace Doctrine\Tests\DBAL\Functional;
use DateTime; use DateTime;
use Doctrine\DBAL\Connection; use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Driver\Mysqli\Driver as MySQLiDriver; 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\Driver\SQLSrv\Driver as SQLSrvDriver;
use Doctrine\DBAL\FetchMode; use Doctrine\DBAL\FetchMode;
use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\ParameterType;
...@@ -14,6 +17,7 @@ use Doctrine\DBAL\Schema\Table; ...@@ -14,6 +17,7 @@ use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Statement; use Doctrine\DBAL\Statement;
use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Types\Type;
use Doctrine\Tests\DbalFunctionalTestCase; use Doctrine\Tests\DbalFunctionalTestCase;
use PDO;
use const CASE_LOWER; use const CASE_LOWER;
use const PHP_EOL; use const PHP_EOL;
use function array_change_key_case; use function array_change_key_case;
...@@ -749,7 +753,7 @@ class DataAccessTest extends DbalFunctionalTestCase ...@@ -749,7 +753,7 @@ class DataAccessTest extends DbalFunctionalTestCase
*/ */
public function testFetchAllSupportFetchClass() public function testFetchAllSupportFetchClass()
{ {
$this->skipOci8AndMysqli(); $this->beforeFetchClassTest();
$this->setupFixture(); $this->setupFixture();
$sql = 'SELECT test_int, test_string, test_datetime FROM fetch_table'; $sql = 'SELECT test_int, test_string, test_datetime FROM fetch_table';
...@@ -791,7 +795,7 @@ class DataAccessTest extends DbalFunctionalTestCase ...@@ -791,7 +795,7 @@ class DataAccessTest extends DbalFunctionalTestCase
*/ */
public function testSetFetchModeClassFetchAll() public function testSetFetchModeClassFetchAll()
{ {
$this->skipOci8AndMysqli(); $this->beforeFetchClassTest();
$this->setupFixture(); $this->setupFixture();
$sql = 'SELECT * FROM fetch_table'; $sql = 'SELECT * FROM fetch_table';
...@@ -813,7 +817,7 @@ class DataAccessTest extends DbalFunctionalTestCase ...@@ -813,7 +817,7 @@ class DataAccessTest extends DbalFunctionalTestCase
*/ */
public function testSetFetchModeClassFetch() public function testSetFetchModeClassFetch()
{ {
$this->skipOci8AndMysqli(); $this->beforeFetchClassTest();
$this->setupFixture(); $this->setupFixture();
$sql = 'SELECT * FROM fetch_table'; $sql = 'SELECT * FROM fetch_table';
...@@ -908,16 +912,25 @@ class DataAccessTest extends DbalFunctionalTestCase ...@@ -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'); $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; 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 ...@@ -24,7 +24,7 @@ class PDOStatementTest extends DbalFunctionalTestCase
$table = new Table('stmt_test'); $table = new Table('stmt_test');
$table->addColumn('id', 'integer'); $table->addColumn('id', 'integer');
$table->addColumn('name', 'text'); $table->addColumn('name', 'string');
$this->connection->getSchemaManager()->dropAndCreateTable($table); $this->connection->getSchemaManager()->dropAndCreateTable($table);
} }
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace Doctrine\Tests\DBAL\Functional; namespace Doctrine\Tests\DBAL\Functional;
use Doctrine\DBAL\Driver\PDOOracle\Driver as PDOOracleDriver;
use Doctrine\DBAL\Driver\Statement; use Doctrine\DBAL\Driver\Statement;
use Doctrine\DBAL\FetchMode; use Doctrine\DBAL\FetchMode;
use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\ParameterType;
...@@ -25,6 +26,10 @@ class StatementTest extends DbalFunctionalTestCase ...@@ -25,6 +26,10 @@ class StatementTest extends DbalFunctionalTestCase
public function testStatementIsReusableAfterClosingCursor() 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' => 1]);
$this->connection->insert('stmt_test', ['id' => 2]); $this->connection->insert('stmt_test', ['id' => 2]);
...@@ -46,6 +51,10 @@ class StatementTest extends DbalFunctionalTestCase ...@@ -46,6 +51,10 @@ class StatementTest extends DbalFunctionalTestCase
public function testReuseStatementWithLongerResults() 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(); $sm = $this->connection->getSchemaManager();
$table = new Table('stmt_longer_results'); $table = new Table('stmt_longer_results');
$table->addColumn('param', 'string'); $table->addColumn('param', 'string');
...@@ -79,6 +88,12 @@ class StatementTest extends DbalFunctionalTestCase ...@@ -79,6 +88,12 @@ class StatementTest extends DbalFunctionalTestCase
public function testFetchLongBlob() 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, // 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 // but is still not enough to store a LONGBLOB of the max possible size
$this->iniSet('memory_limit', '4G'); $this->iniSet('memory_limit', '4G');
...@@ -138,6 +153,10 @@ EOF ...@@ -138,6 +153,10 @@ EOF
public function testReuseStatementAfterClosingCursor() 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' => 1]);
$this->connection->insert('stmt_test', ['id' => 2]); $this->connection->insert('stmt_test', ['id' => 2]);
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace Doctrine\Tests\DBAL\Functional; namespace Doctrine\Tests\DBAL\Functional;
use DateTime; use DateTime;
use Doctrine\DBAL\Driver\PDOOracle\Driver as PDOOracleDriver;
use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Types\Type;
use Doctrine\Tests\DbalFunctionalTestCase; use Doctrine\Tests\DbalFunctionalTestCase;
...@@ -77,6 +78,12 @@ class TypeConversionTest extends DbalFunctionalTestCase ...@@ -77,6 +78,12 @@ class TypeConversionTest extends DbalFunctionalTestCase
*/ */
public function testIdempotentDataConversion($type, $originalValue, $expectedPhpType) 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; $columnName = 'test_' . $type;
$typeInstance = Type::getType($type); $typeInstance = Type::getType($type);
$insertionValue = $typeInstance->convertToDatabaseValue($originalValue, $this->connection->getDatabasePlatform()); $insertionValue = $typeInstance->convertToDatabaseValue($originalValue, $this->connection->getDatabasePlatform());
......
...@@ -5,6 +5,7 @@ declare(strict_types=1); ...@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Doctrine\Tests\DBAL\Functional\Types; namespace Doctrine\Tests\DBAL\Functional\Types;
use Doctrine\DBAL\Driver\IBMDB2\DB2Driver; use Doctrine\DBAL\Driver\IBMDB2\DB2Driver;
use Doctrine\DBAL\Driver\PDOOracle\Driver as PDOOracleDriver;
use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Table;
use Doctrine\Tests\DbalFunctionalTestCase; use Doctrine\Tests\DbalFunctionalTestCase;
...@@ -19,6 +20,10 @@ class BinaryTest extends DbalFunctionalTestCase ...@@ -19,6 +20,10 @@ class BinaryTest extends DbalFunctionalTestCase
{ {
parent::setUp(); parent::setUp();
if ($this->connection->getDriver() instanceof PDOOracleDriver) {
$this->markTestSkipped('PDO_OCI doesn\'t support binding binary values');
}
$table = new Table('binary_table'); $table = new Table('binary_table');
$table->addColumn('id', 'binary', [ $table->addColumn('id', 'binary', [
'length' => 16, 'length' => 16,
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace Doctrine\Tests\DBAL\Functional; namespace Doctrine\Tests\DBAL\Functional;
use DateTime; use DateTime;
use Doctrine\DBAL\Driver\DriverException;
use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Schema\Sequence; use Doctrine\DBAL\Schema\Sequence;
use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Table;
...@@ -149,7 +150,7 @@ class WriteTest extends DbalFunctionalTestCase ...@@ -149,7 +150,7 @@ class WriteTest extends DbalFunctionalTestCase
} }
self::assertEquals(1, $this->connection->insert('write_table', ['test_int' => 2, 'test_string' => 'bar'])); 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::assertNotNull($num, 'LastInsertId() should not be null.');
self::assertGreaterThan(0, $num, 'LastInsertId() should be non-negative number.'); self::assertGreaterThan(0, $num, 'LastInsertId() should be non-negative number.');
...@@ -175,7 +176,7 @@ class WriteTest extends DbalFunctionalTestCase ...@@ -175,7 +176,7 @@ class WriteTest extends DbalFunctionalTestCase
$stmt = $this->connection->query($this->connection->getDatabasePlatform()->getSequenceNextValSQL('write_table_id_seq')); $stmt = $this->connection->query($this->connection->getDatabasePlatform()->getSequenceNextValSQL('write_table_id_seq'));
$nextSequenceVal = $stmt->fetchColumn(); $nextSequenceVal = $stmt->fetchColumn();
$lastInsertId = $this->connection->lastInsertId('write_table_id_seq'); $lastInsertId = $this->lastInsertId('write_table_id_seq');
self::assertGreaterThan(0, $lastInsertId); self::assertGreaterThan(0, $lastInsertId);
self::assertEquals($nextSequenceVal, $lastInsertId); self::assertEquals($nextSequenceVal, $lastInsertId);
...@@ -187,7 +188,7 @@ class WriteTest extends DbalFunctionalTestCase ...@@ -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."); $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 ...@@ -285,11 +286,11 @@ class WriteTest extends DbalFunctionalTestCase
$this->connection->exec($sql); $this->connection->exec($sql);
$firstId = $this->connection->lastInsertId($seqName); $firstId = $this->lastInsertId($seqName);
$this->connection->exec($sql); $this->connection->exec($sql);
$secondId = $this->connection->lastInsertId($seqName); $secondId = $this->lastInsertId($seqName);
self::assertGreaterThan($firstId, $secondId); self::assertGreaterThan($firstId, $secondId);
} }
...@@ -334,4 +335,25 @@ class WriteTest extends DbalFunctionalTestCase ...@@ -334,4 +335,25 @@ class WriteTest extends DbalFunctionalTestCase
self::assertCount(0, $data); 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