summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Gapczynski <mtgap@owncloud.com>2013-05-25 11:18:20 -0700
committerMichael Gapczynski <mtgap@owncloud.com>2013-05-25 11:18:20 -0700
commit0fdf3a7e635936ac0b5e66c215d1666fac5f5c32 (patch)
tree6fa9815c4a67762ea3cf1deed5c6ebdd4cfbdfce
parentc870aed1b66a4f0a2ad6fbe9fbd8d2e35d6f9b40 (diff)
parent5c112657b23e546b0ef31ebff11f48a0e2e2c6fc (diff)
downloadnextcloud-server-0fdf3a7e635936ac0b5e66c215d1666fac5f5c32.tar.gz
nextcloud-server-0fdf3a7e635936ac0b5e66c215d1666fac5f5c32.zip
Merge pull request #3388 from roha4000/master
Duplicate DB entries in filecache table when renaming folder in WebUI #2
-rw-r--r--lib/files/cache/cache.php4
-rw-r--r--tests/lib/files/cache/cache.php27
2 files changed, 29 insertions, 2 deletions
diff --git a/lib/files/cache/cache.php b/lib/files/cache/cache.php
index b912b4423e7..0210d5a73f1 100644
--- a/lib/files/cache/cache.php
+++ b/lib/files/cache/cache.php
@@ -340,8 +340,8 @@ class Cache {
if ($sourceData['mimetype'] === 'httpd/unix-directory') {
//find all child entries
- $query = \OC_DB::prepare('SELECT `path`, `fileid` FROM `*PREFIX*filecache` WHERE `path` LIKE ?');
- $result = $query->execute(array($source . '/%'));
+ $query = \OC_DB::prepare('SELECT `path`, `fileid` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path` LIKE ?');
+ $result = $query->execute(array($this->getNumericStorageId(), $source . '/%'));
$childEntries = $result->fetchAll();
$sourceLength = strlen($source);
$query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ? WHERE `fileid` = ?');
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
index 1612a673838..d8b6541bd0c 100644
--- a/tests/lib/files/cache/cache.php
+++ b/tests/lib/files/cache/cache.php
@@ -19,11 +19,19 @@ class Cache extends \PHPUnit_Framework_TestCase {
* @var \OC\Files\Storage\Temporary $storage;
*/
private $storage;
+ /**
+ * @var \OC\Files\Storage\Temporary $storage2;
+ */
+ private $storage2;
/**
* @var \OC\Files\Cache\Cache $cache
*/
private $cache;
+ /**
+ * @var \OC\Files\Cache\Cache $cache2
+ */
+ private $cache2;
public function testSimple() {
$file1 = 'foo';
@@ -170,6 +178,13 @@ class Cache extends \PHPUnit_Framework_TestCase {
$this->cache->put($file4, $data);
$this->cache->put($file5, $data);
+ /* simulate a second user with a different storage id but the same folder structure */
+ $this->cache2->put($file1, $folderData);
+ $this->cache2->put($file2, $folderData);
+ $this->cache2->put($file3, $folderData);
+ $this->cache2->put($file4, $data);
+ $this->cache2->put($file5, $data);
+
$this->cache->move('folder/foo', 'folder/foobar');
$this->assertFalse($this->cache->inCache('folder/foo'));
@@ -180,6 +195,16 @@ class Cache extends \PHPUnit_Framework_TestCase {
$this->assertTrue($this->cache->inCache('folder/foobar'));
$this->assertTrue($this->cache->inCache('folder/foobar/1'));
$this->assertTrue($this->cache->inCache('folder/foobar/2'));
+
+ /* the folder structure of the second user must not change! */
+ $this->assertTrue($this->cache2->inCache('folder/bar'));
+ $this->assertTrue($this->cache2->inCache('folder/foo'));
+ $this->assertTrue($this->cache2->inCache('folder/foo/1'));
+ $this->assertTrue($this->cache2->inCache('folder/foo/2'));
+
+ $this->assertFalse($this->cache2->inCache('folder/foobar'));
+ $this->assertFalse($this->cache2->inCache('folder/foobar/1'));
+ $this->assertFalse($this->cache2->inCache('folder/foobar/2'));
}
function testGetIncomplete() {
@@ -243,6 +268,8 @@ class Cache extends \PHPUnit_Framework_TestCase {
public function setUp() {
$this->storage = new \OC\Files\Storage\Temporary(array());
+ $this->storage2 = new \OC\Files\Storage\Temporary(array());
$this->cache = new \OC\Files\Cache\Cache($this->storage);
+ $this->cache2 = new \OC\Files\Cache\Cache($this->storage2);
}
}