diff options
author | Aleksander Machniak <alec@alec.pl> | 2012-11-13 15:26:51 +0100 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2012-11-13 15:26:51 +0100 |
commit | f410c902613e3e1f0d57c71b1065b69232ba92eb (patch) | |
tree | 32998bebc0c0a04a39f7a04e60963a34149707d9 | |
parent | 003b17e2384a3537ae2c724f41c7c4252a9dafd0 (diff) |
Cache identities data in memory for faster access when get_identity() is called more than once
-rw-r--r-- | program/include/rcube_user.php | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/program/include/rcube_user.php b/program/include/rcube_user.php index b92187ad4..72b03cd15 100644 --- a/program/include/rcube_user.php +++ b/program/include/rcube_user.php @@ -47,6 +47,13 @@ class rcube_user */ private $rc; + /** + * Internal identities cache + * + * @var array + */ + private $identities = array(); + const SEARCH_ADDRESSBOOK = 1; const SEARCH_MAIL = 2; @@ -213,8 +220,14 @@ class rcube_user */ function get_identity($id = null) { - $result = $this->list_identities($id ? sprintf('AND identity_id = %d', $id) : ''); - return $result[0]; + $id = (int)$id; + // cache identities for better performance + if (!array_key_exists($id, $this->identities)) { + $result = $this->list_identities($id ? 'AND identity_id = ' . $id : ''); + $this->identities[$id] = $result[0]; + } + + return $this->identities[$id]; } @@ -273,6 +286,8 @@ class rcube_user call_user_func_array(array($this->db, 'query'), array_merge(array($sql), $query_params)); + $this->identities = array(); + return $this->db->affected_rows(); } @@ -305,6 +320,8 @@ class rcube_user call_user_func_array(array($this->db, 'query'), array_merge(array($sql), $insert_values)); + $this->identities = array(); + return $this->db->insert_id('identities'); } @@ -339,6 +356,8 @@ class rcube_user $this->ID, $iid); + $this->identities = array(); + return $this->db->affected_rows(); } @@ -359,6 +378,8 @@ class rcube_user " AND del <> 1", $this->ID, $iid); + + unset($this->identities[0]); } } |