]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix files_external storage id migration
authorJörn Friedrich Dreyer <jfd@butonic.de>
Thu, 16 Oct 2014 12:50:39 +0000 (14:50 +0200)
committerJörn Friedrich Dreyer <jfd@butonic.de>
Fri, 31 Oct 2014 13:25:55 +0000 (14:25 +0100)
apps/files_external/lib/amazons3.php

index 1869f1b15c2c001b1fa640693897412864296def..53adb929e29c6a6c8d1b9326186a9deb93e15c88 100644 (file)
@@ -123,11 +123,28 @@ class AmazonS3 extends \OC\Files\Storage\Common {
         * @param array $params
         */
        public function updateLegacyId (array $params) {
+               $oldId = 'amazon::' . $params['key'] . md5($params['secret']);
+
+               // find by old id or bucket
                $stmt = \OC::$server->getDatabaseConnection()->prepare(
-                       'UPDATE `*PREFIX*storages` SET `id` = ? WHERE `id` = ?'
+                       'SELECT `numeric_id`, `id` FROM `*PREFIX*storages` WHERE `id` IN (?, ?)'
                );
-               $oldId = 'amazon::' . $params['key'] . md5($params['secret']);
-               $stmt->execute(array($this->id, $oldId));
+               $stmt->execute(array($oldId, $this->id));
+               while ($row = $stmt->fetch()) {
+                       $storages[$row['id']] = $row['numeric_id'];
+               }
+
+               if (isset($storages[$this->id]) && isset($storages[$oldId])) {
+                       // if both ids exist, delete the old storage and corresponding filecache entries
+                       \OC\Files\Cache\Storage::remove($oldId);
+               } else if (isset($storages[$oldId])) {
+                       // if only the old id exists do an update
+                       $stmt = \OC::$server->getDatabaseConnection()->prepare(
+                               'UPDATE `*PREFIX*storages` SET `id` = ? WHERE `id` = ?'
+                       );
+                       $stmt->execute(array($this->id, $oldId));
+               }
+               // only the bucket based id may exist, do nothing
        }
 
        /**