From fb5d5234ae0da7a18384bac326eb5376aae7716a Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 20 Aug 2025 09:38:03 +0300 Subject: [PATCH 1/7] Nested convert queries --- src/Database/Database.php | 112 +++++++++++++++----- tests/e2e/Adapter/Scopes/AttributeTests.php | 14 +++ 2 files changed, 101 insertions(+), 25 deletions(-) diff --git a/src/Database/Database.php b/src/Database/Database.php index 318b795a9..e9be2eb11 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -6750,47 +6750,109 @@ public function getLimitForIndexes(): int } /** - * @param Document $collection * @param array $queries * @return array - * @throws QueryException * @throws Exception */ - public function convertQueries(Document $collection, array $queries): array + public static function convertQueries(Document $collection, array $queries): array + { + foreach ($queries as $i => $query) { + if ($query->isNested()) { + $values = self::convertQueries($collection, $query->getValues()); + $query->setValues($values); + } + + $query = self::convertQuery($collection, $query); + + $queries[$i] = $query; + } + + return $queries; + } + + /** + * @throws Exception + */ + public static function convertQuery(Document $collection, Query $query): Query { + /** + * @var array $attributes + */ $attributes = $collection->getAttribute('attributes', []); foreach (Database::INTERNAL_ATTRIBUTES as $attribute) { $attributes[] = new Document($attribute); } - foreach ($attributes as $attribute) { - foreach ($queries as $query) { - if ($query->getAttribute() === $attribute->getId()) { - $query->setOnArray($attribute->getAttribute('array', false)); - } + $attribute = new Document(); + + foreach ($attributes as $attr) { + if ($attr->getId() === $query->getAttribute()) { + $attribute = $attr; } + } + + if (! $attribute->isEmpty()) { + $query->setOnArray($attribute->getAttribute('array', false)); if ($attribute->getAttribute('type') == Database::VAR_DATETIME) { - foreach ($queries as $index => $query) { - if ($query->getAttribute() === $attribute->getId()) { - $values = $query->getValues(); - foreach ($values as $valueIndex => $value) { - try { - $values[$valueIndex] = DateTime::setTimezone($value); - } catch (\Throwable $e) { - throw new QueryException($e->getMessage(), $e->getCode(), $e); - } - } - $query->setValues($values); - $queries[$index] = $query; + $values = $query->getValues(); + foreach ($values as $valueIndex => $value) { + try { + $values[$valueIndex] = DateTime::setTimezone($value); + } catch (\Throwable $e) { + throw new QueryException($e->getMessage(), $e->getCode(), $e); } } - } - } - - return $queries; - } + $query->setValues($values); + } + } + + return $query; + } + +// /** +// * @param Document $collection +// * @param array $queries +// * @return array +// * @throws QueryException +// * @throws Exception +// */ +// public function convertQueries2(Document $collection, array $queries): array +// { +// $attributes = $collection->getAttribute('attributes', []); +// +// foreach (Database::INTERNAL_ATTRIBUTES as $attribute) { +// $attributes[] = new Document($attribute); +// } +// +// foreach ($attributes as $attribute) { +// foreach ($queries as $query) { +// if ($query->getAttribute() === $attribute->getId()) { +// $query->setOnArray($attribute->getAttribute('array', false)); +// } +// } +// +// if ($attribute->getAttribute('type') == Database::VAR_DATETIME) { +// foreach ($queries as $index => $query) { +// if ($query->getAttribute() === $attribute->getId()) { +// $values = $query->getValues(); +// foreach ($values as $valueIndex => $value) { +// try { +// $values[$valueIndex] = DateTime::setTimezone($value); +// } catch (\Throwable $e) { +// throw new QueryException($e->getMessage(), $e->getCode(), $e); +// } +// } +// $query->setValues($values); +// $queries[$index] = $query; +// } +// } +// } +// } +// +// return $queries; +// } /** * @return array> diff --git a/tests/e2e/Adapter/Scopes/AttributeTests.php b/tests/e2e/Adapter/Scopes/AttributeTests.php index 3a7ebea05..ad1649eb1 100644 --- a/tests/e2e/Adapter/Scopes/AttributeTests.php +++ b/tests/e2e/Adapter/Scopes/AttributeTests.php @@ -1677,6 +1677,20 @@ public function testCreateDatetime(): void Query::equal('date', [$date]) ]); $this->assertCount(0, $docs); + + + /** + * Test on nested queries + */ + $database->find('datetime', [ + Query::or([ + Query::equal('$createdAt', [$date]), + Query::equal('$updatedAt', [$date]) + ]), + ]); + + $this->assertEquals(999,111); + } } From e4abb78098f9d236be5cbaa62bf662b42485b320 Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 20 Aug 2025 09:42:54 +0300 Subject: [PATCH 2/7] Nested convert queries --- src/Database/Database.php | 47 +-------------------- tests/e2e/Adapter/Scopes/AttributeTests.php | 2 +- 2 files changed, 3 insertions(+), 46 deletions(-) diff --git a/src/Database/Database.php b/src/Database/Database.php index e9be2eb11..02852097a 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -6756,7 +6756,7 @@ public function getLimitForIndexes(): int */ public static function convertQueries(Document $collection, array $queries): array { - foreach ($queries as $i => $query) { + foreach ($queries as $index => $query) { if ($query->isNested()) { $values = self::convertQueries($collection, $query->getValues()); $query->setValues($values); @@ -6764,7 +6764,7 @@ public static function convertQueries(Document $collection, array $queries): arr $query = self::convertQuery($collection, $query); - $queries[$i] = $query; + $queries[$index] = $query; } return $queries; @@ -6811,49 +6811,6 @@ public static function convertQuery(Document $collection, Query $query): Query return $query; } -// /** -// * @param Document $collection -// * @param array $queries -// * @return array -// * @throws QueryException -// * @throws Exception -// */ -// public function convertQueries2(Document $collection, array $queries): array -// { -// $attributes = $collection->getAttribute('attributes', []); -// -// foreach (Database::INTERNAL_ATTRIBUTES as $attribute) { -// $attributes[] = new Document($attribute); -// } -// -// foreach ($attributes as $attribute) { -// foreach ($queries as $query) { -// if ($query->getAttribute() === $attribute->getId()) { -// $query->setOnArray($attribute->getAttribute('array', false)); -// } -// } -// -// if ($attribute->getAttribute('type') == Database::VAR_DATETIME) { -// foreach ($queries as $index => $query) { -// if ($query->getAttribute() === $attribute->getId()) { -// $values = $query->getValues(); -// foreach ($values as $valueIndex => $value) { -// try { -// $values[$valueIndex] = DateTime::setTimezone($value); -// } catch (\Throwable $e) { -// throw new QueryException($e->getMessage(), $e->getCode(), $e); -// } -// } -// $query->setValues($values); -// $queries[$index] = $query; -// } -// } -// } -// } -// -// return $queries; -// } - /** * @return array> */ diff --git a/tests/e2e/Adapter/Scopes/AttributeTests.php b/tests/e2e/Adapter/Scopes/AttributeTests.php index ad1649eb1..6e3bff361 100644 --- a/tests/e2e/Adapter/Scopes/AttributeTests.php +++ b/tests/e2e/Adapter/Scopes/AttributeTests.php @@ -1689,7 +1689,7 @@ public function testCreateDatetime(): void ]), ]); - $this->assertEquals(999,111); + $this->assertEquals(999, 111); } } From 43f5c7924843136c58d3d093f26439b0a1ae6ceb Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 20 Aug 2025 09:45:15 +0300 Subject: [PATCH 3/7] Add tests --- tests/e2e/Adapter/Scopes/AttributeTests.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/e2e/Adapter/Scopes/AttributeTests.php b/tests/e2e/Adapter/Scopes/AttributeTests.php index 6e3bff361..d4398a748 100644 --- a/tests/e2e/Adapter/Scopes/AttributeTests.php +++ b/tests/e2e/Adapter/Scopes/AttributeTests.php @@ -1680,17 +1680,15 @@ public function testCreateDatetime(): void /** - * Test on nested queries + * Test convertQueries for nested queries */ - $database->find('datetime', [ + $docs = $database->find('datetime', [ Query::or([ Query::equal('$createdAt', [$date]), - Query::equal('$updatedAt', [$date]) + Query::equal('date', [$date]) ]), ]); - - $this->assertEquals(999, 111); - + $this->assertCount(0, $docs); } } From 678a8c193b75e709f6ac4f9e8d4a52fa64b9089b Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 20 Aug 2025 09:47:45 +0300 Subject: [PATCH 4/7] Line --- tests/e2e/Adapter/Scopes/AttributeTests.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/e2e/Adapter/Scopes/AttributeTests.php b/tests/e2e/Adapter/Scopes/AttributeTests.php index d4398a748..89ab81a50 100644 --- a/tests/e2e/Adapter/Scopes/AttributeTests.php +++ b/tests/e2e/Adapter/Scopes/AttributeTests.php @@ -1678,9 +1678,8 @@ public function testCreateDatetime(): void ]); $this->assertCount(0, $docs); - /** - * Test convertQueries for nested queries + * Test convertQueries on nested queries */ $docs = $database->find('datetime', [ Query::or([ From 9ec4b3fd6159e2ed2d89a93f0ba512fb82085417 Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 20 Aug 2025 09:55:24 +0300 Subject: [PATCH 5/7] add hints --- src/Database/Database.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Database/Database.php b/src/Database/Database.php index 02852097a..aea1456dd 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -6750,9 +6750,11 @@ public function getLimitForIndexes(): int } /** - * @param array $queries - * @return array - * @throws Exception + * @param Document $collection + * @param array $queries + * @return array + * @throws QueryException + * @throws \Utopia\Database\Exception */ public static function convertQueries(Document $collection, array $queries): array { @@ -6771,7 +6773,11 @@ public static function convertQueries(Document $collection, array $queries): arr } /** - * @throws Exception + * @param Document $collection + * @param Query $query + * @return Query + * @throws QueryException + * @throws \Utopia\Database\Exception */ public static function convertQuery(Document $collection, Query $query): Query { From f74d93a6ea56f498cfc7b3f8793515f509bac18d Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 20 Aug 2025 09:56:53 +0300 Subject: [PATCH 6/7] add hints --- src/Database/Database.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Database/Database.php b/src/Database/Database.php index aea1456dd..d847fae11 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -6751,7 +6751,7 @@ public function getLimitForIndexes(): int /** * @param Document $collection - * @param array $queries + * @param array $queries * @return array * @throws QueryException * @throws \Utopia\Database\Exception From c2a21a0272a01a41e05e84c325b7e7d37e4badad Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 20 Aug 2025 10:01:04 +0300 Subject: [PATCH 7/7] composer check --- src/Database/Database.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Database/Database.php b/src/Database/Database.php index d847fae11..f6ea312d1 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -6752,7 +6752,7 @@ public function getLimitForIndexes(): int /** * @param Document $collection * @param array $queries - * @return array + * @return array * @throws QueryException * @throws \Utopia\Database\Exception */