Skip to content

Commit 32b7949

Browse files
committed
fix: eliminate parameter accumulation
Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
1 parent 4552fc8 commit 32b7949

2 files changed

Lines changed: 27 additions & 29 deletions

File tree

lib/private/Files/Cache/Cache.php

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,9 +1028,19 @@ protected function calculateFolderSizeInner(string $path, $entry = null, bool $i
10281028
$id = $entry['fileid'];
10291029

10301030
$query = $this->getQueryBuilder();
1031+
$sizeCol = $query->getColumnName('size');
1032+
$unencryptedSizeCol = $query->getColumnName('unencrypted_size');
10311033
$query->selectAlias($query->func()->sum('size'), 'size_sum')
10321034
->selectAlias($query->func()->min('size'), 'size_min')
10331035
->selectAlias($query->func()->max('unencrypted_size'), 'unencrypted_max')
1036+
->selectAlias(
1037+
$query->createFunction("SUM(CASE WHEN $unencryptedSizeCol > 0 THEN $unencryptedSizeCol ELSE $sizeCol END)"),
1038+
'unencrypted_sum'
1039+
)
1040+
->selectAlias(
1041+
$query->createFunction("MIN(CASE WHEN $unencryptedSizeCol > 0 THEN $unencryptedSizeCol ELSE $sizeCol END)"),
1042+
'unencrypted_min'
1043+
)
10341044
->from('filecache')
10351045
->whereStorageId($this->getNumericStorageId())
10361046
->whereParent($id);
@@ -1047,31 +1057,15 @@ protected function calculateFolderSizeInner(string $path, $entry = null, bool $i
10471057
$sum = Util::numericToNumber($agg['size_sum']);
10481058
$min = Util::numericToNumber($agg['size_min']);
10491059
$unencryptedMax = Util::numericToNumber($agg['unencrypted_max'] ?? 0);
1060+
$unencryptedSum = Util::numericToNumber($agg['unencrypted_sum']);
1061+
$unencryptedMin = Util::numericToNumber($agg['unencrypted_min'] ?? 0);
10501062

10511063
$sum = 0 + $sum;
10521064
$min = 0 + $min;
1053-
$totalSize = ($min === -1) ? $min : $sum;
1065+
$unencryptedSum = 0 + $unencryptedSum;
1066+
$unencryptedMin = 0 + $unencryptedMin;
10541067

1055-
$query = $this->getQueryBuilder();
1056-
$query->select('size', 'unencrypted_size')
1057-
->from('filecache')
1058-
->whereStorageId($this->getNumericStorageId())
1059-
->whereParent($id);
1060-
if ($ignoreUnknown) {
1061-
$query->andWhere($query->expr()->gte('size', $query->createNamedParameter(0)));
1062-
}
1063-
$result = $query->executeQuery();
1064-
$rows = $result->fetchAll();
1065-
$result->closeCursor();
1066-
1067-
$unencryptedSizes = array_map(function (array $row) {
1068-
$u = Util::numericToNumber($row['unencrypted_size']);
1069-
$s = Util::numericToNumber($row['size']);
1070-
return ($u > 0) ? $u : $s;
1071-
}, $rows);
1072-
1073-
$unencryptedSum = array_sum($unencryptedSizes);
1074-
$unencryptedMin = $unencryptedSizes ? min($unencryptedSizes) : 0;
1068+
$totalSize = ($min === -1) ? $min : $sum;
10751069

10761070
if ($unencryptedMin === -1 || $min === -1) {
10771071
$unencryptedTotal = $unencryptedMin;

lib/private/Files/Cache/Propagator.php

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -218,12 +218,14 @@ public function commitBatch(): void {
218218
$query = $this->connection->getQueryBuilder();
219219
$query->update('filecache')
220220
->set('mtime', $query->func()->greatest('mtime', $query->createParameter('time')))
221+
->set('etag', $query->createParameter('etag'))
221222
->where($query->expr()->eq('storage', $query->createNamedParameter($storageId, IQueryBuilder::PARAM_INT)))
222223
->andWhere($query->expr()->eq('fileid', $query->createParameter('fileid')));
223224

224225
$queryWithSize = $this->connection->getQueryBuilder();
225226
$queryWithSize->update('filecache')
226227
->set('mtime', $queryWithSize->func()->greatest('mtime', $queryWithSize->createParameter('time')))
228+
->set('etag', $queryWithSize->createParameter('etag'))
227229
->set('size', $queryWithSize->func()->add('size', $queryWithSize->createParameter('size')))
228230
->where($queryWithSize->expr()->eq('storage', $queryWithSize->createNamedParameter($storageId, IQueryBuilder::PARAM_INT)))
229231
->andWhere($queryWithSize->expr()->eq('fileid', $queryWithSize->createParameter('fileid')));
@@ -234,13 +236,13 @@ public function commitBatch(): void {
234236
if ($item['size'] && $row['size'] > -1) {
235237
$queryWithSize->setParameter('fileid', $row['fileid'], IQueryBuilder::PARAM_INT)
236238
->setParameter('size', $item['size'], IQueryBuilder::PARAM_INT)
237-
->setParameter('time', $item['time'], IQueryBuilder::PARAM_INT);
238-
$queryWithSize->set('etag', $queryWithSize->createNamedParameter($newEtag, IQueryBuilder::PARAM_STR));
239+
->setParameter('time', $item['time'], IQueryBuilder::PARAM_INT)
240+
->setParameter('etag', $newEtag, IQueryBuilder::PARAM_STR);
239241
$queryWithSize->executeStatement();
240242
} else {
241243
$query->setParameter('fileid', $row['fileid'], IQueryBuilder::PARAM_INT)
242-
->setParameter('time', $item['time'], IQueryBuilder::PARAM_INT);
243-
$query->set('etag', $query->createNamedParameter($newEtag, IQueryBuilder::PARAM_STR));
244+
->setParameter('time', $item['time'], IQueryBuilder::PARAM_INT)
245+
->setParameter('etag', $newEtag, IQueryBuilder::PARAM_STR);
244246
$query->executeStatement();
245247
}
246248
}
@@ -250,12 +252,14 @@ public function commitBatch(): void {
250252
$query = $this->connection->getQueryBuilder();
251253
$query->update('filecache')
252254
->set('mtime', $query->func()->greatest('mtime', $query->createParameter('time')))
255+
->set('etag', $query->createParameter('etag'))
253256
->where($query->expr()->eq('storage', $query->createNamedParameter($storageId, IQueryBuilder::PARAM_INT)))
254257
->andWhere($query->expr()->eq('path_hash', $query->createParameter('hash')));
255258

256259
$queryWithSize = $this->connection->getQueryBuilder();
257260
$queryWithSize->update('filecache')
258261
->set('mtime', $queryWithSize->func()->greatest('mtime', $queryWithSize->createParameter('time')))
262+
->set('etag', $queryWithSize->createParameter('etag'))
259263
->set('size', $queryWithSize->func()->add('size', $queryWithSize->createParameter('size')))
260264
->where($queryWithSize->expr()->eq('storage', $queryWithSize->createNamedParameter($storageId, IQueryBuilder::PARAM_INT)))
261265
->andWhere($queryWithSize->expr()->eq('path_hash', $queryWithSize->createParameter('hash')));
@@ -265,13 +269,13 @@ public function commitBatch(): void {
265269
if ($item['size']) {
266270
$queryWithSize->setParameter('hash', $item['hash'], IQueryBuilder::PARAM_STR)
267271
->setParameter('time', $item['time'], IQueryBuilder::PARAM_INT)
268-
->setParameter('size', $item['size'], IQueryBuilder::PARAM_INT);
269-
$queryWithSize->set('etag', $queryWithSize->createNamedParameter($newEtag, IQueryBuilder::PARAM_STR));
272+
->setParameter('size', $item['size'], IQueryBuilder::PARAM_INT)
273+
->setParameter('etag', $newEtag, IQueryBuilder::PARAM_STR);
270274
$queryWithSize->executeStatement();
271275
} else {
272276
$query->setParameter('hash', $item['hash'], IQueryBuilder::PARAM_STR)
273-
->setParameter('time', $item['time'], IQueryBuilder::PARAM_INT);
274-
$query->set('etag', $query->createNamedParameter($newEtag, IQueryBuilder::PARAM_STR));
277+
->setParameter('time', $item['time'], IQueryBuilder::PARAM_INT)
278+
->setParameter('etag', $newEtag, IQueryBuilder::PARAM_STR);
275279
$query->executeStatement();
276280
}
277281
}

0 commit comments

Comments
 (0)