From 34dc2263da8c3a227d59b9fb6b6dab0ce232ef74 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Mon, 24 Apr 2023 21:48:36 -0700 Subject: [PATCH] tw: fix cleanup function Signed-off-by: Varun Patil --- lib/Db/TimelineWrite.php | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/lib/Db/TimelineWrite.php b/lib/Db/TimelineWrite.php index bffb4cdf..9b79fe17 100644 --- a/lib/Db/TimelineWrite.php +++ b/lib/Db/TimelineWrite.php @@ -221,17 +221,22 @@ class TimelineWrite // Begin transaction $this->connection->beginTransaction(); - // Existence clause - $clause = 'SELECT 1 FROM *PREFIX*filecache AS f - WHERE f.fileid=m.fileid - AND f.path NOT LIKE "files_trashbin/%"'; - // Delete all stale records foreach (DELETE_TABLES as $table) { - // Query builder doesn't add the table to delete from, - // so we use need to use raw SQL here :/ - $sql = "DELETE m FROM *PREFIX*{$table} m WHERE NOT EXISTS ({$clause})"; - $this->connection->executeStatement($sql); + $query = $this->connection->getQueryBuilder(); + $clause = $query + ->select($query->expr()->literal('1')) + ->from('filecache', 'f') + ->where($query->expr()->eq('f.fileid', "*PREFIX*{$table}.fileid")) + ->andWhere($query->expr()->notLike('f.path', $query->expr()->literal('files_trashbin/%'))) + ->getSQL() + ; + + $query = $this->connection->getQueryBuilder(); + $query->delete($table) + ->where($query->createFunction("NOT EXISTS({$clause})")) + ->executeStatement() + ; } // Commit transaction