alecpl
2010-02-03 e1ac217397bfc23a5c059aaa12bba8c1fc018cbb
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,27 @@
   * 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;
    return $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;
    }
@@ -461,6 +473,7 @@
    switch($this->db_provider)
      {
      case 'mssql':
      case 'sqlsrv':
        return "getdate()";
      default:
@@ -505,7 +518,8 @@
        break;
      case 'mssql':
        return "datediff(s, '1970-01-01 00:00:00', $field)";
      case 'sqlsrv':
   return "DATEDIFF(second, '19700101', $field) + DATEDIFF(second, GETDATE(), GETUTCDATE())";
      default:
        return "UNIX_TIMESTAMP($field)";
@@ -557,6 +571,54 @@
  /**
   * Encodes non-UTF-8 characters in string/array/object (recursive)
   *
   * @param  mixed  Data to fix
   * @return mixed  Properly UTF-8 encoded data
   * @access public
   */
  function encode($input)
    {
    if (is_object($input)) {
      foreach (get_object_vars($input) as $idx => $value)
        $input->$idx = $this->encode($value);
      return $input;
      }
    else if (is_array($input)) {
      foreach ($input as $idx => $value)
        $input[$idx] = $this->encode($value);
      return $input;
      }
    return utf8_encode($input);
    }
  /**
   * Decodes encoded UTF-8 string/object/array (recursive)
   *
   * @param  mixed  Input data
   * @return mixed  Decoded data
   * @access public
   */
  function decode($input)
    {
    if (is_object($input)) {
      foreach (get_object_vars($input) as $idx => $value)
        $input->$idx = $this->decode($value);
      return $input;
      }
    else if (is_array($input)) {
      foreach ($input as $idx => $value)
        $input[$idx] = $this->decode($value);
      return $input;
      }
    return utf8_decode($input);
    }
  /**
   * Adds a query result and returns a handle ID
   *
   * @param  object  Query handle
@@ -570,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);
@@ -653,8 +716,6 @@
  {
    $debug_output = $scope . '('.$db->db_index.'): ';
    $debug_output .= $message . $db->getOption('log_line_break');
    write_log('sqllog', $debug_output);
    write_log('sql', $debug_output);
  }
}