From 7c9d922b96f9a88b350d6e07f5bde84ccc40f9b0 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Tue, 02 Mar 2010 16:27:53 -0500
Subject: [PATCH] New recent check based on UIDs

---
 program/include/rcube_mdb2.php |   31 ++++++++++++++++++++++---------
 1 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/program/include/rcube_mdb2.php b/program/include/rcube_mdb2.php
index 610aaf5..aca44c9 100644
--- a/program/include/rcube_mdb2.php
+++ b/program/include/rcube_mdb2.php
@@ -106,7 +106,7 @@
       if (!filesize($dsn_array['database']) && !empty($this->sqlite_initials))
         $this->_sqlite_create_database($dbh, $this->sqlite_initials);
       }
-    else
+    else if ($this->db_provider!='mssql' && $this->db_provider!='sqlsrv')
       $dbh->setCharset('utf8');
 
     return $dbh;
@@ -256,18 +256,19 @@
       $result = $this->db_handle->setLimit($numrows,$offset);
 
     if (empty($params))
-        $result = $this->db_handle->query($query);
+      $result = $mode=='r' ? $this->db_handle->query($query) : $this->db_handle->exec($query);
     else
       {
       $params = (array)$params;
-      $q = $this->db_handle->prepare($query);
+      $q = $this->db_handle->prepare($query, null, $mode=='w' ? MDB2_PREPARE_MANIP : null);
       if ($this->db_handle->isError($q))
         {
         $this->db_error = TRUE;
         $this->db_error_msg = $q->userinfo;
 
-        raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
-                          'message' => $this->db_error_msg), TRUE, TRUE);
+        raise_error(array('code' => 500, 'type' => 'db',
+	  'line' => __LINE__, 'file' => __FILE__,
+          'message' => $this->db_error_msg), TRUE, TRUE);
         }
       else
         {
@@ -321,16 +322,25 @@
    * Get last inserted record ID
    * For Postgres databases, a sequence name is required
    *
-   * @param  string  Sequence name for increment
+   * @param  string  Table name (to find the incremented sequence)
    * @return mixed   ID or FALSE on failure
    * @access public
    */
-  function insert_id($sequence = '')
+  function insert_id($table = '')
     {
     if (!$this->db_handle || $this->db_mode=='r')
       return FALSE;
 
-    $id = $this->db_handle->lastInsertID($sequence);
+    if ($table) {
+      if ($this->db_provider == 'pgsql')
+        // find sequence name
+        $table = get_sequence_name($table);
+      else
+        // resolve table name
+        $table = get_table_name($table);
+    }
+    
+    $id = $this->db_handle->lastInsertID($table);
     
     return $this->db_handle->isError($id) ? null : $id;
     }
@@ -463,6 +473,7 @@
     switch($this->db_provider)
       {
       case 'mssql':
+      case 'sqlsrv':
         return "getdate()";
 
       default:
@@ -507,6 +518,7 @@
         break;
 
       case 'mssql':
+      case 'sqlsrv':
 	return "DATEDIFF(second, '19700101', $field) + DATEDIFF(second, GETDATE(), GETUTCDATE())";
 
       default:
@@ -620,7 +632,8 @@
       {
       $this->db_error = TRUE;
       $this->db_error_msg = $res->getMessage();
-      raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
+      raise_error(array('code' => 500, 'type' => 'db',
+    	    'line' => __LINE__, 'file' => __FILE__,
     	    'message' => $res->getMessage() . " Query: " 
 	    . substr(preg_replace('/[\r\n]+\s*/', ' ', $res->userinfo), 0, 512)),
 	    TRUE, FALSE);

--
Gitblit v1.9.1