From 90dd5f4f32246b4b53f4a50adcd92cb172d424e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gardo=C5=88=20V=C3=ADt?= Date: Thu, 10 Sep 2026 14:18:33 +0200 Subject: [PATCH] Fetching rows as native arrays --- src/Database/Connection.php | 12 ++++++++++++ src/Database/Explorer.php | 11 +++++++++++ src/Database/ResultSet.php | 21 +++++++++++++++++++++ tests/types/database-types.php | 6 ++++++ 4 files changed, 50 insertions(+) diff --git a/src/Database/Connection.php b/src/Database/Connection.php index 3e2679704..23d072bec 100644 --- a/src/Database/Connection.php +++ b/src/Database/Connection.php @@ -421,6 +421,18 @@ public function fetchAll(#[Language('SQL')] string $sql, #[Language('GenericSQL' } + /** + * Executes SQL query and returns all rows as an array of arrays. + * Useful because the rows can be typed using @var. + * @param literal-string $sql + * @return list + */ + public function fetchAllArray(#[Language('SQL')] string $sql, #[Language('GenericSQL')] mixed ...$params): array + { + return $this->query($sql, ...$params)->fetchAllArray(); + } + + /** * Creates SQL literal value. */ diff --git a/src/Database/Explorer.php b/src/Database/Explorer.php index bc79a812a..7ef34de7f 100644 --- a/src/Database/Explorer.php +++ b/src/Database/Explorer.php @@ -240,6 +240,17 @@ public function fetchAll(#[Language('SQL')] string $sql, #[Language('GenericSQL' } + /** + * Executes SQL query and returns all rows as an array of Row objects. + * @param literal-string $sql + * @return list + */ + public function fetchAllArray(#[Language('SQL')] string $sql, #[Language('GenericSQL')] mixed ...$params): array + { + return $this->connection->query($sql, ...$params)->fetchAllArray(); + } + + /** * Creates SQL literal value. */ diff --git a/src/Database/ResultSet.php b/src/Database/ResultSet.php index 710419875..3bff59d45 100644 --- a/src/Database/ResultSet.php +++ b/src/Database/ResultSet.php @@ -26,6 +26,8 @@ class ResultSet implements \Iterator, IRowContainer /** @var list */ private array $rows; + /** @var list */ + private array $rowsArray; private float $time; /** @var array column name => type */ @@ -287,4 +289,23 @@ public function fetchAll(): array $this->rows ??= iterator_to_array($this, preserve_keys: false); return $this->rows; } + + + /** + * Returns all remaining rows as array of arrays. + * Useful because the rows can be typed using @var + * @return list + */ + public function fetchAllArray(): array + { + if(!isset($this->rowsArray)){ + $this->rowsArray = []; + while(true){ + $data = $this->fetchAssoc(); + if($data === null) break; + $this->rowsArray[] = $data; + } + } + return $this->rowsArray; + } } diff --git a/tests/types/database-types.php b/tests/types/database-types.php index b01e84eeb..05a8368c4 100644 --- a/tests/types/database-types.php +++ b/tests/types/database-types.php @@ -112,6 +112,12 @@ function testResultSetFetchAll(ResultSet $resultSet): void } +function testResultSetFetchAllArray(ResultSet $resultSet): void +{ + assertType('list', $resultSet->fetchAllArray()); +} + + function testResultSetFetchPairs(ResultSet $resultSet): void { assertType('array', $resultSet->fetchPairs());