]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add insertIgnoreConflict to Adapter and use it for for executing the file locking.
authorOle Ostergaard <ole.ostergaard@knime.com>
Mon, 21 Jan 2019 16:54:16 +0000 (17:54 +0100)
committerOle Ostergaard <ole.c.ostergaard@gmail.com>
Thu, 21 Mar 2019 10:42:00 +0000 (11:42 +0100)
Signed-off-by: Ole Ostergaard <ole.c.ostergaard@gmail.com>
lib/private/DB/Adapter.php
lib/private/DB/Connection.php
lib/private/Lock/DBLockingProvider.php

index b9a5f272c576c48883e7da3b978d173721ef5fd0..139b7828596c6166d0800497eadafccb3853ab5e 100644 (file)
@@ -126,4 +126,17 @@ class Adapter {
                        return 0;
                }
        }
+
+       public function insertIgnoreConflict($table, $input) : int {
+               try {
+                       $builder = $this->conn->getQueryBuilder();
+                       $builder->insert($table);
+                       foreach($input as $key => $value) {
+                               $builder->setValue($key, $builder->createNamedParameter($value));
+                       }
+                       return $builder->execute();
+               } catch(UniqueConstraintViolationException $e) {
+                       return 0;
+               }
+       }
 }
index c63ef0067c1283eedc01efa67d624ccc77771320..12a0af6121ef5524a572e7ed21b38f46584dbb2e 100644 (file)
@@ -257,6 +257,10 @@ class Connection extends ReconnectWrapper implements IDBConnection {
                return $this->adapter->insertIfNotExist($table, $input, $compare);
        }
 
+       public function insertIgnoreConflict($table, $input) : int {
+               return $this->adapter->insertIgnoreConflict($table, $input);
+       }
+
        private function getType($value) {
                if (is_bool($value)) {
                        return IQueryBuilder::PARAM_BOOL;
index 6d9c8f1b3d1a90712677100dbc583e2257aba330..a1859047fe6447ae9ad78c80bd4171302bdca453 100644 (file)
@@ -134,17 +134,7 @@ class DBLockingProvider extends AbstractLockingProvider {
 
        protected function initLockField(string $path, int $lock = 0): int {
                $expire = $this->getExpireTime();
-
-               try {
-                       $builder = $this->connection->getQueryBuilder();
-                       return $builder->insert('file_locks')
-                               ->setValue('key', $builder->createNamedParameter($path))
-                               ->setValue('lock', $builder->createNamedParameter($lock))
-                               ->setValue('ttl', $builder->createNamedParameter($expire))
-                               ->execute();
-               } catch(UniqueConstraintViolationException $e) {
-                       return 0;
-               }
+               return $this->connection->insertIgnoreConflict('file_locks', ['key' => $path, 'lock' => $lock, 'ttl' => $expire]);
        }
 
        /**