aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/Files/Config/UserMountCache.php10
-rw-r--r--tests/lib/Files/Config/UserMountCacheTest.php55
2 files changed, 38 insertions, 27 deletions
diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php
index 0afdf9cdcc2..66aa3a6607b 100644
--- a/lib/private/Files/Config/UserMountCache.php
+++ b/lib/private/Files/Config/UserMountCache.php
@@ -237,7 +237,7 @@ class UserMountCache implements IUserMountCache {
$builder = $this->connection->getQueryBuilder();
$query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id', 'mount_provider_class')
->from('mounts', 'm')
- ->where($builder->expr()->eq('user_id', $builder->createPositionalParameter($userUID)));
+ ->where($builder->expr()->eq('user_id', $builder->createNamedParameter($userUID)));
$result = $query->execute();
$rows = $result->fetchAll();
@@ -264,7 +264,7 @@ class UserMountCache implements IUserMountCache {
$builder = $this->connection->getQueryBuilder();
$query = $builder->select('path')
->from('filecache')
- ->where($builder->expr()->eq('fileid', $builder->createPositionalParameter($info->getRootId())));
+ ->where($builder->expr()->eq('fileid', $builder->createNamedParameter($info->getRootId())));
return $query->executeQuery()->fetchOne() ?: '';
}
@@ -278,10 +278,10 @@ class UserMountCache implements IUserMountCache {
$query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id', 'f.path', 'mount_provider_class')
->from('mounts', 'm')
->innerJoin('m', 'filecache', 'f', $builder->expr()->eq('m.root_id', 'f.fileid'))
- ->where($builder->expr()->eq('storage_id', $builder->createPositionalParameter($numericStorageId, IQueryBuilder::PARAM_INT)));
+ ->where($builder->expr()->eq('storage_id', $builder->createNamedParameter($numericStorageId, IQueryBuilder::PARAM_INT)));
if ($user) {
- $query->andWhere($builder->expr()->eq('user_id', $builder->createPositionalParameter($user)));
+ $query->andWhere($builder->expr()->eq('user_id', $builder->createNamedParameter($user)));
}
$result = $query->execute();
@@ -300,7 +300,7 @@ class UserMountCache implements IUserMountCache {
$query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id', 'f.path', 'mount_provider_class')
->from('mounts', 'm')
->innerJoin('m', 'filecache', 'f', $builder->expr()->eq('m.root_id', 'f.fileid'))
- ->where($builder->expr()->eq('root_id', $builder->createPositionalParameter($rootFileId, IQueryBuilder::PARAM_INT)));
+ ->where($builder->expr()->eq('root_id', $builder->createNamedParameter($rootFileId, IQueryBuilder::PARAM_INT)));
$result = $query->execute();
$rows = $result->fetchAll();
diff --git a/tests/lib/Files/Config/UserMountCacheTest.php b/tests/lib/Files/Config/UserMountCacheTest.php
index 13690096d3a..d84f4469e8b 100644
--- a/tests/lib/Files/Config/UserMountCacheTest.php
+++ b/tests/lib/Files/Config/UserMountCacheTest.php
@@ -7,11 +7,13 @@
namespace Test\Files\Config;
+use OC\DB\Exceptions\DbalException;
use OC\DB\QueryBuilder\Literal;
use OC\Files\Mount\MountPoint;
use OC\Files\Storage\Storage;
use OC\User\Manager;
use OCP\Cache\CappedMemoryCache;
+use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\Diagnostics\IEventLogger;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Config\ICachedMountInfo;
@@ -335,29 +337,38 @@ class UserMountCacheTest extends TestCase {
private function createCacheEntry($internalPath, $storageId, $size = 0) {
$internalPath = trim($internalPath, '/');
- $inserted = $this->connection->insertIfNotExist('*PREFIX*filecache', [
- 'storage' => $storageId,
- 'path' => $internalPath,
- 'path_hash' => md5($internalPath),
- 'parent' => -1,
- 'name' => basename($internalPath),
- 'mimetype' => 0,
- 'mimepart' => 0,
- 'size' => $size,
- 'storage_mtime' => 0,
- 'encrypted' => 0,
- 'unencrypted_size' => 0,
- 'etag' => '',
- 'permissions' => 31
- ], ['storage', 'path_hash']);
- if ($inserted) {
- $id = (int)$this->connection->lastInsertId('*PREFIX*filecache');
+ try {
+ $query = $this->connection->getQueryBuilder();
+ $query->insert('filecache')
+ ->values([
+ 'storage' => $query->createNamedParameter($storageId),
+ 'path' => $query->createNamedParameter($internalPath),
+ 'path_hash' => $query->createNamedParameter(md5($internalPath)),
+ 'parent' => $query->createNamedParameter(-1, IQueryBuilder::PARAM_INT),
+ 'name' => $query->createNamedParameter(basename($internalPath)),
+ 'mimetype' => $query->createNamedParameter(0, IQueryBuilder::PARAM_INT),
+ 'mimepart' => $query->createNamedParameter(0, IQueryBuilder::PARAM_INT),
+ 'size' => $query->createNamedParameter($size),
+ 'storage_mtime' => $query->createNamedParameter(0, IQueryBuilder::PARAM_INT),
+ 'encrypted' => $query->createNamedParameter(0, IQueryBuilder::PARAM_INT),
+ 'unencrypted_size' => $query->createNamedParameter(0, IQueryBuilder::PARAM_INT),
+ 'etag' => $query->createNamedParameter(''),
+ 'permissions' => $query->createNamedParameter(31, IQueryBuilder::PARAM_INT),
+ ]);
+ $query->executeStatement();
+ $id = $query->getLastInsertId();
$this->fileIds[] = $id;
- } else {
- $sql = 'SELECT `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` =?';
- $query = $this->connection->prepare($sql);
- $query->execute([$storageId, md5($internalPath)]);
- return (int)$query->fetchOne();
+ } catch (DbalException $e) {
+ if ($e->getReason() === DbalException::REASON_UNIQUE_CONSTRAINT_VIOLATION) {
+ $query = $this->connection->getQueryBuilder();
+ $query->select('fileid')
+ ->from('filecache')
+ ->where($query->expr()->eq('storage', $query->createNamedParameter($storageId)))
+ ->andWhere($query->expr()->eq('path_hash', $query->createNamedParameter(md5($internalPath))));
+ $id = (int)$query->execute()->fetchColumn();
+ } else {
+ throw $e;
+ }
}
return $id;
}