select queries

This commit is contained in:
fogelito
2025-12-21 17:42:57 +02:00
parent a971976587
commit 975510c6a0
3 changed files with 93 additions and 36 deletions
+88 -33
View File
@@ -330,7 +330,10 @@ class Deletes extends Action
$queries[] = Query::equal('resourceType', [$resourceType]);
}
$queries[] = Query::select($this->selects);
foreach ($this->selects as $select) {
$queries[] = Query::select($select);
}
$queries[] = Query::orderAsc();
$this->deleteByGroup(
@@ -367,12 +370,16 @@ class Deletes extends Action
);
$queries = [
Query::select([...$this->selects, 'accessedAt']),
Query::select('accessedAt'),
Query::lessThan('accessedAt', $datetime),
Query::orderDesc('accessedAt'),
Query::orderDesc(),
];
foreach ($this->selects as $select) {
$queries[] = Query::select($select);
}
$this->deleteByGroup(
'cache',
$queries,
@@ -403,27 +410,37 @@ class Deletes extends Action
$selects = [...$this->selects, 'time'];
// Delete Usage stats from projectDB
$this->deleteByGroup('stats', [
Query::select($selects),
$queries = [
Query::equal('period', ['1h']),
Query::lessThan('time', $hourlyUsageRetentionDatetime),
Query::orderDesc('time'),
Query::orderDesc(),
], $dbForProject);
];
foreach ($selects as $select) {
$queries[] = Query::select($select);
}
// Delete Usage stats from projectDB
$this->deleteByGroup('stats', $queries, $dbForProject);
if ($project->getId() !== 'console') {
/** @var Database $dbForLogs */
$dbForLogs = call_user_func($getLogsDB, $project);
// Delete Usage stats from logsDB
$this->deleteByGroup('stats', [
Query::select($selects),
$queries[] = [
Query::equal('period', ['1h']),
Query::lessThan('time', $hourlyUsageRetentionDatetime),
Query::orderDesc('time'),
Query::orderDesc(),
], $dbForLogs);
];
foreach ($selects as $select) {
$queries[] = Query::select($select);
}
// Delete Usage stats from logsDB
$this->deleteByGroup('stats', $queries, $dbForLogs);
}
}
@@ -689,13 +706,19 @@ class Deletes extends Action
{
$dbForProject = $getProjectDB($project);
// Delete Executions
$this->deleteByGroup('executions', [
Query::select([...$this->selects, '$createdAt']),
$queries = [
Query::select('$createdAt'),
Query::lessThan('$createdAt', $datetime),
Query::orderDesc('$createdAt'),
Query::orderDesc(),
], $dbForProject);
];
foreach ($this->selects as $select) {
$queries[] = Query::select($select);
}
// Delete Executions
$this->deleteByGroup('executions', $queries, $dbForProject);
}
/**
@@ -710,13 +733,19 @@ class Deletes extends Action
$duration = $project->getAttribute('auths', [])['duration'] ?? TOKEN_EXPIRATION_LOGIN_LONG;
$expired = DateTime::addSeconds(new \DateTime(), -1 * $duration);
// Delete Sessions
$this->deleteByGroup('sessions', [
Query::select([...$this->selects, '$createdAt']),
$queries = [
Query::select('$createdAt'),
Query::lessThan('$createdAt', $expired),
Query::orderDesc('$createdAt'),
Query::orderDesc(),
], $dbForProject);
];
foreach ($this->selects as $select) {
$queries[] = Query::select($select);
}
// Delete Sessions
$this->deleteByGroup('sessions', $queries, $dbForProject);
}
/**
@@ -738,14 +767,22 @@ class Deletes extends Action
Console::info("Deleting CSV export files older than " . $oneWeekAgo);
$this->deleteByGroup('bucket_' . $bucket->getSequence(), [
Query::select([...$this->selects, '$createdAt', 'name', 'path']),
$queries = [
Query::select('$createdAt'),
Query::select('name'),
Query::select('path'),
Query::equal('bucketId', ['default']),
Query::createdBefore($oneWeekAgo),
Query::endsWith('name', '.csv'),
Query::orderDesc('$createdAt'),
Query::orderDesc(),
], $dbForPlatform, function (Document $file) use ($deviceForFiles) {
];
foreach ($this->selects as $select) {
$queries[] = Query::select($select);
}
$this->deleteByGroup('bucket_' . $bucket->getSequence(), $queries, $dbForPlatform, function (Document $file) use ($deviceForFiles) {
$path = $file->getAttribute('path');
if ($deviceForFiles->exists($path)) {
$deviceForFiles->delete($path);
@@ -782,13 +819,19 @@ class Deletes extends Action
$projectId = $project->getId();
$dbForProject = $getProjectDB($project);
$queries = [
Query::select('time'),
Query::lessThan('time', $auditRetention),
Query::orderDesc('time'),
Query::orderAsc(),
];
foreach ($this->selects as $select) {
$queries[] = Query::select($select);
}
try {
$this->deleteByGroup(Audit::COLLECTION, [
Query::select([...$this->selects, 'time']),
Query::lessThan('time', $auditRetention),
Query::orderDesc('time'),
Query::orderAsc(),
], $dbForProject);
$this->deleteByGroup(Audit::COLLECTION, $queries, $dbForProject);
} catch (DatabaseException $e) {
Console::error('Failed to delete audit logs for project ' . $projectId . ': ' . $e->getMessage());
}
@@ -853,12 +896,18 @@ class Deletes extends Action
* Delete Logs
*/
Console::info("Deleting logs for site " . $siteId);
$this->deleteByGroup('executions', [
Query::select($this->selects),
$queries = [
Query::equal('resourceInternalId', [$siteInternalId]),
Query::equal('resourceType', ['sites']),
Query::orderAsc()
], $dbForProject);
];
foreach ($this->selects as $select) {
$queries[] = Query::select($select);
}
$this->deleteByGroup('executions', $queries, $dbForProject);
/**
* Delete VCS Repositories and VCS Comments
@@ -939,12 +988,18 @@ class Deletes extends Action
* Delete Executions
*/
Console::info("Deleting executions for function " . $functionId);
$this->deleteByGroup('executions', [
Query::select($this->selects),
$queries = [
Query::equal('resourceInternalId', [$functionInternalId]),
Query::equal('resourceType', ['functions']),
Query::orderAsc()
], $dbForProject);
];
foreach ($this->selects as $select) {
$queries[] = Query::select($select);
}
$this->deleteByGroup('executions', $queries, $dbForProject);
/**
* Delete VCS Repositories and VCS Comments
+4 -2
View File
@@ -67,7 +67,7 @@ class V20 extends Filter
$needsRelationships = empty($selections);
if (!$needsRelationships) {
foreach ($selections as $select) {
if (\in_array('*', $select->getValues(), true)) {
if ($select->getValue() === '*') {
$needsRelationships = true;
break;
}
@@ -88,7 +88,9 @@ class V20 extends Filter
);
// Add wildcard + relationship(s) selects
$parsed[] = Query::select($selects);
foreach ($selects as $select) {
$parsed[] = Query::select($select);
}
}
$resolvedQueries = [];
+1 -1
View File
@@ -453,7 +453,7 @@ trait UsersBase
'x-appwrite-project' => $this->getProject()['$id'],
], $this->getHeaders()), [
'queries' => [
Query::select(['name'])->toString()
Query::select('name')->toString()
]
]);
$this->assertEquals($response['headers']['status-code'], 400);