diff --git a/plugins/libkolab/lib/kolab_storage.php b/plugins/libkolab/lib/kolab_storage.php index 532cb524..c9a90e7c 100644 --- a/plugins/libkolab/lib/kolab_storage.php +++ b/plugins/libkolab/lib/kolab_storage.php @@ -233,20 +233,23 @@ class kolab_storage * * @param array Pseudo-SQL query as list of filter parameter triplets * @param string Object type (contact,event,task,journal,file,note,configuration) + * @param int Expected number of records or limit (for performance reasons) + * * @return array List of Kolab data objects (each represented as hash array) * @see kolab_storage_format::select() */ - public static function select($query, $type) + public static function select($query, $type, $limit = null) { self::setup(); $folder = null; $result = array(); foreach ((array)self::list_folders('', '*', $type, null, $folderdata) as $foldername) { - if (!$folder) - $folder = new kolab_storage_folder($foldername, $type, $folderdata[$foldername]); - else - $folder->set_folder($foldername, $type, $folderdata[$foldername]); + $folder = new kolab_storage_folder($foldername, $type, $folderdata[$foldername]); + + if ($limit) { + $folder->set_order_and_limit(null, $limit); + } foreach ($folder->select($query, '*') as $object) { $result[] = $object; diff --git a/plugins/libkolab/lib/kolab_storage_config.php b/plugins/libkolab/lib/kolab_storage_config.php index 43606d3a..7da09bc6 100644 --- a/plugins/libkolab/lib/kolab_storage_config.php +++ b/plugins/libkolab/lib/kolab_storage_config.php @@ -930,7 +930,7 @@ class kolab_storage_config // get kolab objects of specified type if (!empty($uids)) { $query = array(array('uid', '=', array_unique($uids))); - $result = kolab_storage::select($query, $type); + $result = kolab_storage::select($query, $type, count($uids)); } return $result;