]> source.dussan.org Git - nextcloud-server.git/commitdiff
backport of #271 to stable45
authorThomas Mueller <thomas.mueller@tmit.eu>
Mon, 5 Nov 2012 21:42:03 +0000 (22:42 +0100)
committerThomas Mueller <thomas.mueller@tmit.eu>
Wed, 14 Nov 2012 22:02:03 +0000 (23:02 +0100)
lib/connector/sabre/directory.php

index 56c17da1a6ee115984c3425b61be90babedbd10a..90fd92db848a6eca9de149f729e880f9be6de59d 100644 (file)
@@ -128,22 +128,25 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
                }
                $properties = array_fill_keys($paths, array());
                if(count($paths)>0) {
-                       $placeholders = join(',', array_fill(0, count($paths), '?'));
-                       $query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*properties` WHERE `userid` = ?' . ' AND `propertypath` IN ('.$placeholders.')' );
-                       array_unshift($paths, $user); // prepend userid
-                       $result = $query->execute( $paths );
-                       while($row = $result->fetchRow()) {
-                               $propertypath = $row['propertypath'];
-                               $propertyname = $row['propertyname'];
-                               $propertyvalue = $row['propertyvalue'];
-                               $properties[$propertypath][$propertyname] = $propertyvalue;
+                       $chunks = array_chunk($paths, 200, false);
+                       foreach ($chunks as $pack) {
+                               $placeholders = join(',', array_fill(0, count($pack), '?'));
+                               $query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*properties` WHERE `userid` = ?' . ' AND `propertypath` IN ('.$placeholders.')' );
+                               array_unshift($pack, $user); // prepend userid
+                               $result = $query->execute( $pack );
+                               while($row = $result->fetchRow()) {
+                                       $propertypath = $row['propertypath'];
+                                       $propertyname = $row['propertyname'];
+                                       $propertyvalue = $row['propertyvalue'];
+                                       $properties[$propertypath][$propertyname] = $propertyvalue;
+                               }
                        }
                }
 
                $nodes = array();
                foreach($folder_content as $info) {
                        $node = $this->getChild($info['name'], $info);
-                       $node->setPropertyCache($properties[$path.'/'.$info['name']]);
+                       $node->setPropertyCache($properties[$this->path.'/'.$info['name']]);
                        $nodes[] = $node;
                }
                return $nodes;
@@ -204,7 +207,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
        public function getProperties($properties) {
                $props = parent::getProperties($properties);
                if (in_array(self::GETETAG_PROPERTYNAME, $properties) && !isset($props[self::GETETAG_PROPERTYNAME])) {
-                       $props[self::GETETAG_PROPERTYNAME] 
+                       $props[self::GETETAG_PROPERTYNAME]
                                = OC_Connector_Sabre_Node::getETagPropertyForPath($this->path);
                }
                return $props;