Skip to content

Commit e704e96

Browse files
authored
Revert "Feat: Lazy-load relationships"
1 parent a21ccfd commit e704e96

9 files changed

Lines changed: 39 additions & 320 deletions

File tree

.github/workflows/tests.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ jobs:
122122
docker load --input /tmp/${{ env.IMAGE }}.tar
123123
docker compose up -d
124124
sleep 10
125-
125+
126126
- name: Wait for Open Runtimes
127127
timeout-minutes: 3
128128
run: |
@@ -273,7 +273,7 @@ jobs:
273273
export _APP_DATABASE_SHARED_TABLES=database_db_main
274274
export _APP_DATABASE_SHARED_TABLES_V1=
275275
fi
276-
276+
277277
docker compose exec -T \
278278
-e _APP_DATABASE_SHARED_TABLES \
279279
-e _APP_DATABASE_SHARED_TABLES_V1 \
@@ -359,4 +359,4 @@ jobs:
359359
docker compose exec -T \
360360
-e _APP_DATABASE_SHARED_TABLES \
361361
-e _APP_DATABASE_SHARED_TABLES_V1 \
362-
appwrite test /usr/src/code/tests/e2e/Services/Projects --debug --group=devKeys
362+
appwrite test /usr/src/code/tests/e2e/Services/Projects --debug --group=devKeys

app/controllers/api/databases.php

