Skip to content

Commit 211334a

Browse files
staabmclxmstaab
andauthored
handle UnresolvableQueryException in *Extensions (#399)
Co-authored-by: Markus Staab <m.staab@complex-it.de>
1 parent e1551a4 commit 211334a

30 files changed

+211
-151
lines changed

src/Extensions/DoctrineConnectionExecuteQueryDynamicReturnTypeExtension.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use staabm\PHPStanDba\DoctrineReflection\DoctrineReflection;
1919
use staabm\PHPStanDba\QueryReflection\QueryReflection;
2020
use staabm\PHPStanDba\QueryReflection\QueryReflector;
21+
use staabm\PHPStanDba\UnresolvableQueryException;
2122

2223
final class DoctrineConnectionExecuteQueryDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension
2324
{
@@ -58,9 +59,13 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
5859
$params = $args[1]->value;
5960
}
6061

61-
$resultType = $this->inferType($args[0]->value, $params, $scope);
62-
if (null !== $resultType) {
63-
return $resultType;
62+
try {
63+
$resultType = $this->inferType($args[0]->value, $params, $scope);
64+
if (null !== $resultType) {
65+
return $resultType;
66+
}
67+
} catch (UnresolvableQueryException $exception) {
68+
// simulation not possible.. use default value
6469
}
6570

6671
return $defaultReturn;

src/Extensions/DoctrineConnectionFetchDynamicReturnTypeExtension.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use PHPStan\Type\Type;
1818
use staabm\PHPStanDba\DoctrineReflection\DoctrineReflection;
1919
use staabm\PHPStanDba\QueryReflection\QueryReflection;
20+
use staabm\PHPStanDba\UnresolvableQueryException;
2021

2122
final class DoctrineConnectionFetchDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension
2223
{
@@ -71,9 +72,13 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
7172
$params = $args[1]->value;
7273
}
7374

74-
$resultType = $this->inferType($methodReflection, $args[0]->value, $params, $scope);
75-
if (null !== $resultType) {
76-
return $resultType;
75+
try {
76+
$resultType = $this->inferType($methodReflection, $args[0]->value, $params, $scope);
77+
if (null !== $resultType) {
78+
return $resultType;
79+
}
80+
} catch (UnresolvableQueryException $exception) {
81+
// simulation not possible.. use default value
7782
}
7883

7984
return $defaultReturn;

src/Extensions/DoctrineConnectionPrepareDynamicReturnTypeExtension.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use staabm\PHPStanDba\DoctrineReflection\DoctrineReflection;
1919
use staabm\PHPStanDba\QueryReflection\QueryReflection;
2020
use staabm\PHPStanDba\QueryReflection\QueryReflector;
21+
use staabm\PHPStanDba\UnresolvableQueryException;
2122

2223
final class DoctrineConnectionPrepareDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension
2324
{
@@ -53,9 +54,13 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
5354
return $defaultReturn;
5455
}
5556

56-
$resultType = $this->inferType($args[0]->value, $scope);
57-
if (null !== $resultType) {
58-
return $resultType;
57+
try {
58+
$resultType = $this->inferType($args[0]->value, $scope);
59+
if (null !== $resultType) {
60+
return $resultType;
61+
}
62+
} catch (UnresolvableQueryException $exception) {
63+
// simulation not possible.. use default value
5964
}
6065

6166
return $defaultReturn;

src/Extensions/DoctrineConnectionQueryDynamicReturnTypeExtension.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use staabm\PHPStanDba\DoctrineReflection\DoctrineReflection;
1919
use staabm\PHPStanDba\QueryReflection\QueryReflection;
2020
use staabm\PHPStanDba\QueryReflection\QueryReflector;
21+
use staabm\PHPStanDba\UnresolvableQueryException;
2122

2223
final class DoctrineConnectionQueryDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension
2324
{
@@ -53,9 +54,13 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
5354
return $defaultReturn;
5455
}
5556

56-
$resultType = $this->inferType($args[0]->value, $scope);
57-
if (null !== $resultType) {
58-
return $resultType;
57+
try {
58+
$resultType = $this->inferType($args[0]->value, $scope);
59+
if (null !== $resultType) {
60+
return $resultType;
61+
}
62+
} catch (UnresolvableQueryException $exception) {
63+
// simulation not possible.. use default value
5964
}
6065

6166
return $defaultReturn;

src/Extensions/DoctrineResultDynamicReturnTypeExtension.php

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use PHPStan\Type\Type;
1919
use staabm\PHPStanDba\DoctrineReflection\DoctrineReflection;
2020
use staabm\PHPStanDba\DoctrineReflection\DoctrineResultObjectType;
21+
use staabm\PHPStanDba\UnresolvableQueryException;
2122

2223
final class DoctrineResultDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension
2324
{
@@ -55,6 +56,20 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
5556
return $defaultReturn;
5657
}
5758

59+
try {
60+
$resultType = $this->inferType($methodReflection, $methodCall, $scope);
61+
if (null !== $resultType) {
62+
return $resultType;
63+
}
64+
} catch (UnresolvableQueryException $exception) {
65+
// simulation not possible.. use default value
66+
}
67+
68+
return $defaultReturn;
69+
}
70+
71+
private function inferType(MethodReflection $methodReflection, MethodCall $methodCall, Scope $scope): ?Type
72+
{
5873
$resultType = $scope->getType($methodCall->var);
5974
if ('columncount' === strtolower($methodReflection->getName())) {
6075
if ($resultType instanceof DoctrineResultObjectType) {
@@ -70,16 +85,11 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
7085
}
7186
}
7287

73-
return $defaultReturn;
88+
return null;
7489
}
7590

7691
$doctrineReflection = new DoctrineReflection();
77-
$fetchResultType = $doctrineReflection->reduceResultType($methodReflection, $resultType);
7892

79-
if (null !== $fetchResultType) {
80-
return $fetchResultType;
81-
}
82-
83-
return $defaultReturn;
93+
return $doctrineReflection->reduceResultType($methodReflection, $resultType);
8494
}
8595
}

src/Extensions/DoctrineStatementExecuteDynamicReturnTypeExtension.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use staabm\PHPStanDba\PdoReflection\PdoStatementReflection;
1919
use staabm\PHPStanDba\QueryReflection\QueryReflection;
2020
use staabm\PHPStanDba\QueryReflection\QueryReflector;
21+
use staabm\PHPStanDba\UnresolvableQueryException;
2122

2223
final class DoctrineStatementExecuteDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension
2324
{
@@ -49,9 +50,13 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
4950
return $defaultReturn;
5051
}
5152

52-
$resultType = $this->inferType($methodReflection, $methodCall, $args[0]->value, $scope);
53-
if (null !== $resultType) {
54-
return $resultType;
53+
try {
54+
$resultType = $this->inferType($methodReflection, $methodCall, $args[0]->value, $scope);
55+
if (null !== $resultType) {
56+
return $resultType;
57+
}
58+
} catch (UnresolvableQueryException $exception) {
59+
// simulation not possible.. use default value
5560
}
5661

5762
return $defaultReturn;

src/Extensions/MysqliQueryDynamicReturnTypeExtension.php

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,11 @@ public function getTypeFromFunctionCall(FunctionReflection $functionReflection,
6666

6767
try {
6868
$resultType = $this->inferResultType($args[1]->value, $scope);
69+
if (null !== $resultType) {
70+
return $resultType;
71+
}
6972
} catch (UnresolvableQueryException $e) {
70-
return $defaultReturn;
71-
}
72-
73-
if (null !== $resultType) {
74-
return $resultType;
73+
// simulation not possible.. use default value
7574
}
7675

7776
return $defaultReturn;
@@ -96,12 +95,11 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
9695

9796
try {
9897
$resultType = $this->inferResultType($args[0]->value, $scope);
98+
if (null !== $resultType) {
99+
return $resultType;
100+
}
99101
} catch (UnresolvableQueryException $e) {
100-
return $defaultReturn;
101-
}
102-
103-
if (null !== $resultType) {
104-
return $resultType;
102+
// simulation not possible.. use default value
105103
}
106104

107105
return $defaultReturn;

src/Extensions/PdoPrepareDynamicReturnTypeExtension.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use PHPStan\Type\TypeCombinator;
1919
use staabm\PHPStanDba\PdoReflection\PdoStatementReflection;
2020
use staabm\PHPStanDba\QueryReflection\QueryReflection;
21+
use staabm\PHPStanDba\UnresolvableQueryException;
2122

2223
final class PdoPrepareDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension
2324
{
@@ -58,9 +59,13 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
5859
return $defaultReturn;
5960
}
6061

61-
$resultType = $this->inferType($args[0]->value, $scope);
62-
if (null !== $resultType) {
63-
return $resultType;
62+
try {
63+
$resultType = $this->inferType($args[0]->value, $scope);
64+
if (null !== $resultType) {
65+
return $resultType;
66+
}
67+
} catch (UnresolvableQueryException $exception) {
68+
// simulation not possible.. use default value
6469
}
6570

6671
return $defaultReturn;

src/Extensions/PdoQueryDynamicReturnTypeExtension.php

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,11 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
6767

6868
try {
6969
$resultType = $this->inferType($methodCall, $args[0]->value, $scope);
70-
} catch (UnresolvableQueryException $e) {
71-
return $defaultReturn;
72-
}
73-
74-
if (null !== $resultType) {
75-
return $resultType;
70+
if (null !== $resultType) {
71+
return $resultType;
72+
}
73+
} catch (UnresolvableQueryException $exception) {
74+
// simulation not possible.. use default value
7675
}
7776

7877
return $defaultReturn;

src/Extensions/PdoQuoteDynamicReturnTypeExtension.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use PHPStan\Type\Type;
2121
use PHPStan\Type\TypeCombinator;
2222
use staabm\PHPStanDba\QueryReflection\QueryReflection;
23+
use staabm\PHPStanDba\UnresolvableQueryException;
2324

2425
final class PdoQuoteDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension
2526
{
@@ -56,9 +57,13 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
5657
return $defaultReturn;
5758
}
5859

59-
$stringType = $this->inferType($methodCall, $scope);
60-
if (null !== $stringType) {
61-
return $stringType;
60+
try {
61+
$stringType = $this->inferType($methodCall, $scope);
62+
if (null !== $stringType) {
63+
return $stringType;
64+
}
65+
} catch (UnresolvableQueryException $exception) {
66+
// simulation not possible.. use default value
6267
}
6368

6469
return $defaultReturn;

0 commit comments

Comments
 (0)