]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix chunked query for tags + unit test
authorVincent Petry <pvince81@owncloud.com>
Mon, 19 Jan 2015 16:05:44 +0000 (17:05 +0100)
committerVincent Petry <pvince81@owncloud.com>
Mon, 19 Jan 2015 16:05:44 +0000 (17:05 +0100)
lib/private/tags.php
tests/lib/tags.php

index 9ff433b6984eb92ab35bf1c91beb06391c448d7d..4d737e47e070885b865b3d52a41925d8d55fc193 100644 (file)
@@ -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` ' .
index 71296d2e34681086ddf8fea7640775fa9c348a89..547cd302d5dc58da5ccc7140d8e1561521529332 100644 (file)
@@ -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);