From 69a3d8eb1a7b2f98aa2494415e730ad4c8c3128a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Thu, 16 Oct 2014 14:50:39 +0200
Subject: [PATCH] fix files_external storage id migration

---
 apps/files_external/lib/amazons3.php | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 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) {
+		$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
 	}
 
 	/**
-- 
GitLab