From c7b77b9179f1fcb52ed5f4d6b648daa54eeda7b4 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Fri, 20 Feb 2015 04:33:34 -0500
Subject: [PATCH] Fix performance of rcube_db_mysql::get_variable()

---
 CHANGELOG                                |    1 +
 program/lib/Roundcube/rcube_db_mysql.php |   23 ++++++++++++++++-------
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 5a3da30..25f7e19 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -9,6 +9,7 @@
 - Fix setting max packet size for DB caches and check packet size also in shared cache
 - Fix needless security warning on BMP attachments display (#1490282)
 - Fix handling of some improper constructs in format=flowed text as per the RFC3676[4.5] (#1490284)
+- Fix performance of rcube_db_mysql::get_variable()
 
 RELEASE 1.1.0
 -------------
diff --git a/program/lib/Roundcube/rcube_db_mysql.php b/program/lib/Roundcube/rcube_db_mysql.php
index 0e85b0f..067e94b 100644
--- a/program/lib/Roundcube/rcube_db_mysql.php
+++ b/program/lib/Roundcube/rcube_db_mysql.php
@@ -161,15 +161,24 @@
     {
         if (!isset($this->variables)) {
             $this->variables = array();
-
-            $result = $this->query('SHOW VARIABLES');
-
-            while ($row = $this->fetch_array($result)) {
-                $this->variables[$row[0]] = $row[1];
-            }
         }
 
-        return isset($this->variables[$varname]) ? $this->variables[$varname] : $default;
+        if (array_key_exists($varname, $this->variables)) {
+            return $this->variables[$varname];
+        }
+
+        $result = $this->query('SHOW VARIABLES LIKE ?', $varname);
+
+        while ($row = $this->fetch_array($result)) {
+            $this->variables[$row[0]] = $row[1];
+        }
+
+        // not found, use default
+        if (!isset($this->variables[$varname])) {
+            $this->variables[$varname] = $default;
+        }
+
+        return $this->variables[$varname];
     }
 
     /**

--
Gitblit v1.9.1