From 69a3d8eb1a7b2f98aa2494415e730ad4c8c3128a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Thu, 16 Oct 2014 14:50:39 +0200 Subject: [PATCH] fix files_external storage id migration --- apps/files_external/lib/amazons3.php | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php index 1869f1b15c..53adb929e2 100644 --- a/apps/files_external/lib/amazons3.php +++ b/apps/files_external/lib/amazons3.php @@ -123,11 +123,28 @@ class AmazonS3 extends \OC\Files\Storage\Common { * @param array $params */ public function updateLegacyId (array $params) { - $stmt = \OC::$server->getDatabaseConnection()->prepare( - 'UPDATE `*PREFIX*storages` SET `id` = ? WHERE `id` = ?' - ); $oldId = 'amazon::' . $params['key'] . md5($params['secret']); - $stmt->execute(array($this->id, $oldId)); + + // find by old id or bucket + $stmt = \OC::$server->getDatabaseConnection()->prepare( + 'SELECT `numeric_id`, `id` FROM `*PREFIX*storages` WHERE `id` IN (?, ?)' + ); + $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 } /**