Lines changed: 23 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -3649,20 +3649,8 @@ function updateAttribute(
36493649

36503650
$cursor->setValue($cursorDocument);
36513651
}
3652-
3653-
$selectQueries = [];
3654-
36553652
try {
3656-
$selectQueries = Query::groupByType($queries)['selections'] ?? [];
3657-
3658-
if (! empty($selectQueries)) {
3659-
// has selects, allow relationship on documents!
3660-
$documents = $dbForProject->find('database_' . $database->getSequence() . '_collection_' . $collection->getSequence(), $queries);
3661-
} else {
3662-
// has no selects, disable relationship looping on documents!
3663-
$documents = $dbForProject->skipRelationships(fn () => $dbForProject->find('database_' . $database->getSequence() . '_collection_' . $collection->getSequence(), $queries));
3664-
}
3665-
3653+
$documents = $dbForProject->find('database_' . $database->getSequence() . '_collection_' . $collection->getSequence(), $queries);
36663654
$total = $dbForProject->count('database_' . $database->getSequence() . '_collection_' . $collection->getSequence(), $queries, APP_LIMIT_COUNT);
36673655
} catch (OrderException $e) {
36683656
throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null.");
@@ -3735,41 +3723,29 @@ function updateAttribute(
37353723
->addMetric(METRIC_DATABASES_OPERATIONS_READS, \max(1, $operations))
37363724
->addMetric(str_replace('{databaseInternalId}', $database->getSequence(), METRIC_DATABASE_ID_OPERATIONS_READS), \max(1, $operations));
37373725

3726+
$select = \array_reduce($queries, function ($result, $query) {
3727+
return $result || ($query->getMethod() === Query::TYPE_SELECT);
3728+
}, false);
3729+
37383730
// Check if the SELECT query includes $databaseId and $collectionId
3739-
$hasWildcard = false;
37403731
$hasDatabaseId = false;
37413732
$hasCollectionId = false;
3742-
$hasSelectQueries = !empty($selectQueries);
3743-
3744-
if ($hasSelectQueries) {
3745-
foreach ($selectQueries as $query) {
3746-
if ($query->getMethod() !== Query::TYPE_SELECT) {
3747-
continue;
3733+
if ($select) {
3734+
$hasDatabaseId = \array_reduce($queries, function ($result, $query) {
3735+
return $result || ($query->getMethod() === Query::TYPE_SELECT && \in_array('$databaseId', $query->getValues()));
3736+
}, false);
3737+
$hasCollectionId = \array_reduce($queries, function ($result, $query) {
3738+
return $result || ($query->getMethod() === Query::TYPE_SELECT && \in_array('$collectionId', $query->getValues()));
3739+
}, false);
3740+
}
3741+
3742+
if ($select) {
3743+
foreach ($documents as $document) {
3744+
if (!$hasDatabaseId) {
3745+
$document->removeAttribute('$databaseId');
37483746
}
3749-
3750-
$values = $query->getValues();
3751-
if (\in_array('*', $values, true)) {
3752-
$hasWildcard = true;
3753-
break;
3754-
}
3755-
3756-
if (\in_array('$databaseId', $values, true)) {
3757-
$hasDatabaseId = true;
3758-
}
3759-
3760-
if (\in_array('$collectionId', $values, true)) {
3761-
$hasCollectionId = true;
3762-
}
3763-
}
3764-
3765-
if (!$hasWildcard) {
3766-
foreach ($documents as $document) {
3767-
if (!$hasDatabaseId) {
3768-
$document->removeAttribute('$databaseId');
3769-
}
3770-
if (!$hasCollectionId) {
3771-
$document->removeAttribute('$collectionId');
3772-
}
3747+
if (!$hasCollectionId) {
3748+
$document->removeAttribute('$collectionId');
37733749
}
37743750
}
37753751
}
@@ -3827,14 +3803,10 @@ function updateAttribute(
38273803
throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage());
38283804
}
38293805

3830-
$selects = Query::groupByType($queries)['selections'] ?? [];
3831-
3832-
if (! empty($selects)) {
3833-
// has selects, allow relationship on documents!
3806+
try {
38343807
$document = $dbForProject->getDocument('database_' . $database->getSequence() . '_collection_' . $collection->getSequence(), $documentId, $queries);
3835-
} else {
3836-
// has no selects, disable relationship looping on documents!
3837-
$document = $dbForProject->skipRelationships(fn () => $dbForProject->getDocument('database_' . $database->getSequence() . '_collection_' . $collection->getSequence(), $documentId, $queries));
3808+
} catch (QueryException $e) {
3809+
throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage());
38383810
}
38393811

38403812
if ($document->isEmpty()) {

app/controllers/general.php

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,11 @@
2222
use Appwrite\Utopia\Request\Filters\V17 as RequestV17;
2323
use Appwrite\Utopia\Request\Filters\V18 as RequestV18;
2424
use Appwrite\Utopia\Request\Filters\V19 as RequestV19;
25-
use Appwrite\Utopia\Request\Filters\V20 as RequestV20;
2625
use Appwrite\Utopia\Response;
2726
use Appwrite\Utopia\Response\Filters\V16 as ResponseV16;
2827
use Appwrite\Utopia\Response\Filters\V17 as ResponseV17;
2928
use Appwrite\Utopia\Response\Filters\V18 as ResponseV18;
3029
use Appwrite\Utopia\Response\Filters\V19 as ResponseV19;
31-
use Appwrite\Utopia\Response\Filters\V20 as ResponseV20;
3230
use Appwrite\Utopia\View;
3331
use Executor\Executor;
3432
use MaxMind\Db\Reader;
@@ -844,10 +842,6 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw
844842
if (version_compare($requestFormat, '1.7.0', '<')) {
845843
$request->addFilter(new RequestV19());
846844
}
847-
if (version_compare($requestFormat, '1.8.0', '<')) {
848-
$dbForProject = $getProjectDB($project);
849-
$request->addFilter(new RequestV20($dbForProject, $route));
850-
}
851845
}
852846

853847
$domain = $request->getHostname();
@@ -1017,9 +1011,6 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw
10171011
if (version_compare($responseFormat, '1.7.0', '<')) {
10181012
$response->addFilter(new ResponseV19());
10191013
}
1020-
if (version_compare($responseFormat, '1.8.0', '<')) {
1021-
$response->addFilter(new ResponseV20());
1022-
}
10231014
if (version_compare($responseFormat, APP_VERSION_STABLE, '>')) {
10241015
$response->addHeader('X-Appwrite-Warning', "The current SDK is built for Appwrite " . $responseFormat . ". However, the current Appwrite server version is " . APP_VERSION_STABLE . ". Please downgrade your SDK to match the Appwrite version: https://appwrite.io/docs/sdks");
10251016
}

src/Appwrite/Utopia/Request/Filter.php

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,8 @@
22

33
namespace Appwrite\Utopia\Request;
44

5-
use Utopia\Database\Database;
6-
use Utopia\Route;
7-
85
abstract class Filter
96
{
10-
private ?Route $route;
11-
private ?Database $dbForProject;
12-
13-
public function __construct(Database $dbForProject = null, Route $route = null)
14-
{
15-
$this->route = $route;
16-
$this->dbForProject = $dbForProject;
17-
}
18-
197
/**
208
* Parse params to another format.
219
*
@@ -25,33 +13,4 @@ public function __construct(Database $dbForProject = null, Route $route = null)
2513
* @return array
2614
*/
2715
abstract public function parse(array $content, string $model): array;
28-
29-
/**
30-
* Get the database for the current project.
31-
*
32-
* @return null|Database
33-
*/
34-
public function getDbForProject(): ?Database
35-
{
36-
return $this->dbForProject;
37-
}
38-
39-
/**
40-
* Returns the value of the given route param key, or a default if not found or on error.
41-
*
42-
* @param string $key
43-
* @param mixed $default
44-
*
45-
* @return mixed
46-
*/
47-
public function getParamValue(string $key, mixed $default = ''): mixed
48-
{
49-
try {
50-
$value = $this->route?->getParamValue($key) ?? $default;
51-
} catch (\Exception $e) {
52-
$value = $default;
53-
}
54-
55-
return $value;
56-
}
5716
}

src/Appwrite/Utopia/Request/Filters/V19.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public function parse(array $content, string $model): array
3939
return $content;
4040
}
4141

42-
public function convertQueryAttribute(array $content, string $old, string $new): array
42+
public function convertQueryAttribute(array $content, string $old, string $new)
4343
{
4444
if (isset($content['queries']) && is_array($content['queries'])) {
4545
foreach ($content['queries'] as $index => $query) {

src/Appwrite/Utopia/Request/Filters/V20.php

Lines changed: 0 additions & 124 deletions
This file was deleted.

src/Appwrite/Utopia/Response/Filters/V20.php

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)