Skip to content

Commit

Permalink
Merge pull request #5550 from morozov/deprecate-null-parameter-type
Browse files Browse the repository at this point in the history
Deprecate using NULL as prepared statement parameter type
  • Loading branch information
morozov committed Jul 30, 2022
2 parents d6aaae9 + 7744002 commit c37d1fd
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 10 deletions.
4 changes: 4 additions & 0 deletions UPGRADE.md
Expand Up @@ -8,6 +8,10 @@ awareness about deprecated code.

# Upgrade to 3.4

## Deprecated using NULL as prepared statement parameter type.

Omit the type or use `Parameter::STRING` instead.

## Deprecated passing asset names as assets in `AbstractPlatform` and `AbstractSchemaManager` methods.

Passing assets to the following `AbstractPlatform` methods and parameters has been deprecated:
Expand Down
19 changes: 19 additions & 0 deletions src/Connection.php
Expand Up @@ -28,6 +28,7 @@
use Throwable;
use Traversable;

use function array_key_exists;
use function assert;
use function count;
use function get_class;
Expand Down Expand Up @@ -1677,6 +1678,15 @@ private function _bindTypedValues(DriverStatement $stmt, array $params, array $t
[$value, $bindingType] = $this->getBindingInfo($value, $type);
$stmt->bindValue($bindIndex, $value, $bindingType);
} else {
if (array_key_exists($key, $types)) {
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/5550',
'Using NULL as prepared statement parameter type is deprecated.'
. 'Omit or use Parameter::STRING instead'
);
}

$stmt->bindValue($bindIndex, $value);
}

Expand All @@ -1690,6 +1700,15 @@ private function _bindTypedValues(DriverStatement $stmt, array $params, array $t
[$value, $bindingType] = $this->getBindingInfo($value, $type);
$stmt->bindValue($name, $value, $bindingType);
} else {
if (array_key_exists($name, $types)) {
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/5550',
'Using NULL as prepared statement parameter type is deprecated.'
. 'Omit or use Parameter::STRING instead'
);
}

$stmt->bindValue($name, $value);
}
}
Expand Down
13 changes: 10 additions & 3 deletions src/Query/QueryBuilder.php
Expand Up @@ -400,10 +400,17 @@ public function getSQL()
*
* @return $this This QueryBuilder instance.
*/
public function setParameter($key, $value, $type = null)
public function setParameter($key, $value, $type = ParameterType::STRING)
{
if ($type !== null) {
$this->paramTypes[$key] = $type;
} else {
Deprecation::trigger(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/5550',
'Using NULL as prepared statement parameter type is deprecated.'
. 'Omit or use Parameter::STRING instead'
);
}

$this->params[$key] = $value;
Expand Down Expand Up @@ -476,11 +483,11 @@ public function getParameterTypes()
*
* @param int|string $key The key of the bound parameter type
*
* @return int|string|Type|null The value of the bound parameter type
* @return int|string|Type The value of the bound parameter type
*/
public function getParameterType($key)
{
return $this->paramTypes[$key] ?? null;
return $this->paramTypes[$key] ?? ParameterType::STRING;
}

/**
Expand Down
14 changes: 7 additions & 7 deletions tests/Query/QueryBuilderTest.php
Expand Up @@ -882,16 +882,16 @@ public function testGetParameterType(): void

$qb->select('*')->from('users');

self::assertNull($qb->getParameterType('name'));
self::assertSame(ParameterType::STRING, $qb->getParameterType('name'));

$qb->where('name = :name');
$qb->setParameter('name', 'foo');

self::assertNull($qb->getParameterType('name'));
self::assertSame(ParameterType::STRING, $qb->getParameterType('name'));

$qb->setParameter('name', 'foo', ParameterType::STRING);
$qb->setParameter('name', 'foo', ParameterType::INTEGER);

self::assertSame(ParameterType::STRING, $qb->getParameterType('name'));
self::assertSame(ParameterType::INTEGER, $qb->getParameterType('name'));
}

public function testGetParameterTypes(): void
Expand All @@ -905,9 +905,9 @@ public function testGetParameterTypes(): void
$qb->where('name = :name');
$qb->setParameter('name', 'foo');

self::assertSame([], $qb->getParameterTypes());

$qb->setParameter('name', 'foo', ParameterType::STRING);
self::assertSame([
'name' => ParameterType::STRING,
], $qb->getParameterTypes());

$qb->where('is_active = :isActive');
$qb->setParameter('isActive', true, ParameterType::BOOLEAN);
Expand Down

0 comments on commit c37d1fd

Please sign in to comment.