summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2019-10-31 14:22:32 +0100
committerRobin Appelman <robin@icewind.nl>2019-11-13 12:39:43 +0100
commit43fa746ad9eeb8c4596a33aa5b0d9a423dee4da4 (patch)
tree96a194ec04b2e4e85e191c163f756a20b25b8b25 /lib
parent2165f10aaf58d7662d6ffb9cb432b70672fc0738 (diff)
downloadnextcloud-server-43fa746ad9eeb8c4596a33aa5b0d9a423dee4da4.tar.gz
nextcloud-server-43fa746ad9eeb8c4596a33aa5b0d9a423dee4da4.zip
dont create empty filecache extended rows
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib')
-rw-r--r--lib/private/Files/Cache/Cache.php52
1 files changed, 33 insertions, 19 deletions
diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php
index cc4acd82927..dd063903058 100644
--- a/lib/private/Files/Cache/Cache.php
+++ b/lib/private/Files/Cache/Cache.php
@@ -292,14 +292,16 @@ class Cache implements ICache {
if ($builder->execute()) {
$fileId = $builder->getLastInsertId();
- $query = $this->getQueryBuilder();
- $query->insert('filecache_extended');
+ if (count($extensionValues)) {
+ $query = $this->getQueryBuilder();
+ $query->insert('filecache_extended');
- $query->setValue('fileid', $query->createNamedParameter($fileId, IQueryBuilder::PARAM_INT));
- foreach ($extensionValues as $column => $value) {
- $query->setValue($column, $query->createNamedParameter($value));
+ $query->setValue('fileid', $query->createNamedParameter($fileId, IQueryBuilder::PARAM_INT));
+ foreach ($extensionValues as $column => $value) {
+ $query->setValue($column, $query->createNamedParameter($value));
+ }
+ $query->execute();
}
- $query->execute();
$this->eventDispatcher->dispatch(CacheInsertEvent::class, new CacheInsertEvent($this->storage, $file, $fileId));
return $fileId;
@@ -357,21 +359,33 @@ class Cache implements ICache {
}
if (count($extensionValues)) {
- $query = $this->getQueryBuilder();
- $query->update('filecache_extended')
- ->whereFileId($id)
- ->andWhere($query->expr()->orX(...array_map(function ($key, $value) use ($query) {
- return $query->expr()->orX(
- $query->expr()->neq($key, $query->createNamedParameter($value)),
- $query->expr()->isNull($key)
- );
- }, array_keys($extensionValues), array_values($extensionValues))));
+ try {
+ $query = $this->getQueryBuilder();
+ $query->insert('filecache_extended');
- foreach ($extensionValues as $key => $value) {
- $query->set($key, $query->createNamedParameter($value));
- }
+ $query->setValue('fileid', $query->createNamedParameter($id, IQueryBuilder::PARAM_INT));
+ foreach ($extensionValues as $column => $value) {
+ $query->setValue($column, $query->createNamedParameter($value));
+ }
- $query->execute();
+ $query->execute();
+ } catch (UniqueConstraintViolationException $e) {
+ $query = $this->getQueryBuilder();
+ $query->update('filecache_extended')
+ ->whereFileId($id)
+ ->andWhere($query->expr()->orX(...array_map(function ($key, $value) use ($query) {
+ return $query->expr()->orX(
+ $query->expr()->neq($key, $query->createNamedParameter($value)),
+ $query->expr()->isNull($key)
+ );
+ }, array_keys($extensionValues), array_values($extensionValues))));
+
+ foreach ($extensionValues as $key => $value) {
+ $query->set($key, $query->createNamedParameter($value));
+ }
+
+ $query->execute();
+ }
}
$path = $this->getPathById($id);