From 0ee57208b3eb2e4c45412fe45d146c8e8e3458e6 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Wed, 23 Sep 2015 06:58:05 -0400
Subject: [PATCH] Add possibility to set PDO::ATTR_PREFETCH and PDO::ATTR_TIMEOUT via DSN string

---
 program/lib/Roundcube/rcube_db_mysql.php |    2 +-
 program/lib/Roundcube/rcube_db.php       |   16 ++++++++++++----
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/program/lib/Roundcube/rcube_db.php b/program/lib/Roundcube/rcube_db.php
index 510d001..8c5bc19 100644
--- a/program/lib/Roundcube/rcube_db.php
+++ b/program/lib/Roundcube/rcube_db.php
@@ -149,10 +149,6 @@
         $dsn_string  = $this->dsn_string($dsn);
         $dsn_options = $this->dsn_options($dsn);
 
-        if ($this->db_pconn) {
-            $dsn_options[PDO::ATTR_PERSISTENT] = true;
-        }
-
         // Connect
         try {
             // with this check we skip fatal error on PDO object creation
@@ -1271,6 +1267,18 @@
     {
         $result = array();
 
+        if ($this->db_pconn) {
+            $result[PDO::ATTR_PERSISTENT] = true;
+        }
+
+        if (!empty($dsn['prefetch'])) {
+            $result[PDO::ATTR_PREFETCH] = (int) $dsn['prefetch'];
+        }
+
+        if (!empty($dsn['timeout'])) {
+            $result[PDO::ATTR_TIMEOUT] = (int) $dsn['timeout'];
+        }
+
         return $result;
     }
 
diff --git a/program/lib/Roundcube/rcube_db_mysql.php b/program/lib/Roundcube/rcube_db_mysql.php
index b013341..ee2194f 100644
--- a/program/lib/Roundcube/rcube_db_mysql.php
+++ b/program/lib/Roundcube/rcube_db_mysql.php
@@ -118,7 +118,7 @@
      */
     protected function dsn_options($dsn)
     {
-        $result = array();
+        $result = parent::dsn_options($dsn);
 
         if (!empty($dsn['key'])) {
             $result[PDO::MYSQL_ATTR_SSL_KEY] = $dsn['key'];

--
Gitblit v1.9.1