From d8d41658d3fb87c71c3e30825003f827f4ffbdae Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Sat, 09 Aug 2008 16:20:59 -0400
Subject: [PATCH] - Case insensitive contacts searching using PostgreSQL (#1485259)
---
CHANGELOG | 4 ++++
program/include/rcube_mdb2.php | 21 +++++++++++++++++++++
program/include/rcube_db.php | 20 ++++++++++++++++++++
program/include/rcube_contacts.php | 6 +++---
4 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index 042e38f..fad40f2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,10 @@
CHANGELOG RoundCube Webmail
---------------------------
+2008/08/09 (alec)
+----------
+- Case insensitive contacts searching using PostgreSQL (#1485259)
+
2008/07/31 (thomasb)
----------
- Make default imap folders configurable for each user (#1485075)
diff --git a/program/include/rcube_contacts.php b/program/include/rcube_contacts.php
index 913f04f..0c0f932 100644
--- a/program/include/rcube_contacts.php
+++ b/program/include/rcube_contacts.php
@@ -196,12 +196,12 @@
if ($col == 'ID' || $col == $this->primary_key)
{
$ids = !is_array($value) ? split(',', $value) : $value;
- $add_where[] = $this->primary_key." IN (".join(',', $ids).")";
+ $add_where[] = $this->primary_key.' IN ('.join(',', $ids).')';
}
else if ($strict)
- $add_where[] = $this->db->quoteIdentifier($col)."=".$this->db->quote($value);
+ $add_where[] = $this->db->quoteIdentifier($col).'='.$this->db->quote($value);
else
- $add_where[] = $this->db->quoteIdentifier($col)." LIKE ".$this->db->quote(strlen($value)>2 ? "%$value%" : "$value%");
+ $add_where[] = $this->db->ilike($col, '%'.$value.'%');
}
if (!empty($add_where))
diff --git a/program/include/rcube_db.php b/program/include/rcube_db.php
index 8fa34e6..716e0d9 100644
--- a/program/include/rcube_db.php
+++ b/program/include/rcube_db.php
@@ -511,6 +511,26 @@
/**
+ * Return SQL statement for case insensitive LIKE
+ *
+ * @param string Field name
+ * @param string Search value
+ * @return string SQL statement to use in query
+ * @access public
+ */
+ function ilike($column, $value)
+ {
+ switch($this->db_provider)
+ {
+ case 'pgsql':
+ return $this->quote_identifier($column).' ILIKE '.$this->quote($value);
+ default:
+ return $this->quote_identifier($column).' LIKE '.$this->quote($value);
+ }
+ }
+
+
+ /**
* Adds a query result and returns a handle ID
*
* @param object Query handle
diff --git a/program/include/rcube_mdb2.php b/program/include/rcube_mdb2.php
index 9f2f30c..0adb6e2 100644
--- a/program/include/rcube_mdb2.php
+++ b/program/include/rcube_mdb2.php
@@ -509,6 +509,27 @@
/**
+ * Return SQL statement for case insensitive LIKE
+ *
+ * @param string Field name
+ * @param string Search value
+ * @return string SQL statement to use in query
+ * @access public
+ */
+ function ilike($column, $value)
+ {
+ // TODO: use MDB2's matchPattern() function
+ switch($this->db_provider)
+ {
+ case 'pgsql':
+ return $this->quote_identifier($column).' ILIKE '.$this->quote($value);
+ default:
+ return $this->quote_identifier($column).' LIKE '.$this->quote($value);
+ }
+ }
+
+
+ /**
* Adds a query result and returns a handle ID
*
* @param object Query handle
--
Gitblit v1.9.1