diff options
author | Michael Gapczynski <mtgap@owncloud.com> | 2013-05-25 11:18:20 -0700 |
---|---|---|
committer | Michael Gapczynski <mtgap@owncloud.com> | 2013-05-25 11:18:20 -0700 |
commit | 0fdf3a7e635936ac0b5e66c215d1666fac5f5c32 (patch) | |
tree | 6fa9815c4a67762ea3cf1deed5c6ebdd4cfbdfce | |
parent | c870aed1b66a4f0a2ad6fbe9fbd8d2e35d6f9b40 (diff) | |
parent | 5c112657b23e546b0ef31ebff11f48a0e2e2c6fc (diff) | |
download | nextcloud-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.php | 4 | ||||
-rw-r--r-- | tests/lib/files/cache/cache.php | 27 |
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); } } |