Skip to content

Commit

Permalink
Remove support for using NULL as prepared statement parameter type
Browse files Browse the repository at this point in the history
  • Loading branch information
morozov committed Aug 1, 2022
1 parent 2dd0f52 commit 4288aca
Show file tree
Hide file tree
Showing 9 changed files with 109 additions and 138 deletions.
5 changes: 5 additions & 0 deletions UPGRADE.md
Expand Up @@ -8,6 +8,11 @@ awareness about deprecated code.

# Upgrade to 4.0

## BC BREAK: removed support using NULL as prepared statement parameter type.

The value of parameter type used in the wrapper layer (e.g. in `Connection::executeQuery()`
or `Statement::bindValue()`) can no longer be `NULL`.

## BC BREAK: converted enum-like classes to enums

The following classes have been converted to enums:
Expand Down
5 changes: 0 additions & 5 deletions phpcs.xml.dist
Expand Up @@ -124,9 +124,4 @@
<rule ref="SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly.ReferenceViaFallbackGlobalName">
<exclude-pattern>src/ParameterType.php</exclude-pattern>
</rule>

<!-- The union types representing prepared statement parameter types are too complex -->
<rule ref="Generic.Files.LineLength.TooLong">
<exclude-pattern>src/Cache/QueryCacheProfile.php</exclude-pattern>
</rule>
</ruleset>
6 changes: 3 additions & 3 deletions src/Cache/QueryCacheProfile.php
Expand Up @@ -52,9 +52,9 @@ public function getCacheKey(): string
/**
* Generates the real cache key from query, params, types and connection parameters.
*
* @param list<mixed>|array<string, mixed> $params
* @param array<int, int|string|ParameterType|Type|null>|array<string, int|string|ParameterType|Type|null> $types
* @param array<string, mixed> $connectionParams
* @param list<mixed>|array<string, mixed> $params
* @param array<int, int|string|ParameterType|Type>|array<string, int|string|ParameterType|Type> $types
* @param array<string, mixed> $connectionParams
*
* @return string[]
*/
Expand Down
125 changes: 53 additions & 72 deletions src/Connection.php

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions src/ExpandArrayParameters.php
Expand Up @@ -27,12 +27,12 @@ final class ExpandArrayParameters implements Visitor
/** @var list<mixed> */
private array $convertedParameters = [];

/** @var array<int,string|ParameterType|Type|null> */
/** @var array<int,string|ParameterType|Type> */
private array $convertedTypes = [];

/**
* @param array<int, mixed>|array<string, mixed> $parameters
* @param array<int,int|string|ParameterType|Type|null>|array<string,int|string|ParameterType|Type|null> $types
* @param array<int, mixed>|array<string, mixed> $parameters
* @param array<int,int|string|ParameterType|Type>|array<string,int|string|ParameterType|Type> $types
*/
public function __construct(private readonly array $parameters, private readonly array $types)
{
Expand Down Expand Up @@ -115,7 +115,7 @@ private function acceptParameter(int|string $key, mixed $value): void
}

