From 5f306222f203dc579af8a031dfaefd8b07222766 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 22 Apr 2013 15:52:37 +0200 Subject: [PATCH] Suppoprt more complicated cache queries, e.g. AND (tags LIKE ' tag1 ' OR tags LIKE ' tag2 ') --- plugins/libkolab/lib/kolab_storage_cache.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/plugins/libkolab/lib/kolab_storage_cache.php b/plugins/libkolab/lib/kolab_storage_cache.php index ff8c2760..9c80b282 100644 --- a/plugins/libkolab/lib/kolab_storage_cache.php +++ b/plugins/libkolab/lib/kolab_storage_cache.php @@ -417,7 +417,17 @@ class kolab_storage_cache { $sql_where = ''; foreach ($query as $param) { - if ($param[1] == '=' && is_array($param[2])) { + if (is_array($param[0])) { + $subs = array(); + foreach ($param[0] as $q) { + $subq[] = preg_replace('/^\s*AND\s+/i', '', $this->_sql_where(array($q))); + } + if (!empty($subq)) { + $sql_where .= ' AND (' . implode($param[1] == 'OR' ? ' OR ' : ' AND ', $subq) . ')'; + } + continue; + } + else if ($param[1] == '=' && is_array($param[2])) { $qvalue = '(' . join(',', array_map(array($this->db, 'quote'), $param[2])) . ')'; $param[1] = 'IN'; }