From fb83908a12875242d94c598dd1be8f381667b290 Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 27 May 2025 14:42:19 +0300 Subject: [PATCH 1/3] Check query instance --- src/Database/Adapter/SQL.php | 4 ---- src/Database/Database.php | 31 +++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/Database/Adapter/SQL.php b/src/Database/Adapter/SQL.php index 34dcba8a8..4a47c77a8 100644 --- a/src/Database/Adapter/SQL.php +++ b/src/Database/Adapter/SQL.php @@ -1605,10 +1605,6 @@ public function getSQLConditions(array $queries, array &$binds, string $separato { $conditions = []; foreach ($queries as $query) { - if (!$query instanceof Query) { - throw new QueryException('Invalid query type: "' . \gettype($query) . '". Expected instances of "' . Query::class . '"'); - } - if ($query->getMethod() === Query::TYPE_SELECT) { continue; } diff --git a/src/Database/Database.php b/src/Database/Database.php index 6a52a5a5d..9de17ae5f 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -3200,6 +3200,8 @@ public function getDocument(string $collection, string $id, array $queries = [], $attributes = $collection->getAttribute('attributes', []); + $this->checkQueriesType($queries); + if ($this->validate) { $validator = new DocumentValidator($attributes); if (!$validator->isValid($queries)) { @@ -4336,6 +4338,8 @@ public function updateDocuments( $attributes = $collection->getAttribute('attributes', []); $indexes = $collection->getAttribute('indexes', []); + $this->checkQueriesType($queries); + if ($this->validate) { $validator = new DocumentsValidator( $attributes, @@ -5734,6 +5738,8 @@ public function deleteDocuments( $attributes = $collection->getAttribute('attributes', []); $indexes = $collection->getAttribute('indexes', []); + $this->checkQueriesType($queries); + if ($this->validate) { $validator = new DocumentsValidator( $attributes, @@ -5923,6 +5929,8 @@ public function find(string $collection, array $queries = [], string $forPermiss $attributes = $collection->getAttribute('attributes', []); $indexes = $collection->getAttribute('indexes', []); + $this->checkQueriesType($queries); + if ($this->validate) { $validator = new DocumentsValidator( $attributes, @@ -6064,6 +6072,8 @@ public function find(string $collection, array $queries = [], string $forPermiss */ public function foreach(string $collection, callable $callback, array $queries = [], string $forPermission = Database::PERMISSION_READ): void { + $this->checkQueriesType($queries); + $grouped = Query::groupByType($queries); $limitExists = $grouped['limit'] !== null; $limit = $grouped['limit'] ?? 25; @@ -6152,6 +6162,8 @@ public function count(string $collection, array $queries = [], ?int $max = null) $attributes = $collection->getAttribute('attributes', []); $indexes = $collection->getAttribute('indexes', []); + $this->checkQueriesType($queries); + if ($this->validate) { $validator = new DocumentsValidator( $attributes, @@ -6200,6 +6212,8 @@ public function sum(string $collection, string $attribute, array $queries = [], $attributes = $collection->getAttribute('attributes', []); $indexes = $collection->getAttribute('indexes', []); + $this->checkQueriesType($queries); + if ($this->validate) { $validator = new DocumentsValidator( $attributes, @@ -6685,4 +6699,21 @@ public function getCacheKeys(string $collectionId, ?string $documentId = null, a $documentHashKey ?? null ]; } + + /** + * @param array $queries + * @return void + * @throws QueryException + */ + public function checkQueriesType(array $queries){ + foreach ($queries as $query) { + if (!$query instanceof Query) { + throw new QueryException('Invalid query type: "' . \gettype($query) . '". Expected instances of "' . Query::class . '"'); + } + + if ($query->isNested()) { + $this->checkQueriesType($query->getValues()); + } + } + } } From 90946e3890645335472af1d845dbf674ded751d3 Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 27 May 2025 14:43:33 +0300 Subject: [PATCH 2/3] Check query instance --- src/Database/Adapter/SQL.php | 1 - src/Database/Database.php | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Database/Adapter/SQL.php b/src/Database/Adapter/SQL.php index 4a47c77a8..abf074178 100644 --- a/src/Database/Adapter/SQL.php +++ b/src/Database/Adapter/SQL.php @@ -9,7 +9,6 @@ use Utopia\Database\Document; use Utopia\Database\Exception as DatabaseException; use Utopia\Database\Exception\NotFound as NotFoundException; -use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Exception\Transaction as TransactionException; use Utopia\Database\Query; diff --git a/src/Database/Database.php b/src/Database/Database.php index 9de17ae5f..fe38be153 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -6705,7 +6705,8 @@ public function getCacheKeys(string $collectionId, ?string $documentId = null, a * @return void * @throws QueryException */ - public function checkQueriesType(array $queries){ + public function checkQueriesType(array $queries) + { foreach ($queries as $query) { if (!$query instanceof Query) { throw new QueryException('Invalid query type: "' . \gettype($query) . '". Expected instances of "' . Query::class . '"'); From 9e5657de80f77c4d1ddb94f3315ebc186d9ffc8a Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 27 May 2025 14:52:07 +0300 Subject: [PATCH 3/3] fix --- src/Database/Database.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Database/Database.php b/src/Database/Database.php index fe38be153..8c8515200 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -6072,8 +6072,6 @@ public function find(string $collection, array $queries = [], string $forPermiss */ public function foreach(string $collection, callable $callback, array $queries = [], string $forPermission = Database::PERMISSION_READ): void { - $this->checkQueriesType($queries); - $grouped = Query::groupByType($queries); $limitExists = $grouped['limit'] !== null; $limit = $grouped['limit'] ?? 25;