/**
* @return array<int,string|ParameterType|Type|null>
* @return array<int,string|ParameterType|Type>
*/
public function getTypes(): array
{
Expand All @@ -125,7 +125,7 @@ public function getTypes(): array
/**
* @param list<mixed> $values
*/
private function appendTypedParameter(array $values, string|ParameterType|Type|null $type): void
private function appendTypedParameter(array $values, string|ParameterType|Type $type): void
{
$this->convertedSQL[] = implode(', ', array_fill(0, count($values), '?'));

Expand Down
6 changes: 3 additions & 3 deletions src/Query.php
Expand Up @@ -14,8 +14,8 @@
final class Query
{
/**
* @param array<mixed> $params
* @param array<int|string|ParameterType|Type|null> $types
* @param array<mixed> $params
* @param array<int|string|ParameterType|Type> $types
*
* @psalm-suppress ImpurePropertyAssignment
*/
Expand All @@ -40,7 +40,7 @@ public function getParams(): array
}

/**
* @return array<int|string|ParameterType|Type|null>
* @return array<int|string|ParameterType|Type>
*/
public function getTypes(): array
{
Expand Down
34 changes: 12 additions & 22 deletions src/Query/QueryBuilder.php
Expand Up @@ -52,7 +52,7 @@ class QueryBuilder
/**
* The parameter type map of this query.
*
* @var array<int, int|string|ParameterType|Type|null>|array<string, int|string|ParameterType|Type|null>
* @var array<int, int|string|ParameterType|Type>|array<string, int|string|ParameterType|Type>
*/
private array $types = [];

Expand Down Expand Up @@ -342,29 +342,19 @@ public function getSQL(): string
* ->setParameter('user_id', 1);
* </code>
*
* @param int|string $key Parameter position or name
* @param mixed $value Parameter value
* @param string|ParameterType|Type|null $type Parameter type
* @param int|string $key Parameter position or name
* @param mixed $value Parameter value
* @param string|ParameterType|Type $type Parameter type
*
* @return $this This QueryBuilder instance.
*/
public function setParameter(
int|string $key,
mixed $value,
string|ParameterType|Type|null $type = ParameterType::STRING
string|ParameterType|Type $type = ParameterType::STRING
): self {
if ($type !== null) {
$this->types[$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;
$this->types[$key] = $type;

return $this;
}
Expand All @@ -383,8 +373,8 @@ public function setParameter(
* ));
* </code>
*
* @param list<mixed>|array<string, mixed> $params
* @param array<int, int|string|ParameterType|Type|null>|array<string, int|string|ParameterType|Type|null> $types
* @param list<mixed>|array<string, mixed> $params
* @param array<int, int|string|ParameterType|Type>|array<string, int|string|ParameterType|Type> $types
*
* @return $this This QueryBuilder instance.
*/
Expand Down Expand Up @@ -421,7 +411,7 @@ public function getParameter(string|int $key): mixed
/**
* Gets all defined query parameter types for the query being constructed indexed by parameter index or name.
*
* @return array<int, int|string|ParameterType|Type|null>|array<string, int|string|ParameterType|Type|null>
* @return array<int, int|string|ParameterType|Type>|array<string, int|string|ParameterType|Type>
*/
public function getParameterTypes(): array
{
Expand All @@ -435,7 +425,7 @@ public function getParameterTypes(): array
*
* @return int|string|ParameterType|Type The value of the bound parameter type
*/
public function getParameterType(int|string $key): int|string|ParameterType|Type|null
public function getParameterType(int|string $key): int|string|ParameterType|Type
{
return $this->types[$key] ?? ParameterType::STRING;
}
Expand Down Expand Up @@ -1320,7 +1310,7 @@ public function __toString(): string
*/
public function createNamedParameter(
mixed $value,
string|ParameterType|Type|null $type = ParameterType::STRING,
string|ParameterType|Type $type = ParameterType::STRING,
?string $placeHolder = null
): string {
if ($placeHolder === null) {
Expand Down Expand Up @@ -1352,7 +1342,7 @@ public function createNamedParameter(
*/
public function createPositionalParameter(
mixed $value,
string|ParameterType|Type|null $type = ParameterType::STRING
string|ParameterType|Type $type = ParameterType::STRING
): string {
$this->setParameter($this->boundCounter, $value, $type);
$this->boundCounter++;
Expand Down
18 changes: 9 additions & 9 deletions tests/Connection/ExpandArrayParametersTest.php
Expand Up @@ -318,10 +318,10 @@ public static function dataExpandListParameters(): iterable
}

/**
* @param array<int, mixed>|array<string, mixed> $params
* @param array<int, int|string|Type|null>|array<string, int|string|Type|null> $types
* @param list<mixed> $expectedParams
* @param array<int,Type|int|string|null> $expectedTypes
* @param array<int, mixed>|array<string, mixed> $params
* @param array<int, int|string|Type>|array<string, int|string|Type> $types
* @param list<mixed> $expectedParams
* @param array<int,Type|int|string> $expectedTypes
*
* @dataProvider dataExpandListParameters
*/
Expand Down Expand Up @@ -370,8 +370,8 @@ public static function missingNamedParameterProvider(): iterable
}

/**
* @param array<int, mixed>|array<string, mixed> $params
* @param array<int, int|string|Type|null>|array<string, int|string|Type|null> $types
* @param array<int, mixed>|array<string, mixed> $params
* @param array<int, int|string|Type>|array<string, int|string|Type> $types
*
* @dataProvider missingNamedParameterProvider
*/
Expand Down Expand Up @@ -412,10 +412,10 @@ public static function missingPositionalParameterProvider(): iterable
}

/**
* @param array<int, mixed>|array<string, mixed> $params
* @param array<int, int|string|Type|null>|array<string, int|string|Type|null> $types
* @param array<int, mixed>|array<string, mixed> $params
* @param array<int, int|string|Type>|array<string, int|string|Type> $types
*
* @return array{string, list<mixed>, array<int,string|ParameterType|Type|null>}
* @return array{string, list<mixed>, array<int,string|ParameterType|Type>}
*/
private function expandArrayParameters(string $sql, array $params, array $types): array
{
Expand Down
38 changes: 19 additions & 19 deletions tests/Query/QueryBuilderTest.php
Expand Up @@ -825,8 +825,8 @@ public function testJoinWithNonUniqueAliasThrowsException(): void
}

/**
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type|null>|array<string, int|string|Type|null> $parameterTypes
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type>|array<string, int|string|Type> $parameterTypes
*
* @dataProvider fetchProvider
*/
Expand Down Expand Up @@ -855,8 +855,8 @@ public function testFetchAssociative(
}

/**
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type|null>|array<string, int|string|Type|null> $parameterTypes
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type>|array<string, int|string|Type> $parameterTypes
*
* @dataProvider fetchProvider
*/
Expand Down Expand Up @@ -885,8 +885,8 @@ public function testFetchNumeric(
}

/**
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type|null>|array<string, int|string|Type|null> $parameterTypes
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type>|array<string, int|string|Type> $parameterTypes
*
* @dataProvider fetchProvider
*/
Expand Down Expand Up @@ -915,8 +915,8 @@ public function testFetchOne(
}

/**
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type|null>|array<string, int|string|Type|null> $parameterTypes
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type>|array<string, int|string|Type> $parameterTypes
*
* @dataProvider fetchProvider
*/
Expand Down Expand Up @@ -956,8 +956,8 @@ public function testFetchAllAssociative(
}

/**
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type|null>|array<string, int|string|Type|null> $parameterTypes
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type>|array<string, int|string|Type> $parameterTypes
*
* @dataProvider fetchProvider
*/
Expand Down Expand Up @@ -997,8 +997,8 @@ public function testFetchAllNumeric(
}

/**
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type|null>|array<string, int|string|Type|null> $parameterTypes
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type>|array<string, int|string|Type> $parameterTypes
*
* @dataProvider fetchProvider
*/
Expand Down Expand Up @@ -1038,8 +1038,8 @@ public function testFetchAllKeyValue(
}

/**
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type|null>|array<string, int|string|Type|null> $parameterTypes
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type>|array<string, int|string|Type> $parameterTypes
*
* @dataProvider fetchProvider
*/
Expand Down Expand Up @@ -1083,8 +1083,8 @@ public function testFetchAllAssociativeIndexed(
}

/**
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type|null>|array<string, int|string|Type|null> $parameterTypes
* @param list<mixed>|array<string, mixed> $parameters
* @param array<int, int|string|Type>|array<string, int|string|Type> $parameterTypes
*
* @dataProvider fetchProvider
*/
Expand Down Expand Up @@ -1131,7 +1131,7 @@ public function testFetchFirstColumn(
* string,
* string,
* list<mixed>|array<string, mixed>,
* array<int, int|string|Type|null>|array<string, int|string|Type|null>,
* array<int, int|string|Type>|array<string, int|string|Type>,
* string
* }>
*/
Expand Down Expand Up @@ -1175,8 +1175,8 @@ public static function fetchProvider(): iterable
}

/**
* @param list<mixed>|array<string, mixed> $params
* @param array<int, int|string|ParameterType|Type|null>|array<string, int|string|ParameterType|Type|null> $types
* @param list<mixed>|array<string, mixed> $params
* @param array<int, int|string|ParameterType|Type>|array<string, int|string|ParameterType|Type> $types
*
* @dataProvider fetchProvider
*/
Expand Down

0 comments on commit 4288aca

Please sign in to comment.