Skip to content

Commit 821cb2e

Browse files
committed
Refactor type annotations for improved PHPStan compatibility
1 parent 14956b6 commit 821cb2e

File tree

12 files changed

+68
-47
lines changed

12 files changed

+68
-47
lines changed

src/Builder/Delete.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22
namespace Kir\MySQL\Builder;
33

4+
use Kir\MySQL\Builder\Internal\Types;
45
use Kir\MySQL\Builder\Traits\JoinBuilder;
56
use Kir\MySQL\Builder\Traits\LimitBuilder;
67
use Kir\MySQL\Builder\Traits\OffsetBuilder;
@@ -9,6 +10,9 @@
910
use Kir\MySQL\Builder\Traits\TableNameBuilder;
1011
use Kir\MySQL\Builder\Traits\WhereBuilder;
1112

13+
/**
14+
* @phpstan-import-type DBTableNameType from Types
15+
*/
1216
abstract class Delete extends Statement {
1317
use TableNameBuilder;
1418
use TableBuilder;
@@ -24,11 +28,11 @@ abstract class Delete extends Statement {
2428
/**
2529
* Name der Tabelle
2630
*
27-
* @param string $alias
28-
* @param null|string|Select $table
31+
* @param ($table is null ? DBTableNameType : string) $alias
32+
* @param null|DBTableNameType $table
2933
* @return $this
3034
*/
31-
public function from(string $alias, null|string|Select $table = null) {
35+
public function from($alias, $table = null) {
3236
if($table !== null) {
3337
$this->aliases[] = $alias;
3438
}

src/Builder/Internal/ConditionBuilder.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
<?php
22
namespace Kir\MySQL\Builder\Internal;
33

4-
use Kir\MySQL\Builder;
5-
use Kir\MySQL\Builder\Expr\OptionalExpression;
64
use Kir\MySQL\Database;
75
use Stringable;
86

7+
/**
8+
* @phpstan-import-type DBParameterValueType from Types
9+
* @phpstan-import-type DBWhereExpressionType from Types
10+
*/
911
final class ConditionBuilder {
1012
/**
1113
* @param Database $db
1214
* @param string $query
13-
* @param array<int, array{string|array<string, mixed>|object|OptionalExpression, array<int, null|string|array<int, null|scalar>|Builder\DBExpr|Builder\Select>}> $conditions
15+
* @param array<int, array{DBWhereExpressionType, list<DBParameterValueType>}> $conditions
1416
* @param string $token
1517
* @return string
1618
*/
@@ -42,7 +44,7 @@ public static function build(Database $db, string $query, array $conditions, str
4244
/**
4345
* @param string[] $conditions
4446
* @param string $expression
45-
* @param array<int, null|string|array<int, null|scalar>|Builder\DBExpr|Builder\Select> $arguments
47+
* @param list<DBParameterValueType> $arguments
4648
* @param Database $db
4749
* @return string[]
4850
*/

src/Builder/Internal/Types.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
use Stringable;
1111

1212
/**
13-
* @phpstan-type DBTableNameType string|array<int, array<string, null|scalar>>|Select|VirtualTable
13+
* @phpstan-type DBTableNameType string|array<int, null|scalar|array<string, null|scalar>>|Select|VirtualTable
1414
* @phpstan-type DBFetchRowsCallableReturnType string|array<int, array<string, null|scalar>>|Select|VirtualTable
1515
*
1616
* @phpstan-type DBParameterValueType null|scalar|Stringable|DBExpr|Select|DateTimeInterface|array<null|scalar|Stringable>

src/Builder/Select.php

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
namespace Kir\MySQL\Builder;
44

5-
use DateTimeInterface;
6-
use Kir\MySQL\Builder\Expr\OptionalExpression;
75
use Kir\MySQL\Builder\Expr\OrderBySpecification;
6+
use Kir\MySQL\Builder\Internal\Types;
87
use Kir\MySQL\Builder\Value\OptionalValue;
9-
use Kir\MySQL\Tools\VirtualTable;
108

119
/**
10+
* @phpstan-import-type DBParameterValueType from Types
11+
* @phpstan-import-type DBTableNameType from Types
12+
* @phpstan-import-type DBWhereExpressionType from Types
1213
*/
1314
interface Select {
1415
/**
@@ -48,35 +49,35 @@ public function field($expression, $alias = null);
4849
public function fields(array $fields);
4950

5051
/**
51-
* @param null|string $alias
52-
* @param null|string|Select|VirtualTable|array<int, null|int|float|string|array<string, mixed>> $table
52+
* @param ($table is null ? DBTableNameType : string) $alias
53+
* @param null|DBTableNameType $table
5354
* @return $this
5455
*/
55-
public function from(?string $alias, $table = null);
56+
public function from($alias, $table = null);
5657

5758
/**
5859
* @param string $alias
59-
* @param string|array<int, array<string, mixed>>|Select|VirtualTable $table
60+
* @param DBTableNameType $table
6061
* @param string|null $expression
61-
* @param null|scalar|array<int, null|scalar>|DBExpr|Select ...$args
62+
* @param DBParameterValueType ...$args
6263
* @return $this
6364
*/
6465
public function joinInner(string $alias, $table, ?string $expression = null, ...$args);
6566

6667
/**
6768
* @param string $alias
68-
* @param string|array<int, array<string, mixed>>|Select|VirtualTable $table
69+
* @param DBTableNameType $table
6970
* @param string $expression
70-
* @param null|scalar|array<int, null|scalar>|DBExpr|Select ...$args
71+
* @param DBParameterValueType ...$args
7172
* @return $this
7273
*/
7374
public function joinLeft(string $alias, $table, string $expression, ...$args);
7475

7576
/**
7677
* @param string $alias
77-
* @param string|array<int, array<string, mixed>>|Select|VirtualTable $table
78+
* @param DBTableNameType $table
7879
* @param string $expression
79-
* @param null|scalar|array<int, null|scalar>|DBExpr|Select ...$args
80+
* @param DBParameterValueType ...$args
8081
* @return $this
8182
*/
8283
public function joinRight(string $alias, $table, string $expression, ...$args);
@@ -94,15 +95,15 @@ public function union(...$queries);
9495
public function unionAll(...$queries);
9596

9697
/**
97-
* @param string|array<string, mixed>|object|OptionalExpression $expression
98-
* @param null|scalar|array<int, null|scalar>|DBExpr|Select|DateTimeInterface ...$args
98+
* @param DBWhereExpressionType $expression
99+
* @param DBParameterValueType ...$args
99100
* @return $this
100101
*/
101102
public function where($expression, ...$args);
102103

103104
/**
104-
* @param string|array<string, mixed>|object|OptionalExpression $expression
105-
* @param null|scalar|array<int, null|scalar>|DBExpr|Select|DateTimeInterface ...$args
105+
* @param DBWhereExpressionType $expression
106+
* @param DBParameterValueType ...$args
106107
* @return $this
107108
*/
108109
public function having($expression, ...$args);

src/Builder/Traits/HavingBuilder.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22
namespace Kir\MySQL\Builder\Traits;
33

4+
use Closure;
45
use Kir\MySQL\Builder\Helpers\ConditionAddHelper;
56
use Kir\MySQL\Builder\Internal\ConditionBuilder;
67
use Kir\MySQL\Builder\Internal\Types;
@@ -21,6 +22,7 @@ trait HavingBuilder {
2122
* @return $this
2223
*/
2324
public function having($expression, ...$args) {
25+
/** @var Closure(DBWhereExpressionType, list<DBParameterValueType>):void $fn */
2426
$fn = fn($expression, $args) => $this->having[] = [$expression, $args];
2527
ConditionAddHelper::addCondition($fn, $expression, $args);
2628
return $this;

src/Builder/Traits/JoinBuilder.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
namespace Kir\MySQL\Builder\Traits;
33

44
use Kir\MySQL\Builder\Internal\Types;
5-
use Kir\MySQL\Builder\Select;
6-
use Kir\MySQL\Tools\VirtualTable;
75

86
/**
97
* @phpstan-import-type DBParameterValueType from Types
@@ -13,7 +11,7 @@ trait JoinBuilder {
1311
use AbstractDB;
1412
use AbstractTableNameBuilder;
1513

16-
/** @var array<int, array{type: string, alias: string, name: string|array<int, array<string, mixed>>|Select|VirtualTable, expression: string|null, arguments: array<int, DBParameterValueType}> */
14+
/** @var array<int, array{type: string, alias: string, name: DBTableNameType, expression: string|null, arguments: list<DBParameterValueType>}> */
1715
private array $joinTables = [];
1816

1917
/**

src/Builder/Traits/TableBuilder.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
<?php
22
namespace Kir\MySQL\Builder\Traits;
33

4-
use Kir\MySQL\Builder\Select;
5-
use Kir\MySQL\Tools\VirtualTable;
4+
use Kir\MySQL\Builder\Internal\Types;
65

6+
/**
7+
* @phpstan-import-type DBTableNameType from Types
8+
*/
79
trait TableBuilder {
810
use AbstractTableNameBuilder;
911

10-
/** @var array<int, array{alias: string|null, name: string|Select|VirtualTable|array<int, null|int|float|string|array<string, mixed>>}> */
12+
/** @var array<int, array{alias: string|null, name: DBTableNameType}> */
1113
private $tables = [];
1214

1315
/**
1416
* @param string|null $alias
15-
* @param string|Select|VirtualTable|array<int, null|int|float|string|array<string, mixed>> $table
17+
* @param DBTableNameType $table
1618
* @return $this
1719
*/
1820
protected function addTable(?string $alias, $table) {
@@ -36,7 +38,7 @@ protected function buildTables(string $query): string {
3638
}
3739

3840
/**
39-
* @return array<int, array{alias: string|null, name: string|array<int, null|int|float|string|Select|VirtualTable|array<string, mixed>>}>
41+
* @return array<int, array{alias: string|null, name: DBTableNameType}>
4042
*/
4143
protected function getTables(): array {
4244
return $this->tables;

src/Builder/Traits/TableNameBuilder.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
<?php
22
namespace Kir\MySQL\Builder\Traits;
33

4-
use Kir\MySQL\Builder\Select;
4+
use Kir\MySQL\Builder\Internal\Types;
55
use Kir\MySQL\Database;
66
use Kir\MySQL\Tools\VirtualTable;
77

8+
/**
9+
* @phpstan-import-type DBTableNameType from Types
10+
*/
811
trait TableNameBuilder {
912
use AbstractAliasReplacer;
1013

1114
/**
1215
* @param string|null $alias
13-
* @param string|array<int, mixed|array<string, mixed>>|object|Select|VirtualTable $name
16+
* @param DBTableNameType $name
1417
* @return string
1518
*/
1619
protected function buildTableName(?string $alias, $name): string {
@@ -23,8 +26,8 @@ protected function buildTableName(?string $alias, $name): string {
2326
}
2427
if(is_array($name)) {
2528
$parts = [];
26-
foreach($name as $index => $bucket) {
27-
if(is_scalar($bucket) && ctype_digit((string) $index)) {
29+
foreach($name as /*$index => */$bucket) {
30+
if(is_scalar($bucket)/* && ctype_digit((string) $index)*/) {
2831
$parts[] = "SELECT {$this->db()->quote($bucket)} AS {$this->db()->quoteField('value')}";
2932
} else {
3033
$values = [];

src/Builder/Traits/WhereBuilder.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
<?php
22
namespace Kir\MySQL\Builder\Traits;
33

4-
use Kir\MySQL\Builder\Expr\OptionalExpression;
4+
use Closure;
55
use Kir\MySQL\Builder\Helpers\ConditionAddHelper;
66
use Kir\MySQL\Builder\Internal\ConditionBuilder;
77
use Kir\MySQL\Builder\Internal\Types;
8-
use Stringable;
98

109
/**
1110
* @phpstan-import-type DBParameterValueType from Types
@@ -14,7 +13,7 @@
1413
trait WhereBuilder {
1514
use AbstractDB;
1615

17-
/** @var array<int, array{DBWhereExpressionType, DBParameterValueType[]}> */
16+
/** @var array<int, array{DBWhereExpressionType, list<DBParameterValueType>}> */
1817
private array $where = [];
1918

2019
/**
@@ -23,6 +22,7 @@ trait WhereBuilder {
2322
* @return $this
2423
*/
2524
public function where($expression, ...$args) {
25+
/** @var Closure(DBWhereExpressionType, list<DBParameterValueType>):void $fn */
2626
$fn = fn($expression, $args) => $this->where[] = [$expression, $args];
2727
ConditionAddHelper::addCondition($fn, $expression, $args);
2828
return $this;

src/Builder/Update.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
namespace Kir\MySQL\Builder;
33

44
use Kir\MySQL\Builder\Internal\DefaultValue;
5+
use Kir\MySQL\Builder\Internal\Types;
56
use Kir\MySQL\Builder\Traits\JoinBuilder;
67
use Kir\MySQL\Builder\Traits\LimitBuilder;
78
use Kir\MySQL\Builder\Traits\OffsetBuilder;
@@ -11,6 +12,9 @@
1112
use Kir\MySQL\Builder\Traits\WhereBuilder;
1213
use RuntimeException;
1314

15+
/**
16+
* @phpstan-import-type DBTableNameType from Types
17+
*/
1418
abstract class Update extends InsertUpdateStatement {
1519
use TableNameBuilder;
1620
use TableBuilder;
@@ -24,11 +28,11 @@ abstract class Update extends InsertUpdateStatement {
2428
private array $fields = [];
2529

2630
/**
27-
* @param string $alias
28-
* @param string $table
31+
* @param ($table is null ? DBTableNameType : string) $alias
32+
* @param null|DBTableNameType $table
2933
* @return $this
3034
*/
31-
public function table(string $alias, $table = null): self {
35+
public function table($alias, $table = null): self {
3236
if($table === null) {
3337
[$alias, $table] = [$table, $alias];
3438
}

0 commit comments

Comments
 (0)