Skip to content

Commit 72545ff

Browse files
authored
Merge pull request #23937 from nextcloud/bugfix/noid/files-ocdb
Use query builder instead of OC_DB in OC\Files\*
2 parents f02bab1 + c07720d commit 72545ff

File tree

3 files changed

+52
-26
lines changed

3 files changed

+52
-26
lines changed

lib/private/Files/Cache/HomeCache.php

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,19 @@ public function calculateFolderSize($path, $entry = null) {
5252
}
5353
if ($entry && $entry['mimetype'] === 'httpd/unix-directory') {
5454
$id = $entry['fileid'];
55-
$sql = 'SELECT SUM(`size`) AS f1 ' .
56-
'FROM `*PREFIX*filecache` ' .
57-
'WHERE `parent` = ? AND `storage` = ? AND `size` >= 0';
58-
$result = \OC_DB::executeAudited($sql, [$id, $this->getNumericStorageId()]);
59-
if ($row = $result->fetchRow()) {
60-
$result->closeCursor();
55+
56+
$query = $this->connection->getQueryBuilder();
57+
$query->selectAlias($query->func()->sum('size'), 'f1')
58+
->from('filecache')
59+
->where($query->expr()->eq('parent', $query->createNamedParameter($id)))
60+
->andWhere($query->expr()->eq('storage', $query->createNamedParameter($this->getNumericStorageId())))
61+
->andWhere($query->expr()->gte('size', $query->createNamedParameter(0)));
62+
63+
$result = $query->execute();
64+
$row = $result->fetch();
65+
$result->closeCursor();
66+
67+
if ($row) {
6168
list($sum) = array_values($row);
6269
$totalSize = 0 + $sum;
6370
$entry['size'] += 0;

lib/private/Files/Cache/Storage.php

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,14 @@ public function getNumericId() {
126126
* @return string|null either the storage id string or null if the numeric id is not known
127127
*/
128128
public static function getStorageId($numericId) {
129-
$sql = 'SELECT `id` FROM `*PREFIX*storages` WHERE `numeric_id` = ?';
130-
$result = \OC_DB::executeAudited($sql, [$numericId]);
131-
if ($row = $result->fetchRow()) {
129+
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
130+
$query->select('id')
131+
->from('storages')
132+
->where($query->expr()->eq('numeric_id', $query->createNamedParameter($numericId)));
133+
$result = $query->execute();
134+
$row = $result->fetch();
135+
$result->closeCursor();
136+
if ($row) {
132137
return $row['id'];
133138
} else {
134139
return null;
@@ -170,9 +175,14 @@ public function getAvailability() {
170175
* @param int $delay amount of seconds to delay reconsidering that storage further
171176
*/
172177
public function setAvailability($isAvailable, int $delay = 0) {
173-
$sql = 'UPDATE `*PREFIX*storages` SET `available` = ?, `last_checked` = ? WHERE `id` = ?';
174178
$available = $isAvailable ? 1 : 0;
175-
\OC_DB::executeAudited($sql, [$available, time() + $delay, $this->storageId]);
179+
180+
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
181+
$query->update('storages')
182+
->set('available', $query->createNamedParameter($available))
183+
->set('last_checked', $query->createNamedParameter(time() + $delay))
184+
->where($query->expr()->eq('id', $query->createNamedParameter($this->storageId)));
185+
$query->execute();
176186
}
177187

178188
/**
@@ -193,12 +203,17 @@ public static function exists($storageId) {
193203
public static function remove($storageId) {
194204
$storageId = self::adjustStorageId($storageId);
195205
$numericId = self::getNumericStorageId($storageId);
196-
$sql = 'DELETE FROM `*PREFIX*storages` WHERE `id` = ?';
197-
\OC_DB::executeAudited($sql, [$storageId]);
206+
207+
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
208+
$query->delete('storages')
209+
->where($query->expr()->eq('id', $query->createNamedParameter($storageId)));
210+
$query->execute();
198211

199212
if (!is_null($numericId)) {
200-
$sql = 'DELETE FROM `*PREFIX*filecache` WHERE `storage` = ?';
201-
\OC_DB::executeAudited($sql, [$numericId]);
213+
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
214+
$query->delete('filecache')
215+
->where($query->expr()->eq('storage', $query->createNamedParameter($numericId)));
216+
$query->execute();
202217
}
203218
}
204219
}

tests/lib/Files/Cache/ScannerTest.php

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -206,19 +206,19 @@ public function testBackgroundScanOnlyRecurseIncomplete() {
206206
public function testBackgroundScanNestedIncompleteFolders() {
207207
$this->storage->mkdir('folder');
208208
$this->scanner->backgroundScan();
209-
209+
210210
$this->storage->mkdir('folder/subfolder1');
211211
$this->storage->mkdir('folder/subfolder2');
212-
212+
213213
$this->storage->mkdir('folder/subfolder1/subfolder3');
214214
$this->cache->put('folder', ['size' => -1]);
215215
$this->cache->put('folder/subfolder1', ['size' => -1]);
216-
216+
217217
// do a scan to get the folders into the cache.
218218
$this->scanner->backgroundScan();
219219

220220
$this->assertTrue($this->cache->inCache('folder/subfolder1/subfolder3'));
221-
221+
222222
$this->storage->file_put_contents('folder/subfolder1/bar1.txt', 'foobar');
223223
$this->storage->file_put_contents('folder/subfolder1/subfolder3/bar3.txt', 'foobar');
224224
$this->storage->file_put_contents('folder/subfolder2/bar2.txt', 'foobar');
@@ -227,7 +227,7 @@ public function testBackgroundScanNestedIncompleteFolders() {
227227
$this->cache->put('folder/subfolder1', ['size' => -1]);
228228
$this->cache->put('folder/subfolder2', ['size' => -1]);
229229
$this->cache->put('folder/subfolder1/subfolder3', ['size' => -1]);
230-
230+
231231
$this->scanner->backgroundScan();
232232

233233
$this->assertTrue($this->cache->inCache('folder/subfolder1/bar1.txt'));
@@ -343,9 +343,11 @@ public function testRepairParent() {
343343
$this->assertTrue($this->cache->inCache('folder/bar.txt'));
344344
$oldFolderId = $this->cache->getId('folder');
345345

346-
// delete the folder without removing the childs
347-
$sql = 'DELETE FROM `*PREFIX*filecache` WHERE `fileid` = ?';
348-
\OC_DB::executeAudited($sql, [$oldFolderId]);
346+
// delete the folder without removing the children
347+
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
348+
$query->delete('filecache')
349+
->where($query->expr()->eq('fileid', $query->createNamedParameter($oldFolderId)));
350+
$query->execute();
349351

350352
$cachedData = $this->cache->get('folder/bar.txt');
351353
$this->assertEquals($oldFolderId, $cachedData['parent']);
@@ -367,9 +369,11 @@ public function testRepairParentShallow() {
367369
$this->assertTrue($this->cache->inCache('folder/bar.txt'));
368370
$oldFolderId = $this->cache->getId('folder');
369371

370-
// delete the folder without removing the childs
371-
$sql = 'DELETE FROM `*PREFIX*filecache` WHERE `fileid` = ?';
372-
\OC_DB::executeAudited($sql, [$oldFolderId]);
372+
// delete the folder without removing the children
373+
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
374+
$query->delete('filecache')
375+
->where($query->expr()->eq('fileid', $query->createNamedParameter($oldFolderId)));
376+
$query->execute();
373377

374378
$cachedData = $this->cache->get('folder/bar.txt');
375379
$this->assertEquals($oldFolderId, $cachedData['parent']);

0 commit comments

Comments
 (0)