Skip to content

Commit 13e7254

Browse files
committed
Conditional return type for SQLite3Result::fetchArray() and SQLite3Result::fetchAll()
1 parent 28f6ffe commit 13e7254

6 files changed

Lines changed: 68 additions & 4 deletions

File tree

bin/functionMetadata_original.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,8 @@
333333

334334
'SplQueue::dequeue' => ['hasSideEffects' => true],
335335

336+
'SQLite3Result::fetchArray' => ['hasSideEffects' => true],
337+
336338
'XmlReader::next' => ['hasSideEffects' => true],
337339
'XmlReader::read' => ['hasSideEffects' => true],
338340
];

resources/functionMap.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10062,7 +10062,7 @@
1006210062
'SQLite3Result::__construct' => ['void'],
1006310063
'SQLite3Result::columnName' => ['string', 'column_number'=>'int'],
1006410064
'SQLite3Result::columnType' => ['int', 'column_number'=>'int'],
10065-
'SQLite3Result::fetchArray' => ['array|false', 'mode='=>'int'],
10065+
'SQLite3Result::fetchArray' => ['($mode is SQLITE3_NUM ? non-empty-list<mixed>|false : ($mode is SQLITE3_ASSOC ? non-empty-array<string,mixed>|false : non-empty-array<int|string,mixed>|false))', 'mode='=>'int'],
1006610066
'SQLite3Result::finalize' => ['bool'],
1006710067
'SQLite3Result::numColumns' => ['int'],
1006810068
'SQLite3Result::reset' => ['bool'],

resources/functionMap_php85delta.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
return [
1717
'new' => [
1818
'chr' => ['non-empty-string', 'ascii'=>'int<0,255>'],
19+
'SQLite3Result::fetchAll' => ['($mode is SQLITE3_NUM ? list<non-empty-list<mixed>>|false : ($mode is SQLITE3_ASSOC ? list<non-empty-array<string,mixed>>|false : list<non-empty-array<int|string,mixed>>|false))', 'mode='=>'int'],
1920
],
2021
'old' => [
2122
'chr' => ['non-empty-string', 'ascii'=>'int'],

resources/functionMetadata.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,6 @@
570570
'ReflectionMethod::isProtected' => ['hasSideEffects' => false],
571571
'ReflectionMethod::isPublic' => ['hasSideEffects' => false],
572572
'ReflectionMethod::isStatic' => ['hasSideEffects' => false],
573-
'ReflectionMethod::setAccessible' => ['hasSideEffects' => false],
574573
'ReflectionNamedType::getName' => ['hasSideEffects' => false],
575574
'ReflectionNamedType::isBuiltin' => ['hasSideEffects' => false],
576575
'ReflectionParameter::getAttributes' => ['hasSideEffects' => false],
@@ -605,7 +604,6 @@
605604
'ReflectionProperty::isProtected' => ['hasSideEffects' => false],
606605
'ReflectionProperty::isPublic' => ['hasSideEffects' => false],
607606
'ReflectionProperty::isStatic' => ['hasSideEffects' => false],
608-
'ReflectionProperty::setAccessible' => ['hasSideEffects' => false],
609607
'ReflectionReference::getId' => ['hasSideEffects' => false],
610608
'ReflectionType::isBuiltin' => ['hasSideEffects' => false],
611609
'ReflectionUnionType::getTypes' => ['hasSideEffects' => false],
@@ -620,6 +618,7 @@
620618
'ResourceBundle::getErrorCode' => ['hasSideEffects' => false],
621619
'ResourceBundle::getErrorMessage' => ['hasSideEffects' => false],
622620
'ResourceBundle::getIterator' => ['hasSideEffects' => false],
621+
'SQLite3Result::fetchArray' => ['hasSideEffects' => true],
623622
'SQLiteException::__construct' => ['hasSideEffects' => false],
624623
'SimpleXMLElement::__construct' => ['hasSideEffects' => false],
625624
'SimpleXMLElement::children' => ['hasSideEffects' => false],
@@ -1758,4 +1757,4 @@
17581757
'zlib_encode' => ['hasSideEffects' => false],
17591758
'zlib_get_coding_type' => ['hasSideEffects' => false],
17601759

1761-
];
1760+
];
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php // php >= 8.5
2+
3+
namespace Sqlite3ResultFetchAll;
4+
5+
use SQLite3Result;
6+
use function PHPStan\Testing\assertType;
7+
8+
class Foo
9+
{
10+
11+
public function fetchAllDefault(SQLite3Result $result): void
12+
{
13+
assertType('list<non-empty-array<int|string, mixed>>|false', $result->fetchAll());
14+
}
15+
16+
public function fetchAllBoth(SQLite3Result $result): void
17+
{
18+
assertType('list<non-empty-array<int|string, mixed>>|false', $result->fetchAll(SQLITE3_BOTH));
19+
}
20+
21+
public function fetchAllNum(SQLite3Result $result): void
22+
{
23+
assertType('list<non-empty-list<mixed>>|false', $result->fetchAll(SQLITE3_NUM));
24+
}
25+
26+
public function fetchAllAssoc(SQLite3Result $result): void
27+
{
28+
assertType('list<non-empty-array<string, mixed>>|false', $result->fetchAll(SQLITE3_ASSOC));
29+
}
30+
31+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace Sqlite3ResultFetchArray;
4+
5+
use SQLite3Result;
6+
use function PHPStan\Testing\assertType;
7+
8+
class Foo
9+
{
10+
11+
public function fetchArrayDefault(SQLite3Result $result): void
12+
{
13+
assertType('non-empty-array<int|string, mixed>|false', $result->fetchArray());
14+
}
15+
16+
public function fetchArrayBoth(SQLite3Result $result): void
17+
{
18+
assertType('non-empty-array<int|string, mixed>|false', $result->fetchArray(SQLITE3_BOTH));
19+
}
20+
21+
public function fetchArrayNum(SQLite3Result $result): void
22+
{
23+
assertType('non-empty-list<mixed>|false', $result->fetchArray(SQLITE3_NUM));
24+
}
25+
26+
public function fetchArrayAssoc(SQLite3Result $result): void
27+
{
28+
assertType('non-empty-array<string, mixed>|false', $result->fetchArray(SQLITE3_ASSOC));
29+
}
30+
31+
}

0 commit comments

Comments
 (0)