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 2, 2022
1 parent 0cc7adc commit 38d20ca
Show file tree
Hide file tree
Showing 9 changed files with 111 additions and 140 deletions.
5 changes: 5 additions & 0 deletions UPGRADE.md
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,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 @@ -353,29 +353,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 @@ -394,8 +384,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 @@ -432,7 +422,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 @@ -446,7 +436,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 @@ -1331,7 +1321,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 @@ -1363,7 +1353,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
Original file line number Diff line number Diff line change
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
42 changes: 21 additions & 21 deletions tests/Query/QueryBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -826,8 +826,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 @@ -861,8 +861,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 @@ -896,8 +896,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 @@ -931,8 +931,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 @@ -977,8 +977,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 @@ -1023,8 +1023,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 @@ -1069,8 +1069,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 @@ -1119,8 +1119,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 @@ -1172,7 +1172,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 @@ -1216,8 +1216,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 Expand Up @@ -1250,8 +1250,8 @@ public function testExecuteQuery(
}

/**
* @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

0 comments on commit 38d20ca

Please sign in to comment.