From ef8d38ca27d24ff1c2b2b499f74c24dae9d9e906 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Mon, 19 Jan 2015 17:05:44 +0100 Subject: [PATCH] Fix chunked query for tags + unit test --- lib/private/tags.php | 2 +- tests/lib/tags.php | 32 +++++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/lib/private/tags.php b/lib/private/tags.php index 9ff433b6984..4d737e47e07 100644 --- a/lib/private/tags.php +++ b/lib/private/tags.php @@ -211,7 +211,7 @@ class Tags implements \OCP\ITags { try { $conn = \OC_DB::getConnection(); - $chunks = array_chunk($objIds, 1000, false); + $chunks = array_chunk($objIds, 900, false); foreach ($chunks as $chunk) { $result = $conn->executeQuery( 'SELECT `category`, `categoryid`, `objid` ' . diff --git a/tests/lib/tags.php b/tests/lib/tags.php index 71296d2e346..547cd302d5d 100644 --- a/tests/lib/tags.php +++ b/tests/lib/tags.php @@ -30,7 +30,7 @@ class Test_Tags extends \Test\TestCase { protected $backupGlobals = FALSE; /** @var \OC\Tagging\TagMapper */ protected $tagMapper; - /** @var \OC\TagManager */ + /** @var \OCP\ITagManager */ protected $tagMgr; protected function setUp() { @@ -55,8 +55,9 @@ class Test_Tags extends \Test\TestCase { } protected function tearDown() { - //$query = OC_DB::prepare('DELETE FROM `*PREFIX*vcategories` WHERE `item_type` = ?'); - //$query->execute(array('test')); + $conn = \OC_DB::getConnection(); + $conn->executeQuery('DELETE FROM `*PREFIX*vcategory_to_object`'); + $conn->executeQuery('DELETE FROM `*PREFIX*vcategory`'); parent::tearDown(); } @@ -176,6 +177,31 @@ class Test_Tags extends \Test\TestCase { ); } + public function testGetTagsForObjectsMassiveResults() { + $defaultTags = array('tag1'); + $tagger = $this->tagMgr->load($this->objectType, $defaultTags); + $tagData = $tagger->getTags(); + $tagId = $tagData[0]['id']; + $tagType = $tagData[0]['type']; + + $conn = \OC_DB::getConnection(); + $statement = $conn->prepare( + 'INSERT INTO `*PREFIX*vcategory_to_object` ' . + '(`objid`, `categoryid`, `type`) VALUES ' . + '(?, ?, ?)' + ); + + // insert lots of entries + $idsArray = array(); + for($i = 1; $i <= 1500; $i++) { + $statement->execute(array($i, $tagId, $tagType)); + $idsArray[] = $i; + } + + $tags = $tagger->getTagsForObjects($idsArray); + $this->assertEquals(1500, count($tags)); + } + public function testDeleteTags() { $defaultTags = array('Friends', 'Family', 'Work', 'Other'); $tagger = $this->tagMgr->load($this->objectType, $defaultTags); -- 2.39.5