Skip to content

Commit 4827561

Browse files
authored
Support spread operator in prepared statement parameter expressions (#750)
* Support syntax-error detection with spread-operator values * more tests * Update bug-749.php * fix * Update SyntaxErrorInPreparedStatementMethodRuleTest.php * cs * record * Use QueryReflection->resolveParameterTypes() everywhere * Update QueryReflection.php * fix * fix * Update SyntaxErrorInPreparedStatementMethodRule.php * Update QueryReflection.php * Update QueryReflection.php * simplify * inference with spread * Update .phpunit-phpstan-dba-mysqli.cache * record
1 parent f48fc62 commit 4827561

17 files changed

+516
-61
lines changed

.phpstan-dba-mysqli.cache

Lines changed: 242 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.phpstan-dba-pdo-mysql.cache

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Extensions/DoctrineConnectionExecuteQueryDynamicReturnTypeExtension.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,8 @@ private function inferType(Expr $queryExpr, ?Expr $paramsExpr, Scope $scope): ?T
6868
$queryReflection = new QueryReflection();
6969
$queryStrings = $queryReflection->resolveQueryStrings($queryExpr, $scope);
7070
} else {
71-
$parameterTypes = $scope->getType($paramsExpr);
72-
7371
$queryReflection = new QueryReflection();
72+
$parameterTypes = $queryReflection->resolveParameterTypes($paramsExpr, $scope);
7473
$queryStrings = $queryReflection->resolvePreparedQueryStrings($queryExpr, $parameterTypes, $scope);
7574
}
7675

src/Extensions/DoctrineConnectionFetchDynamicReturnTypeExtension.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ private function inferType(MethodReflection $methodReflection, Expr $queryExpr,
8383
if (null === $paramsExpr) {
8484
$queryStrings = $queryReflection->resolveQueryStrings($queryExpr, $scope);
8585
} else {
86-
$parameterTypes = $scope->getType($paramsExpr);
86+
$parameterTypes = $queryReflection->resolveParameterTypes($paramsExpr, $scope);
8787
$queryStrings = $queryReflection->resolvePreparedQueryStrings($queryExpr, $parameterTypes, $scope);
8888
}
8989

src/Extensions/DoctrineStatementExecuteDynamicReturnTypeExtension.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,15 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
5656
private function inferType(MethodReflection $methodReflection, MethodCall $methodCall, Expr $paramsExpr, Scope $scope): ?Type
5757
{
5858
$doctrineReflection = new DoctrineReflection();
59-
60-
$parameterTypes = $scope->getType($paramsExpr);
61-
6259
$stmtReflection = new PdoStatementReflection();
60+
6361
$queryExpr = $stmtReflection->findPrepareQueryStringExpression($methodCall);
6462
if (null === $queryExpr) {
6563
return null;
6664
}
6765

6866
$queryReflection = new QueryReflection();
67+
$parameterTypes = $queryReflection->resolveParameterTypes($paramsExpr, $scope);
6968
$queryStrings = $queryReflection->resolvePreparedQueryStrings($queryExpr, $parameterTypes, $scope);
7069

7170
return $doctrineReflection->createGenericResult($queryStrings, QueryReflector::FETCH_TYPE_BOTH);

src/Extensions/PdoStatementExecuteTypeSpecifyingExtension.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,8 @@ private function inferStatementType(MethodReflection $methodReflection, MethodCa
7272
return null;
7373
}
7474

75-
$parameterTypes = $scope->getType($args[0]->value);
76-
7775
$queryReflection = new QueryReflection();
76+
$parameterTypes = $queryReflection->resolveParameterTypes($args[0]->value, $scope);
7877
$queryStrings = $queryReflection->resolvePreparedQueryStrings($queryExpr, $parameterTypes, $scope);
7978

8079
$reflectionFetchType = QueryReflection::getRuntimeConfiguration()->getDefaultFetchMode();

0 commit comments

Comments
 (0)