diff --git a/app/controllers/api/databases.php b/app/controllers/api/databases.php index f1f3356ff1..48246646b1 100644 --- a/app/controllers/api/databases.php +++ b/app/controllers/api/databases.php @@ -25,7 +25,6 @@ use Utopia\Database\Adapter\MariaDB; use Utopia\Database\Validator\Authorization; use Utopia\Database\Validator\Key; use Utopia\Database\Validator\Permissions; -use Utopia\Database\Validator\Query as QueryValidator; use Utopia\Database\Validator\Structure; use Utopia\Database\Validator\UID; use Utopia\Database\Exception\Authorization as AuthorizationException; @@ -38,8 +37,8 @@ use Appwrite\Network\Validator\Email; use Appwrite\Network\Validator\IP; use Appwrite\Network\Validator\URL; use Appwrite\Utopia\Database\Validator\CustomId; -use Appwrite\Utopia\Database\Validator\Queries as QueriesValidator; -use Appwrite\Utopia\Database\Validator\OrderAttributes; +use Appwrite\Utopia\Database\Validator\IndexedQueries; +use Appwrite\Utopia\Database\Validator\Queries\LimitOffsetCursorFilterOrderQuery; use Appwrite\Utopia\Response; use Appwrite\Detector\Detector; use Appwrite\Event\Database as EventDatabase; @@ -2062,7 +2061,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents') if (!empty($allQueries)) { $attributes = $collection->getAttribute('attributes', []); - $validator = new QueriesValidator(new QueryValidator($attributes), $attributes, $collection->getAttribute('indexes', []), true); + $validator = new IndexedQueries(new LimitOffsetCursorFilterOrderQuery(attributes: $attributes), $attributes, $collection->getAttribute('indexes', [])); if (!$validator->isValid($allQueries)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); } diff --git a/src/Appwrite/Utopia/Database/Validator/IndexedQueries.php b/src/Appwrite/Utopia/Database/Validator/IndexedQueries.php index 2f9543aab7..f1f3e62eb9 100644 --- a/src/Appwrite/Utopia/Database/Validator/IndexedQueries.php +++ b/src/Appwrite/Utopia/Database/Validator/IndexedQueries.php @@ -103,11 +103,19 @@ class IndexedQueries extends Queries */ public function isValid($value): bool { - if (!$this->isValid($value)) { + if (!parent::isValid($value)) { return false; } - $queries = Query::parseQueries($value); + $queries = []; + foreach ($value as $query) { + if (!$query instanceof Query) { + $query = Query::parse($query); + } + + $queries[] = $query; + } + $grouped = Query::groupByType($queries); /** @var Query[] */ $filters = $grouped['filters']; /** @var string[] */ $orderAttributes = $grouped['orderAttributes']; diff --git a/src/Appwrite/Utopia/Database/Validator/Queries/LimitOffsetCursorQuery.php b/src/Appwrite/Utopia/Database/Validator/Queries/LimitOffsetCursorQuery.php index 57f7370a54..f74d41474c 100644 --- a/src/Appwrite/Utopia/Database/Validator/Queries/LimitOffsetCursorQuery.php +++ b/src/Appwrite/Utopia/Database/Validator/Queries/LimitOffsetCursorQuery.php @@ -44,7 +44,7 @@ class LimitOffsetCursorQuery extends LimitOffsetQuery * 2. method is cursorBefore or cursorAfter and value is not null * * Otherwise, returns false - * + * * @param Query $value * * @return bool