alecpl
2009-07-31 44653321b407edc2334a9ec1e1e46a0a03201646
program/include/rcube_mdb2.php
@@ -178,6 +178,17 @@
    
  /**
   * Connection state checker
   *
   * @param  boolean  True if in connected state
   */
  function is_connected()
    {
    return PEAR::isError($this->db_handle) ? false : true;
    }
  /**
   * Execute a SQL query
   *
   * @param  string  SQL query to execute
@@ -187,6 +198,9 @@
   */
  function query()
    {
    if (!$this->is_connected())
      return NULL;
    $params = func_get_args();
    $query = array_shift($params);
@@ -228,7 +242,7 @@
  function _query($query, $offset, $numrows, $params)
    {
    // Read or write ?
    if (strtolower(trim(substr($query,0,6)))=='select')
    if (strtolower(substr(trim($query),0,6))=='select')
      $mode='r';
    else
      $mode='w';
@@ -316,7 +330,9 @@
    if (!$this->db_handle || $this->db_mode=='r')
      return FALSE;
    return $this->db_handle->lastInsertID($sequence);
    $id = $this->db_handle->lastInsertID($sequence);
    return $this->db_handle->isError($id) ? null : $id;
    }
@@ -360,7 +376,7 @@
   */
  function _fetch_row($result, $mode)
    {
    if ($result === FALSE || PEAR::isError($result))
    if ($result === FALSE || PEAR::isError($result) || !$this->is_connected())
      return FALSE;
    return $result->fetchRow($mode);
@@ -456,6 +472,26 @@
  /**
   * Return list of elements for use with SQL's IN clause
   *
   * @param  string Input array
   * @return string Elements list string
   * @access public
   */
  function array2list($arr, $type=null)
    {
    if (!is_array($arr))
      return $this->quote($arr, $type);
    $res = array();
    foreach ($arr as $item)
      $res[] = $this->quote($item, $type);
    return implode(',', $res);
    }
  /**
   * Return SQL statement to convert a field value into a unix timestamp
   *
   * @param  string  Field name
@@ -471,7 +507,7 @@
        break;
      case 'mssql':
        return "datediff(s, '1970-01-01 00:00:00', $field)";
   return "DATEDIFF(second, '19700101', $field) + DATEDIFF(second, GETDATE(), GETUTCDATE())";
      default:
        return "UNIX_TIMESTAMP($field)";
@@ -519,6 +555,54 @@
      default:
        return $this->quote_identifier($column).' LIKE '.$this->quote($value);
      }
    }
  /**
   * 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);
    }
@@ -585,7 +669,9 @@
    $data = file_get_contents($file_name);
    if (strlen($data))
      sqlite_exec($dbh->connection, $data);
      if (!sqlite_exec($dbh->connection, $data, $error) || MDB2::isError($dbh))
        raise_error(array('code' => 500, 'type' => 'db',
       'line' => __LINE__, 'file' => __FILE__, 'message' => $error), TRUE, FALSE);
    }
@@ -617,8 +703,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);
  }
}