Merge pull request #23998 from nextcloud/backport/23937/stable20
[stable20] Use query builder instead of OC_DB in OC\Files\*
This commit is contained in:
commit
73c2ad293b
|
@ -52,12 +52,19 @@ class HomeCache extends Cache {
|
||||||
}
|
}
|
||||||
if ($entry && $entry['mimetype'] === 'httpd/unix-directory') {
|
if ($entry && $entry['mimetype'] === 'httpd/unix-directory') {
|
||||||
$id = $entry['fileid'];
|
$id = $entry['fileid'];
|
||||||
$sql = 'SELECT SUM(`size`) AS f1 ' .
|
|
||||||
'FROM `*PREFIX*filecache` ' .
|
$query = $this->connection->getQueryBuilder();
|
||||||
'WHERE `parent` = ? AND `storage` = ? AND `size` >= 0';
|
$query->selectAlias($query->func()->sum('size'), 'f1')
|
||||||
$result = \OC_DB::executeAudited($sql, [$id, $this->getNumericStorageId()]);
|
->from('filecache')
|
||||||
if ($row = $result->fetchRow()) {
|
->where($query->expr()->eq('parent', $query->createNamedParameter($id)))
|
||||||
$result->closeCursor();
|
->andWhere($query->expr()->eq('storage', $query->createNamedParameter($this->getNumericStorageId())))
|
||||||
|
->andWhere($query->expr()->gte('size', $query->createNamedParameter(0)));
|
||||||
|
|
||||||
|
$result = $query->execute();
|
||||||
|
$row = $result->fetch();
|
||||||
|
$result->closeCursor();
|
||||||
|
|
||||||
|
if ($row) {
|
||||||
list($sum) = array_values($row);
|
list($sum) = array_values($row);
|
||||||
$totalSize = 0 + $sum;
|
$totalSize = 0 + $sum;
|
||||||
$entry['size'] += 0;
|
$entry['size'] += 0;
|
||||||
|
|
|
@ -126,9 +126,14 @@ class Storage {
|
||||||
* @return string|null either the storage id string or null if the numeric id is not known
|
* @return string|null either the storage id string or null if the numeric id is not known
|
||||||
*/
|
*/
|
||||||
public static function getStorageId($numericId) {
|
public static function getStorageId($numericId) {
|
||||||
$sql = 'SELECT `id` FROM `*PREFIX*storages` WHERE `numeric_id` = ?';
|
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
|
||||||
$result = \OC_DB::executeAudited($sql, [$numericId]);
|
$query->select('id')
|
||||||
if ($row = $result->fetchRow()) {
|
->from('storages')
|
||||||
|
->where($query->expr()->eq('numeric_id', $query->createNamedParameter($numericId)));
|
||||||
|
$result = $query->execute();
|
||||||
|
$row = $result->fetch();
|
||||||
|
$result->closeCursor();
|
||||||
|
if ($row) {
|
||||||
return $row['id'];
|
return $row['id'];
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
|
@ -170,9 +175,14 @@ class Storage {
|
||||||
* @param int $delay amount of seconds to delay reconsidering that storage further
|
* @param int $delay amount of seconds to delay reconsidering that storage further
|
||||||
*/
|
*/
|
||||||
public function setAvailability($isAvailable, int $delay = 0) {
|
public function setAvailability($isAvailable, int $delay = 0) {
|
||||||
$sql = 'UPDATE `*PREFIX*storages` SET `available` = ?, `last_checked` = ? WHERE `id` = ?';
|
|
||||||
$available = $isAvailable ? 1 : 0;
|
$available = $isAvailable ? 1 : 0;
|
||||||
\OC_DB::executeAudited($sql, [$available, time() + $delay, $this->storageId]);
|
|
||||||
|
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
|
||||||
|
$query->update('storages')
|
||||||
|
->set('available', $query->createNamedParameter($available))
|
||||||
|
->set('last_checked', $query->createNamedParameter(time() + $delay))
|
||||||
|
->where($query->expr()->eq('id', $query->createNamedParameter($this->storageId)));
|
||||||
|
$query->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -193,12 +203,17 @@ class Storage {
|
||||||
public static function remove($storageId) {
|
public static function remove($storageId) {
|
||||||
$storageId = self::adjustStorageId($storageId);
|
$storageId = self::adjustStorageId($storageId);
|
||||||
$numericId = self::getNumericStorageId($storageId);
|
$numericId = self::getNumericStorageId($storageId);
|
||||||
$sql = 'DELETE FROM `*PREFIX*storages` WHERE `id` = ?';
|
|
||||||
\OC_DB::executeAudited($sql, [$storageId]);
|
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
|
||||||
|
$query->delete('storages')
|
||||||
|
->where($query->expr()->eq('id', $query->createNamedParameter($storageId)));
|
||||||
|
$query->execute();
|
||||||
|
|
||||||
if (!is_null($numericId)) {
|
if (!is_null($numericId)) {
|
||||||
$sql = 'DELETE FROM `*PREFIX*filecache` WHERE `storage` = ?';
|
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
|
||||||
\OC_DB::executeAudited($sql, [$numericId]);
|
$query->delete('filecache')
|
||||||
|
->where($query->expr()->eq('storage', $query->createNamedParameter($numericId)));
|
||||||
|
$query->execute();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,19 +206,19 @@ class ScannerTest extends \Test\TestCase {
|
||||||
public function testBackgroundScanNestedIncompleteFolders() {
|
public function testBackgroundScanNestedIncompleteFolders() {
|
||||||
$this->storage->mkdir('folder');
|
$this->storage->mkdir('folder');
|
||||||
$this->scanner->backgroundScan();
|
$this->scanner->backgroundScan();
|
||||||
|
|
||||||
$this->storage->mkdir('folder/subfolder1');
|
$this->storage->mkdir('folder/subfolder1');
|
||||||
$this->storage->mkdir('folder/subfolder2');
|
$this->storage->mkdir('folder/subfolder2');
|
||||||
|
|
||||||
$this->storage->mkdir('folder/subfolder1/subfolder3');
|
$this->storage->mkdir('folder/subfolder1/subfolder3');
|
||||||
$this->cache->put('folder', ['size' => -1]);
|
$this->cache->put('folder', ['size' => -1]);
|
||||||
$this->cache->put('folder/subfolder1', ['size' => -1]);
|
$this->cache->put('folder/subfolder1', ['size' => -1]);
|
||||||
|
|
||||||
// do a scan to get the folders into the cache.
|
// do a scan to get the folders into the cache.
|
||||||
$this->scanner->backgroundScan();
|
$this->scanner->backgroundScan();
|
||||||
|
|
||||||
$this->assertTrue($this->cache->inCache('folder/subfolder1/subfolder3'));
|
$this->assertTrue($this->cache->inCache('folder/subfolder1/subfolder3'));
|
||||||
|
|
||||||
$this->storage->file_put_contents('folder/subfolder1/bar1.txt', 'foobar');
|
$this->storage->file_put_contents('folder/subfolder1/bar1.txt', 'foobar');
|
||||||
$this->storage->file_put_contents('folder/subfolder1/subfolder3/bar3.txt', 'foobar');
|
$this->storage->file_put_contents('folder/subfolder1/subfolder3/bar3.txt', 'foobar');
|
||||||
$this->storage->file_put_contents('folder/subfolder2/bar2.txt', 'foobar');
|
$this->storage->file_put_contents('folder/subfolder2/bar2.txt', 'foobar');
|
||||||
|
@ -227,7 +227,7 @@ class ScannerTest extends \Test\TestCase {
|
||||||
$this->cache->put('folder/subfolder1', ['size' => -1]);
|
$this->cache->put('folder/subfolder1', ['size' => -1]);
|
||||||
$this->cache->put('folder/subfolder2', ['size' => -1]);
|
$this->cache->put('folder/subfolder2', ['size' => -1]);
|
||||||
$this->cache->put('folder/subfolder1/subfolder3', ['size' => -1]);
|
$this->cache->put('folder/subfolder1/subfolder3', ['size' => -1]);
|
||||||
|
|
||||||
$this->scanner->backgroundScan();
|
$this->scanner->backgroundScan();
|
||||||
|
|
||||||
$this->assertTrue($this->cache->inCache('folder/subfolder1/bar1.txt'));
|
$this->assertTrue($this->cache->inCache('folder/subfolder1/bar1.txt'));
|
||||||
|
@ -343,9 +343,11 @@ class ScannerTest extends \Test\TestCase {
|
||||||
$this->assertTrue($this->cache->inCache('folder/bar.txt'));
|
$this->assertTrue($this->cache->inCache('folder/bar.txt'));
|
||||||
$oldFolderId = $this->cache->getId('folder');
|
$oldFolderId = $this->cache->getId('folder');
|
||||||
|
|
||||||
// delete the folder without removing the childs
|
// delete the folder without removing the children
|
||||||
$sql = 'DELETE FROM `*PREFIX*filecache` WHERE `fileid` = ?';
|
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
|
||||||
\OC_DB::executeAudited($sql, [$oldFolderId]);
|
$query->delete('filecache')
|
||||||
|
->where($query->expr()->eq('fileid', $query->createNamedParameter($oldFolderId)));
|
||||||
|
$query->execute();
|
||||||
|
|
||||||
$cachedData = $this->cache->get('folder/bar.txt');
|
$cachedData = $this->cache->get('folder/bar.txt');
|
||||||
$this->assertEquals($oldFolderId, $cachedData['parent']);
|
$this->assertEquals($oldFolderId, $cachedData['parent']);
|
||||||
|
@ -367,9 +369,11 @@ class ScannerTest extends \Test\TestCase {
|
||||||
$this->assertTrue($this->cache->inCache('folder/bar.txt'));
|
$this->assertTrue($this->cache->inCache('folder/bar.txt'));
|
||||||
$oldFolderId = $this->cache->getId('folder');
|
$oldFolderId = $this->cache->getId('folder');
|
||||||
|
|
||||||
// delete the folder without removing the childs
|
// delete the folder without removing the children
|
||||||
$sql = 'DELETE FROM `*PREFIX*filecache` WHERE `fileid` = ?';
|
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
|
||||||
\OC_DB::executeAudited($sql, [$oldFolderId]);
|
$query->delete('filecache')
|
||||||
|
->where($query->expr()->eq('fileid', $query->createNamedParameter($oldFolderId)));
|
||||||
|
$query->execute();
|
||||||
|
|
||||||
$cachedData = $this->cache->get('folder/bar.txt');
|
$cachedData = $this->cache->get('folder/bar.txt');
|
||||||
$this->assertEquals($oldFolderId, $cachedData['parent']);
|
$this->assertEquals($oldFolderId, $cachedData['parent']);
|
||||||
|
|
Loading…
Reference in New Issue