Skip to content

Commit 6f2ee6b

Browse files
committed
Enhanced typing for phpstan
1 parent d061a30 commit 6f2ee6b

File tree

3 files changed

+45
-19
lines changed

3 files changed

+45
-19
lines changed

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
},
1717
"require-dev": {
1818
"phpunit/phpunit": ">= 6.0",
19-
"phpstan/phpstan": "*@stable"
19+
"phpstan/phpstan": "*@stable",
20+
"jetbrains/phpstorm-attributes": "^1.0"
2021
},
2122
"autoload": {
2223
"psr-4": {

src/Builder/RunnableSelect.php

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,36 @@ public function clearValues();
4141
public function setPreserveTypes(bool $preserveTypes = true);
4242

4343
/**
44-
* @param null|callable(array<string, mixed>): array<string, mixed>|callable(array<string, mixed>): void|callable(array<string, mixed>): DBIgnoreRow $callback
45-
* @return array<int, array<string, mixed>>
44+
* Fetches all rows using PDO::FETCH_NUM
45+
*
46+
* @template K of int
47+
* @template V
48+
* @param null|callable(array<string, null|scalar>): (void|DBIgnoreRow|array<K, V>) $callback
49+
* @return ($callback is null ? array<int, array<int, null|scalar>> : array<int, array<K, V>>)
50+
*/
51+
public function fetchIndexedRows($callback = null): array;
52+
53+
/**
54+
* @template K
55+
* @template V
56+
* @param null|callable(array<string, null|scalar>): (void|DBIgnoreRow|array<K, V>) $callback
57+
* @return ($callback is null ? array<int, array<string, null|scalar>> : array<int, array<K, V>>)
4658
*/
4759
public function fetchRows($callback = null): array;
4860

4961
/**
50-
* @param null|callable(array<string, mixed>): (array<mixed, mixed>|null|void) $callback
51-
* @return Generator<int, array<string, mixed>>
62+
* @template K
63+
* @template V
64+
* @param null|callable(array<string, null|scalar>): (void|DBIgnoreRow|array<K, V>) $callback
65+
* @return ($callback is null ? Generator<int, array<string, mixed>> : Generator<int, array<K, V>>)
5266
*/
5367
public function fetchRowsLazy($callback = null);
5468

5569
/**
56-
* @param null|callable(array<string, mixed>): array<string, mixed>|callable(array<string, mixed>): void|callable(array<string, mixed>): DBIgnoreRow $callback
57-
* @return array<string, mixed>
70+
* @template K
71+
* @template V
72+
* @param null|callable(array<string, mixed>): (array<K, V>|void|DBIgnoreRow) $callback
73+
* @return ($callback is null ? array<string, null|scalar> : array<K, V>)
5874
*/
5975
public function fetchRow($callback = null): array;
6076

@@ -63,7 +79,7 @@ public function fetchRow($callback = null): array;
6379
* @template U
6480
* @param class-string<T> $className
6581
* @param null|callable(T): U $callback
66-
* @return T[]|U[]
82+
* @return ($callback is null ? array<int, T> : array<int, U>)
6783
*/
6884
public function fetchObjects(string $className = 'stdClass', $callback = null): array;
6985

@@ -72,7 +88,7 @@ public function fetchObjects(string $className = 'stdClass', $callback = null):
7288
* @template U
7389
* @param class-string<T> $className
7490
* @param null|callable(T): U $callback
75-
* @return Generator<int, T|U>
91+
* @return ($callback is null ? Generator<int, T> : Generator<int, U>)
7692
*/
7793
public function fetchObjectsLazy($className = null, $callback = null);
7894

@@ -81,7 +97,7 @@ public function fetchObjectsLazy($className = null, $callback = null);
8197
* @template U
8298
* @param class-string<T> $className
8399
* @param null|callable(T): U $callback
84-
* @return T|U
100+
* @return ($callback is null ? T : U)
85101
*/
86102
public function fetchObject($className = null, $callback = null);
87103

@@ -99,8 +115,8 @@ public function fetchGroups(array $fields): array;
99115

100116
/**
101117
* @template T
102-
* @param null|callable(null|bool|int|float|string): T $fn
103-
* @return array<int, T|string>
118+
* @param null|callable(null|scalar): T $fn
119+
* @return ($fn is null ? array<int, null|scalar> : array<int, T>)
104120
*/
105121
public function fetchArray(?callable $fn = null): array;
106122

@@ -109,7 +125,7 @@ public function fetchArray(?callable $fn = null): array;
109125
* @template TCastFn
110126
* @param TDefault $default
111127
* @param null|callable(null|bool|string|int|float): TCastFn $fn
112-
* @return null|bool|string|int|float|TDefault|TCastFn
128+
* @return ($fn is null ? null|scalar|TDefault : TCastFn)
113129
*/
114130
public function fetchValue($default = null, ?callable $fn = null);
115131

src/Databases/MySQL/MySQLRunnableSelect.php

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
/**
1818
*/
19-
class MySQLRunnableSelect extends MySQLSelect implements RunnableSelect {
19+
class MySQLRunnableSelect extends MySQLSelect {
2020
/** @var array<string, mixed> */
2121
private $values = [];
2222
/** @var bool */
@@ -68,6 +68,13 @@ public function setPreserveTypes(bool $preserveTypes = true) {
6868
return $this;
6969
}
7070

71+
/**
72+
* @inheritDoc
73+
*/
74+
public function fetchIndexedRows($callback = null): array {
75+
return $this->fetchAll($callback, PDO::FETCH_NUM);
76+
}
77+
7178
/**
7279
* @inheritDoc
7380
*/
@@ -244,10 +251,12 @@ public function getIterator(): Traversable {
244251
}
245252

246253
/**
247-
* @param null|callable(array<string, mixed>): (array<string, mixed>|DBIgnoreRow|null|void) $callback
254+
* @template TFnParamType of array<string, null|scalar>
255+
* @template TFnReturnType of array<string, null|scalar>
256+
* @param null|callable(TFnParamType): (TFnReturnType|DBIgnoreRow|null|void) $callback
248257
* @param int $mode
249258
* @param mixed $arg0
250-
* @return array<string, mixed>[]
259+
* @return ($callback is null ? array<int, ($mode is PDO::FETCH_NUM ? array<int, null|scalar> : array<string, null|scalar>)> : array<int, TFnReturnType|TFnParamType>)
251260
*/
252261
private function fetchAll($callback = null, int $mode = 0, $arg0 = null) {
253262
return $this->createTempStatement(function (QueryStatement $statement) use ($callback, $mode, $arg0) {
@@ -280,12 +289,12 @@ private function fetchAll($callback = null, int $mode = 0, $arg0 = null) {
280289
/**
281290
* @template T
282291
* @template U
283-
* @param callable(T): U $callback
292+
* @param null|callable(T): U $callback
284293
* @param int $mode
285294
* @param mixed $arg0
286-
* @return Generator<int, T|U>
295+
* @return ($callback is null ? Generator<int, T> : Generator<int, U>)
287296
*/
288-
private function fetchLazy($callback, int $mode = PDO::FETCH_ASSOC, $arg0 = null): Generator {
297+
private function fetchLazy($callback = null, int $mode = PDO::FETCH_ASSOC, $arg0 = null): Generator {
289298
$statement = $this->createStatement();
290299
$statement->setFetchMode($mode, $arg0);
291300
try {

0 commit comments

Comments
 (0)