fix(FileAccess#getByAncestorInStorage): Use a subquery to fix tests

Signed-off-by: Marcel Klehr <mklehr@gmx.net>
pull/51810/head
Marcel Klehr 2025-04-03 11:31:34 +07:00
parent d67c877ac5
commit 10cc43041b
2 changed files with 16 additions and 9 deletions

@ -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 */

@ -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);
}
/**