Skip to content

Commit 6477d25

Browse files
staabmclxmstaab
andauthored
refactor PlaceholderValidation (#183)
Co-authored-by: Markus Staab <[email protected]>
1 parent aa914e8 commit 6477d25

File tree

4 files changed

+26
-93
lines changed

4 files changed

+26
-93
lines changed

.phpunit-phpstan-dba.cache

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

src/QueryReflection/PlaceholderValidation.php

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,33 @@
44

55
namespace staabm\PHPStanDba\QueryReflection;
66

7+
use PhpParser\Node\Expr;
8+
use PHPStan\Analyser\Scope;
9+
710
final class PlaceholderValidation
811
{
912
/**
1013
* @param array<string|int, Parameter> $parameters
1114
*
1215
* @return iterable<string>
1316
*/
14-
public function checkErrors(string $queryString, array $parameters): iterable
17+
public function checkQuery(Expr $queryExpr, Scope $scope, array $parameters): iterable
18+
{
19+
$queryReflection = new QueryReflection();
20+
21+
foreach ($queryReflection->resolveQueryStrings($queryExpr, $scope) as $queryString) {
22+
foreach ($this->checkErrors($queryString, $parameters) as $error) {
23+
yield $error;
24+
}
25+
}
26+
}
27+
28+
/**
29+
* @param array<string|int, Parameter> $parameters
30+
*
31+
* @return iterable<string>
32+
*/
33+
private function checkErrors(string $queryString, array $parameters): iterable
1534
{
1635
if ('SELECT' !== QueryReflection::getQueryType($queryString)) {
1736
return;

src/Rules/PdoStatementExecuteMethodRule.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,9 @@ private function checkErrors(MethodReflection $methodReflection, MethodCall $met
8585
try {
8686
$errors = [];
8787
$placeholderReflection = new PlaceholderValidation();
88-
foreach ($queryReflection->resolveQueryStrings($queryExpr, $scope) as $queryString) {
89-
foreach ($placeholderReflection->checkErrors($queryString, $parameters) as $error) {
90-
// make error messages unique
91-
$errors[$error] = $error;
92-
}
88+
foreach ($placeholderReflection->checkQuery($queryExpr, $scope, $parameters) as $error) {
89+
// make error messages unique
90+
$errors[$error] = $error;
9391
}
9492
} catch (UnresolvableQueryException $exception) {
9593
return [

src/Rules/SyntaxErrorInPreparedStatementMethodRule.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,9 @@ private function checkErrors(CallLike $callLike, Scope $scope): array
122122
}
123123
}
124124

125-
foreach ($queryReflection->resolveQueryStrings($queryExpr, $scope) as $queryString) {
126-
foreach ($placeholderReflection->checkErrors($queryString, $parameters) as $error) {
127-
$errors[$error] = $error;
128-
}
125+
foreach ($placeholderReflection->checkQuery($queryExpr, $scope, $parameters) as $error) {
126+
// make error messages unique
127+
$errors[$error] = $error;
129128
}
130129

131130
$ruleErrors = [];

0 commit comments

Comments
 (0)