diff options
author | Marcel Klehr <mklehr@gmx.net> | 2025-04-03 11:31:34 +0200 |
---|---|---|
committer | Marcel Klehr <mklehr@gmx.net> | 2025-07-15 09:15:16 +0200 |
commit | 10cc43041bb6a0fd7470ec13e7e48f871aa1895e (patch) | |
tree | 739abeabc1c80ae8648da35b5d2acde87071d510 | |
parent | d67c877ac51f762b65de86b8e18b52e5d1a8d32f (diff) | |
download | nextcloud-server-10cc43041bb6a0fd7470ec13e7e48f871aa1895e.tar.gz nextcloud-server-10cc43041bb6a0fd7470ec13e7e48f871aa1895e.zip |
fix(FileAccess#getByAncestorInStorage): Use a subquery to fix tests
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
-rw-r--r-- | lib/private/Files/Cache/FileAccess.php | 16 | ||||
-rw-r--r-- | tests/lib/Files/Cache/FileAccessTest.php | 9 |
2 files changed, 16 insertions, 9 deletions
diff --git a/lib/private/Files/Cache/FileAccess.php b/lib/private/Files/Cache/FileAccess.php index 2ddd18f1601..43aa9224b34 100644 --- a/lib/private/Files/Cache/FileAccess.php +++ b/lib/private/Files/Cache/FileAccess.php @@ -135,8 +135,16 @@ class FileAccess implements IFileAccess { if (!$endToEndEncrypted) { // End to end encrypted files are descendants of a folder with encrypted=1 - $qb->leftJoin('f', 'filecache', 'p', $qb->expr()->eq('f.parent', 'p.fileid')); - $qb->andWhere($qb->expr()->eq('p.encrypted', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT))); + // Use a subquery to check the `encrypted` status of the parent folder + $subQuery = $this->getQuery()->select('p.encrypted') + ->from('filecache', 'p') + ->andWhere($qb->expr()->eq('p.fileid', 'f.parent')) + ->setMaxResults(1) + ->getSQL(); + + $qb->andWhere( + $qb->expr()->eq($qb->createFunction(sprintf('(%s)', $subQuery)), $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)) + ); } if (!$serverSideEncrypted) { @@ -151,8 +159,8 @@ class FileAccess implements IFileAccess { if ($maxResults !== 0) { $qb->setMaxResults($maxResults); } - $files = $qb->orderBy('f.fileid', 'ASC') - ->executeQuery(); + $qb->orderBy('f.fileid', 'ASC'); + $files = $qb->executeQuery(); while ( /** @var array */ diff --git a/tests/lib/Files/Cache/FileAccessTest.php b/tests/lib/Files/Cache/FileAccessTest.php index 2078412ad73..3dec6e8893c 100644 --- a/tests/lib/Files/Cache/FileAccessTest.php +++ b/tests/lib/Files/Cache/FileAccessTest.php @@ -250,7 +250,7 @@ class FileAccessTest extends TestCase { $queryBuilder->insert('filecache') ->values([ 'fileid' => 5, - 'parent' => 0, + 'parent' => 1, 'path' => $queryBuilder->createNamedParameter('files/serversideencrypted'), 'path_hash' => $queryBuilder->createNamedParameter(md5('files/serversideencrypted')), 'storage' => $queryBuilder->createNamedParameter(1), @@ -350,10 +350,9 @@ class FileAccessTest extends TestCase { $result = iterator_to_array($generator); - var_dump($result); - - $this->assertCount(1, $result); - $this->assertEquals('files/serversideencrypted', $result[0]->getPath()); + $this->assertCount(3, $result); + $paths = array_map(fn(CacheEntry $entry) => $entry->getPath(), $result); + $this->assertEquals(['files/documents', 'files/photos', 'files/serversideencrypted'], $paths); } /** |