From 66407a75d1eced92d0bd725caa028f54a3b345be Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Sat, 08 Jun 2013 13:53:04 -0400
Subject: [PATCH] Fix date format issues on MS SQL Server (#1488918)

---
 CHANGELOG                                 |    1 +
 program/lib/Roundcube/rcube_db_mssql.php  |   12 ++++++++++++
 program/lib/Roundcube/rcube_db.php        |    4 +++-
 program/lib/Roundcube/rcube_db_sqlsrv.php |   12 ++++++++++++
 4 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index f986e25..a601dd2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Fix date format issues on MS SQL Server (#1488918)
 - Fix so non-inline images aren't skipped on forward (#1489150)
 - Add imap_cache_ttl option to configure TTL of imap_cache
 - Make LDAP cache engine configurable via ldap_cache and ldap_cache_ttl options
diff --git a/program/lib/Roundcube/rcube_db.php b/program/lib/Roundcube/rcube_db.php
index 086fd66..597fa75 100644
--- a/program/lib/Roundcube/rcube_db.php
+++ b/program/lib/Roundcube/rcube_db.php
@@ -368,8 +368,10 @@
      */
     protected function _query($query, $offset, $numrows, $params)
     {
+        $query = trim($query);
+
         // Read or write ?
-        $mode = preg_match('/^(select|show)/i', ltrim($query)) ? 'r' : 'w';
+        $mode = preg_match('/^(select|show|set)/i', $query) ? 'r' : 'w';
 
         $this->db_connect($mode);
 
diff --git a/program/lib/Roundcube/rcube_db_mssql.php b/program/lib/Roundcube/rcube_db_mssql.php
index 7131707..4c005b0 100644
--- a/program/lib/Roundcube/rcube_db_mssql.php
+++ b/program/lib/Roundcube/rcube_db_mssql.php
@@ -46,6 +46,18 @@
     }
 
     /**
+     * Driver-specific configuration of database connection
+     *
+     * @param array $dsn DSN for DB connections
+     * @param PDO   $dbh Connection handler
+     */
+    protected function conn_configure($dsn, $dbh)
+    {
+        // Set date format in case of non-default language (#1488918)
+        $this->query("SET DATEFORMAT ymd");
+    }
+
+    /**
      * Return SQL function for current time and date
      *
      * @param int $interval Optional interval (in seconds) to add/subtract
diff --git a/program/lib/Roundcube/rcube_db_sqlsrv.php b/program/lib/Roundcube/rcube_db_sqlsrv.php
index 9958dc2..88473e2 100644
--- a/program/lib/Roundcube/rcube_db_sqlsrv.php
+++ b/program/lib/Roundcube/rcube_db_sqlsrv.php
@@ -46,6 +46,18 @@
     }
 
     /**
+     * Driver-specific configuration of database connection
+     *
+     * @param array $dsn DSN for DB connections
+     * @param PDO   $dbh Connection handler
+     */
+    protected function conn_configure($dsn, $dbh)
+    {
+        // Set date format in case of non-default language (#1488918)
+        $this->query("SET DATEFORMAT ymd");
+    }
+
+    /**
      * Return SQL function for current time and date
      *
      * @param int $interval Optional interval (in seconds) to add/subtract

--
Gitblit v1.9.1