| | |
| | | } |
| | | |
| | | /** |
| | | * Connect to appropiate database depending on the operation |
| | | * Connect to appropriate database depending on the operation |
| | | * |
| | | * @param string $mode Connection mode (r|w) |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * Writes debug information/query to 'sql' log file |
| | | * |
| | | * @param string $query SQL query |
| | | */ |
| | | protected function debug($query) |
| | | { |
| | | if ($this->options['debug_mode']) { |
| | | rcube::write_log('sql', '[' . (++$this->db_index) . '] ' . $query . ';'); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Getter for error state |
| | | * |
| | | * @return boolean True on error |
| | | * @param int $res_id Optional query result identifier |
| | | * |
| | | * @return string Error message |
| | | */ |
| | | public function is_error() |
| | | public function is_error($res_id = null) |
| | | { |
| | | return $this->db_error ? $this->db_error_msg : false; |
| | | if ($res_id !== null) { |
| | | return $this->_get_result($res_id) === false ? $this->db_error_msg : null; |
| | | } |
| | | |
| | | return $this->db_error ? $this->db_error_msg : null; |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | $query = rtrim($query, ';'); |
| | | |
| | | if ($this->options['debug_mode']) { |
| | | rcube::write_log('sql', '[' . (++$this->db_index) . '] ' . $query . ';'); |
| | | } |
| | | $this->debug($query); |
| | | |
| | | $query = $this->dbh->query($query); |
| | | |
| | |
| | | |
| | | /** |
| | | * Get last inserted record ID |
| | | * For Postgres databases, a sequence name is required |
| | | * |
| | | * @param string $table Table name (to find the incremented sequence) |
| | | * |
| | |
| | | // handle int directly for better performance |
| | | if ($type == 'integer' || $type == 'int') { |
| | | return intval($input); |
| | | } |
| | | |
| | | if (is_null($input)) { |
| | | return 'NULL'; |
| | | } |
| | | |
| | | // create DB handle if not available |
| | |
| | | } |
| | | |
| | | return $table; |
| | | } |
| | | |
| | | /** |
| | | * Return correct name for a specific database sequence |
| | | * (used for Postgres only) |
| | | * |
| | | * @param string $sequence Secuence name |
| | | * |
| | | * @return string Translated sequence name |
| | | */ |
| | | public function sequence_name($sequence) |
| | | { |
| | | $rcube = rcube::get_instance(); |
| | | |
| | | // return sequence name if configured |
| | | $config_key = 'db_sequence_'.$sequence; |
| | | |
| | | if ($name = $rcube->config->get($config_key)) { |
| | | return $name; |
| | | } |
| | | |
| | | return $sequence; |
| | | } |
| | | |
| | | /** |