mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
select queries
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 = [];
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user