aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Klehr <mklehr@gmx.net>2025-04-03 11:31:34 +0200
committerMarcel Klehr <mklehr@gmx.net>2025-07-15 09:15:16 +0200
commit10cc43041bb6a0fd7470ec13e7e48f871aa1895e (patch)
tree739abeabc1c80ae8648da35b5d2acde87071d510
parentd67c877ac51f762b65de86b8e18b52e5d1a8d32f (diff)
downloadnextcloud-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.php16
-rw-r--r--tests/lib/Files/Cache/FileAccessTest.php9
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);
}
/**