Skip to content

Commit 56beb77

Browse files
committed
refactor
1 parent 2e6bf3c commit 56beb77

12 files changed

+62
-97
lines changed

src/ParserExtension/AbsReturnTypeExtension.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,15 @@
1212
use SqlFtw\Sql\Expression\ExpressionNode;
1313
use SqlFtw\Sql\Expression\FunctionCall;
1414

15-
/**
16-
* @implements QueryExpressionReturnTypeExtension<FunctionCall>
17-
*/
18-
final class AbsReturnTypeExtension implements QueryExpressionReturnTypeExtension
15+
final class AbsReturnTypeExtension implements QueryFunctionReturnTypeExtension
1916
{
20-
public function isExpressionSupported(ExpressionNode $expression): bool
17+
public function isFunctionSupported(FunctionCall $expression): bool
2118
{
2219
return
23-
$expression instanceof FunctionCall
24-
&& \in_array($expression->getFunction()->getName(), [BuiltInFunction::ABS], true);
20+
\in_array($expression->getFunction()->getName(), [BuiltInFunction::ABS], true);
2521
}
2622

27-
public function getTypeFromExpression(ExpressionNode $expression, QueryScope $scope): ?Type
23+
public function getReturnType(FunctionCall $expression, QueryScope $scope): ?Type
2824
{
2925
$args = $expression->getArguments();
3026

src/ParserExtension/AvgReturnTypeExtension.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,15 @@
1010
use SqlFtw\Sql\Expression\ExpressionNode;
1111
use SqlFtw\Sql\Expression\FunctionCall;
1212

13-
/**
14-
* @implements QueryExpressionReturnTypeExtension<FunctionCall>
15-
*/
16-
final class AvgReturnTypeExtension implements QueryExpressionReturnTypeExtension
13+
final class AvgReturnTypeExtension implements QueryFunctionReturnTypeExtension
1714
{
18-
public function isExpressionSupported(ExpressionNode $expression): bool
15+
public function isFunctionSupported(FunctionCall $expression): bool
1916
{
2017
return
21-
$expression instanceof FunctionCall
22-
&& \in_array($expression->getFunction()->getName(), [BuiltInFunction::AVG, BuiltInFunction::MIN, BuiltInFunction::MAX], true);
18+
\in_array($expression->getFunction()->getName(), [BuiltInFunction::AVG, BuiltInFunction::MIN, BuiltInFunction::MAX], true);
2319
}
2420

25-
public function getTypeFromExpression(ExpressionNode $expression, QueryScope $scope): ?Type
21+
public function getReturnType(FunctionCall $expression, QueryScope $scope): ?Type
2622
{
2723
$args = $expression->getArguments();
2824

src/ParserExtension/CoalesceReturnTypeExtension.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,15 @@
1010
use SqlFtw\Sql\Expression\ExpressionNode;
1111
use SqlFtw\Sql\Expression\FunctionCall;
1212

13-
/**
14-
* @implements QueryExpressionReturnTypeExtension<FunctionCall>
15-
*/
16-
final class CoalesceReturnTypeExtension implements QueryExpressionReturnTypeExtension
13+
final class CoalesceReturnTypeExtension implements QueryFunctionReturnTypeExtension
1714
{
18-
public function isExpressionSupported(ExpressionNode $expression): bool
15+
public function isFunctionSupported(FunctionCall $expression): bool
1916
{
2017
return
21-
$expression instanceof FunctionCall
22-
&& \in_array($expression->getFunction()->getName(), [BuiltInFunction::COALESCE, BuiltInFunction::IFNULL, BuiltInFunction::NULLIF], true);
18+
\in_array($expression->getFunction()->getName(), [BuiltInFunction::COALESCE, BuiltInFunction::IFNULL, BuiltInFunction::NULLIF], true);
2319
}
2420

25-
public function getTypeFromExpression(ExpressionNode $expression, QueryScope $scope): Type
21+
public function getReturnType(FunctionCall $expression, QueryScope $scope): Type
2622
{
2723
$args = $expression->getArguments();
2824

src/ParserExtension/ConcatReturnTypeExtension.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,15 @@
1818
use SqlFtw\Sql\Expression\ExpressionNode;
1919
use SqlFtw\Sql\Expression\FunctionCall;
2020

21-
/**
22-
* @implements QueryExpressionReturnTypeExtension<FunctionCall>
23-
*/
24-
final class ConcatReturnTypeExtension implements QueryExpressionReturnTypeExtension
21+
final class ConcatReturnTypeExtension implements QueryFunctionReturnTypeExtension
2522
{
26-
public function isExpressionSupported(ExpressionNode $expression): bool
23+
public function isFunctionSupported(FunctionCall $expression): bool
2724
{
2825
return
29-
$expression instanceof FunctionCall
30-
&& \in_array($expression->getFunction()->getName(), [BuiltInFunction::CONCAT, BuiltInFunction::CONCAT_WS], true);
26+
\in_array($expression->getFunction()->getName(), [BuiltInFunction::CONCAT, BuiltInFunction::CONCAT_WS], true);
3127
}
3228

33-
public function getTypeFromExpression(ExpressionNode $expression, QueryScope $scope): Type
29+
public function getReturnType(FunctionCall $expression, QueryScope $scope): Type
3430
{
3531
$args = $expression->getArguments();
3632

src/ParserExtension/InstrReturnTypeExtension.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,15 @@
1111
use SqlFtw\Sql\Expression\ExpressionNode;
1212
use SqlFtw\Sql\Expression\FunctionCall;
1313

14-
/**
15-
* @implements QueryExpressionReturnTypeExtension<FunctionCall>
16-
*/
17-
final class InstrReturnTypeExtension implements QueryExpressionReturnTypeExtension
14+
final class InstrReturnTypeExtension implements QueryFunctionReturnTypeExtension
1815
{
19-
public function isExpressionSupported(ExpressionNode $expression): bool
16+
public function isFunctionSupported(FunctionCall $expression): bool
2017
{
2118
return
22-
$expression instanceof FunctionCall
23-
&& \in_array($expression->getFunction()->getName(), [BuiltInFunction::INSTR, BuiltInFunction::LOCATE], true);
19+
\in_array($expression->getFunction()->getName(), [BuiltInFunction::INSTR, BuiltInFunction::LOCATE], true);
2420
}
2521

26-
public function getTypeFromExpression(ExpressionNode $expression, QueryScope $scope): Type
22+
public function getReturnType(FunctionCall $expression, QueryScope $scope): Type
2723
{
2824
$args = $expression->getArguments();
2925

src/ParserExtension/IsNullReturnTypeExtension.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,15 @@
1212
use SqlFtw\Sql\Expression\ExpressionNode;
1313
use SqlFtw\Sql\Expression\FunctionCall;
1414

15-
/**
16-
* @implements QueryExpressionReturnTypeExtension<FunctionCall>
17-
*/
18-
final class IsNullReturnTypeExtension implements QueryExpressionReturnTypeExtension
15+
final class IsNullReturnTypeExtension implements QueryFunctionReturnTypeExtension
1916
{
20-
public function isExpressionSupported(ExpressionNode $expression): bool
17+
public function isFunctionSupported(FunctionCall $expression): bool
2118
{
2219
return
23-
$expression instanceof FunctionCall
24-
&& \in_array($expression->getFunction()->getName(), [BuiltInFunction::ISNULL], true);
20+
\in_array($expression->getFunction()->getName(), [BuiltInFunction::ISNULL], true);
2521
}
2622

27-
public function getTypeFromExpression(ExpressionNode $expression, QueryScope $scope): ?Type
23+
public function getReturnType(FunctionCall $expression, QueryScope $scope): ?Type
2824
{
2925
$args = $expression->getArguments();
3026

src/ParserExtension/PositiveIntReturningReturnTypeExtension.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@
1010
use SqlFtw\Sql\Expression\ExpressionNode;
1111
use SqlFtw\Sql\Expression\FunctionCall;
1212

13-
/**
14-
* @implements QueryExpressionReturnTypeExtension<FunctionCall>
15-
*/
16-
final class PositiveIntReturningReturnTypeExtension implements QueryExpressionReturnTypeExtension
13+
final class PositiveIntReturningReturnTypeExtension implements QueryFunctionReturnTypeExtension
1714
{
1815
/**
1916
* @var list<string>
@@ -27,14 +24,13 @@ final class PositiveIntReturningReturnTypeExtension implements QueryExpressionRe
2724
BuiltInFunction::FIELD,
2825
];
2926

30-
public function isExpressionSupported(ExpressionNode $expression): bool
27+
public function isFunctionSupported(FunctionCall $expression): bool
3128
{
3229
return
33-
$expression instanceof FunctionCall
34-
&& \in_array($expression->getFunction()->getName(), $this->functions, true);
30+
\in_array($expression->getFunction()->getName(), $this->functions, true);
3531
}
3632

37-
public function getTypeFromExpression(ExpressionNode $expression, QueryScope $scope): Type
33+
public function getReturnType(FunctionCall $expression, QueryScope $scope): Type
3834
{
3935
return IntegerRangeType::fromInterval(0, null);
4036
}

src/ParserExtension/QueryExpressionReturnTypeExtension.php

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace staabm\PHPStanDba\ParserExtension;
6+
7+
use PHPStan\Type\Type;
8+
use SqlFtw\Sql\Expression\FunctionCall;
9+
10+
interface QueryFunctionReturnTypeExtension
11+
{
12+
public function isFunctionSupported(FunctionCall $expression): bool;
13+
14+
public function getReturnType(FunctionCall $expression, QueryScope $scope): ?Type;
15+
}

src/ParserExtension/QueryScope.php

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222
use SqlFtw\Sql\Expression\SimpleName;
2323
use SqlFtw\Sql\Expression\StringValue;
2424
use staabm\PHPStanDba\SchemaReflection\Table;
25+
use SqlFtw\Sql\Expression\FunctionCall;
2526

2627
final class QueryScope
2728
{
2829
/**
29-
* @var list<QueryExpressionReturnTypeExtension>
30+
* @var list<QueryFunctionReturnTypeExtension>
3031
*/
3132
private $extensions;
3233

@@ -109,14 +110,16 @@ public function getType($expression): Type
109110
throw new ShouldNotHappenException('Unable to resolve column '.$expression->getName());
110111
}
111112

112-
foreach ($this->extensions as $extension) {
113-
if (!$extension->isExpressionSupported($expression)) {
114-
continue;
115-
}
113+
if ($expression instanceof FunctionCall) {
114+
foreach ($this->extensions as $extension) {
115+
if (!$extension->isFunctionSupported($expression)) {
116+
continue;
117+
}
116118

117-
$extensionType = $extension->getTypeFromExpression($expression, $this);
118-
if (null !== $extensionType) {
119-
return $extensionType;
119+
$extensionType = $extension->getReturnType($expression, $this);
120+
if (null !== $extensionType) {
121+
return $extensionType;
122+
}
120123
}
121124
}
122125

0 commit comments

Comments
 (0)