| | |
| | | 'dblib' => 'mssql', |
| | | 'mysqli' => 'mysql', |
| | | 'oci' => 'oracle', |
| | | 'oci8' => 'oracle', |
| | | ); |
| | | |
| | | $driver = isset($driver_map[$driver]) ? $driver_map[$driver] : $driver; |
| | |
| | | // Get database specific connection options |
| | | $dsn_string = $this->dsn_string($dsn); |
| | | $dsn_options = $this->dsn_options($dsn); |
| | | |
| | | if ($this->db_pconn) { |
| | | $dsn_options[PDO::ATTR_PERSISTENT] = true; |
| | | } |
| | | |
| | | // Connect |
| | | try { |
| | |
| | | public function get_variable($varname, $default = null) |
| | | { |
| | | // to be implemented by driver class |
| | | return $default; |
| | | return rcube::get_instance()->config->get('db_' . $varname, $default); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | |
| | | // replace escaped '?' back to normal, see self::quote() |
| | | $query = str_replace('??', '?', $query); |
| | | $query = rtrim($query, " \t\n\r\0\x0B;"); |
| | | |
| | | // replace escaped '?' and quotes back to normal, see self::quote() |
| | | $query = str_replace( |
| | | array('??', self::DEFAULT_QUOTE.self::DEFAULT_QUOTE), |
| | | array('?', self::DEFAULT_QUOTE), |
| | | $query |
| | | ); |
| | | |
| | | // log query |
| | | $this->debug($query); |
| | |
| | | $pos++; |
| | | } |
| | | } |
| | | |
| | | // replace escaped quote back to normal, see self::quote() |
| | | $query = str_replace($quote.$quote, $quote, $query); |
| | | |
| | | return $query; |
| | | } |
| | |
| | | { |
| | | // get tables if not cached |
| | | if ($this->tables === null) { |
| | | $q = $this->query('SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME'); |
| | | $q = $this->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES" |
| | | . " WHERE TABLE_TYPE = 'BASE TABLE'" |
| | | . " ORDER BY TABLE_NAME"); |
| | | |
| | | if ($q) { |
| | | $this->tables = $q->fetchAll(PDO::FETCH_COLUMN, 0); |
| | | } |
| | | else { |
| | | $this->tables = array(); |
| | | } |
| | | $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : array(); |
| | | } |
| | | |
| | | return $this->tables; |
| | |
| | | */ |
| | | public function table_name($table, $quoted = false) |
| | | { |
| | | // let plugins alter the table name (#1489837) |
| | | $plugin = rcube::get_instance()->plugins->exec_hook('db_table_name', array('table' => $table)); |
| | | $table = $plugin['table']; |
| | | |
| | | // add prefix to the table name if configured |
| | | if (($prefix = $this->options['table_prefix']) && strpos($table, $prefix) !== 0) { |
| | | $table = $prefix . $table; |
| | |
| | | } |
| | | |
| | | // process the different protocol options |
| | | $parsed['protocol'] = (!empty($proto)) ? $proto : 'tcp'; |
| | | $parsed['protocol'] = $proto ?: 'tcp'; |
| | | $proto_opts = rawurldecode($proto_opts); |
| | | if (strpos($proto_opts, ':') !== false) { |
| | | list($proto_opts, $parsed['port']) = explode(':', $proto_opts); |
| | |
| | | { |
| | | $result = array(); |
| | | |
| | | if ($this->db_pconn) { |
| | | $result[PDO::ATTR_PERSISTENT] = true; |
| | | } |
| | | |
| | | if (!empty($dsn['prefetch'])) { |
| | | $result[PDO::ATTR_PREFETCH] = (int) $dsn['prefetch']; |
| | | } |
| | | |
| | | if (!empty($dsn['timeout'])) { |
| | | $result[PDO::ATTR_TIMEOUT] = (int) $dsn['timeout']; |
| | | } |
| | | |
| | | return $result; |
| | | } |
| | | |