Skip to content

Commit 6284aaa

Browse files
authored
Merge pull request #669 from utopia-php/nested-convert-queries
Nested convert queries
2 parents b9ba929 + c2a21a0 commit 6284aaa

File tree

2 files changed

+56
-20
lines changed

2 files changed

+56
-20
lines changed

src/Database/Database.php

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6754,42 +6754,67 @@ public function getLimitForIndexes(): int
67546754
* @param array<Query> $queries
67556755
* @return array<Query>
67566756
* @throws QueryException
6757-
* @throws Exception
6757+
* @throws \Utopia\Database\Exception
6758+
*/
6759+
public static function convertQueries(Document $collection, array $queries): array
6760+
{
6761+
foreach ($queries as $index => $query) {
6762+
if ($query->isNested()) {
6763+
$values = self::convertQueries($collection, $query->getValues());
6764+
$query->setValues($values);
6765+
}
6766+
6767+
$query = self::convertQuery($collection, $query);
6768+
6769+
$queries[$index] = $query;
6770+
}
6771+
6772+
return $queries;
6773+
}
6774+
6775+
/**
6776+
* @param Document $collection
6777+
* @param Query $query
6778+
* @return Query
6779+
* @throws QueryException
6780+
* @throws \Utopia\Database\Exception
67586781
*/
6759-
public function convertQueries(Document $collection, array $queries): array
6782+
public static function convertQuery(Document $collection, Query $query): Query
67606783
{
6784+
/**
6785+
* @var array<Document> $attributes
6786+
*/
67616787
$attributes = $collection->getAttribute('attributes', []);
67626788

67636789
foreach (Database::INTERNAL_ATTRIBUTES as $attribute) {
67646790
$attributes[] = new Document($attribute);
67656791
}
67666792

6767-
foreach ($attributes as $attribute) {
6768-
foreach ($queries as $query) {
6769-
if ($query->getAttribute() === $attribute->getId()) {
6770-
$query->setOnArray($attribute->getAttribute('array', false));
6771-
}
6793+
$attribute = new Document();
6794+
6795+
foreach ($attributes as $attr) {
6796+
if ($attr->getId() === $query->getAttribute()) {
6797+
$attribute = $attr;
67726798
}
6799+
}
6800+
6801+
if (! $attribute->isEmpty()) {
6802+
$query->setOnArray($attribute->getAttribute('array', false));
67736803

67746804
if ($attribute->getAttribute('type') == Database::VAR_DATETIME) {
6775-
foreach ($queries as $index => $query) {
6776-
if ($query->getAttribute() === $attribute->getId()) {
6777-
$values = $query->getValues();
6778-
foreach ($values as $valueIndex => $value) {
6779-
try {
6780-
$values[$valueIndex] = DateTime::setTimezone($value);
6781-
} catch (\Throwable $e) {
6782-
throw new QueryException($e->getMessage(), $e->getCode(), $e);
6783-
}
6784-
}
6785-
$query->setValues($values);
6786-
$queries[$index] = $query;
6805+
$values = $query->getValues();
6806+
foreach ($values as $valueIndex => $value) {
6807+
try {
6808+
$values[$valueIndex] = DateTime::setTimezone($value);
6809+
} catch (\Throwable $e) {
6810+
throw new QueryException($e->getMessage(), $e->getCode(), $e);
67876811
}
67886812
}
6813+
$query->setValues($values);
67896814
}
67906815
}
67916816

6792-
return $queries;
6817+
return $query;
67936818
}
67946819

67956820
/**

tests/e2e/Adapter/Scopes/AttributeTests.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1677,6 +1677,17 @@ public function testCreateDatetime(): void
16771677
Query::equal('date', [$date])
16781678
]);
16791679
$this->assertCount(0, $docs);
1680+
1681+
/**
1682+
* Test convertQueries on nested queries
1683+
*/
1684+
$docs = $database->find('datetime', [
1685+
Query::or([
1686+
Query::equal('$createdAt', [$date]),
1687+
Query::equal('date', [$date])
1688+
]),
1689+
]);
1690+
$this->assertCount(0, $docs);
16801691
}
16811692
}
16821693

0 commit comments

Comments
 (0)