[DBAL-2958] Added conversion of DBAL constants to PDO ones for PDOStatement

parent ebbc3b57
...@@ -4,14 +4,12 @@ namespace Doctrine\DBAL\Driver; ...@@ -4,14 +4,12 @@ namespace Doctrine\DBAL\Driver;
use Doctrine\DBAL\FetchMode; use Doctrine\DBAL\FetchMode;
use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\ParameterType;
use InvalidArgumentException;
use PDO; use PDO;
use const E_USER_DEPRECATED;
use function array_slice; use function array_slice;
use function assert; use function assert;
use function func_get_args; use function func_get_args;
use function is_array; use function is_array;
use function sprintf;
use function trigger_error;
/** /**
* The PDO implementation of the Statement interface. * The PDO implementation of the Statement interface.
...@@ -193,13 +191,7 @@ class PDOStatement extends \PDOStatement implements Statement ...@@ -193,13 +191,7 @@ class PDOStatement extends \PDOStatement implements Statement
private function convertParamType(int $type) : int private function convertParamType(int $type) : int
{ {
if (! isset(self::PARAM_TYPE_MAP[$type])) { if (! isset(self::PARAM_TYPE_MAP[$type])) {
// TODO: next major: throw an exception throw new InvalidArgumentException('Invalid parameter type: ' . $type);
@trigger_error(sprintf(
'Using a PDO parameter type (%d given) is deprecated and will cause an error in Doctrine DBAL 3.0',
$type
), E_USER_DEPRECATED);
return $type;
} }
return self::PARAM_TYPE_MAP[$type]; return self::PARAM_TYPE_MAP[$type];
...@@ -213,14 +205,7 @@ class PDOStatement extends \PDOStatement implements Statement ...@@ -213,14 +205,7 @@ class PDOStatement extends \PDOStatement implements Statement
private function convertFetchMode(int $fetchMode) : int private function convertFetchMode(int $fetchMode) : int
{ {
if (! isset(self::FETCH_MODE_MAP[$fetchMode])) { if (! isset(self::FETCH_MODE_MAP[$fetchMode])) {
// TODO: next major: throw an exception throw new InvalidArgumentException('Invalid fetch mode: ' . $fetchMode);
@trigger_error(sprintf(
'Using a PDO fetch mode or their combination (%d given)' .
' is deprecated and will cause an error in Doctrine DBAL 3.0',
$fetchMode
), E_USER_DEPRECATED);
return $fetchMode;
} }
return self::FETCH_MODE_MAP[$fetchMode]; return self::FETCH_MODE_MAP[$fetchMode];
......
<?php
namespace Doctrine\Tests\DBAL\Functional;
use Doctrine\DBAL\Driver\PDOConnection;
use Doctrine\DBAL\Schema\Table;
use Doctrine\Tests\DbalFunctionalTestCase;
use PDO;
use function extension_loaded;
class PDOStatementTest extends DbalFunctionalTestCase
{
protected function setUp() : void
{
if (! extension_loaded('pdo')) {
$this->markTestSkipped('PDO is not installed');
}
parent::setUp();
if (! $this->connection->getWrappedConnection() instanceof PDOConnection) {
$this->markTestSkipped('PDO-only test');
}
$table = new Table('stmt_test');
$table->addColumn('id', 'integer');
$table->addColumn('name', 'string');
$this->connection->getSchemaManager()->dropAndCreateTable($table);
}
/**
* @group legacy
* @expectedDeprecation Using a PDO fetch mode or their combination (%d given) is deprecated and will cause an error in Doctrine DBAL 3.0
*/
public function testPDOSpecificModeIsAccepted() : void
{
$this->connection->insert('stmt_test', [
'id' => 1,
'name' => 'Alice',
]);
$this->connection->insert('stmt_test', [
'id' => 2,
'name' => 'Bob',
]);
$data = $this->connection->query('SELECT id, name FROM stmt_test ORDER BY id')
->fetchAll(PDO::FETCH_KEY_PAIR);
self::assertSame([
1 => 'Alice',
2 => 'Bob',
], $data);
}
}
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