From c1db483cd5578704ffc49ec98686c0e061db9c50 Mon Sep 17 00:00:00 2001 From: thomascube Date: Fri, 10 Jun 2011 01:34:34 +0000 Subject: Only select dn for count queries --- program/include/rcube_ldap.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'program/include') diff --git a/program/include/rcube_ldap.php b/program/include/rcube_ldap.php index e4c3d498f..6cab6dbc9 100644 --- a/program/include/rcube_ldap.php +++ b/program/include/rcube_ldap.php @@ -860,7 +860,7 @@ class rcube_ldap extends rcube_addressbook * * @access private */ - private function _exec_search($all = false) + private function _exec_search($count = false) { if ($this->ready) { @@ -870,14 +870,16 @@ class rcube_ldap extends rcube_addressbook $this->_debug("C: Search [".$filter."]"); // when using VLV, we need to issue listing command first in order to get the full count - if (!$all && $function != 'ldap_read' && $this->prop['vlv']) { - $this->_exec_search(true); - $this->vlv_count = ldap_count_entries($this->conn, $this->ldap_result); + if (!$count && $function != 'ldap_read' && $this->prop['vlv']) { + if ($this->_exec_search(true)) + $this->vlv_count = ldap_count_entries($this->conn, $this->ldap_result); $this->vlv_active = $this->_vlv_set_controls(); } + // only fetch dn for count (should keep the payload low) + $attrs = $count ? array('dn') : array_values($this->fieldmap); if ($this->ldap_result = @$function($this->conn, $this->base_dn, $filter, - array_values($this->fieldmap), 0, (int) $this->prop['sizelimit'], (int) $this->prop['timelimit'])) + $attrs, 0, (int)$this->prop['sizelimit'], (int)$this->prop['timelimit'])) { $this->_debug("S: ".ldap_count_entries($this->conn, $this->ldap_result)." record(s)"); return true; -- cgit v1.2.3