summaryrefslogtreecommitdiff
path: root/program/include/rcube_db_mysql.php
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2012-08-08 08:21:45 +0200
committerAleksander Machniak <alec@alec.pl>2012-08-08 08:21:45 +0200
commitde56ea1909d515d3e4807a04a6c4644b8226d08d (patch)
treec8ad7166af152fe14887022e64b8a0de896cdfda /program/include/rcube_db_mysql.php
parentd55c02ba0334192103344dd54701cec066aa65b5 (diff)
parentc2b20fc0b4c6c1271fff9a85cb977d23de0a3421 (diff)
Merge branch 'pdo'
Conflicts: CHANGELOG
Diffstat (limited to 'program/include/rcube_db_mysql.php')
-rw-r--r--program/include/rcube_db_mysql.php154
1 files changed, 154 insertions, 0 deletions
diff --git a/program/include/rcube_db_mysql.php b/program/include/rcube_db_mysql.php
new file mode 100644
index 000000000..3606ec102
--- /dev/null
+++ b/program/include/rcube_db_mysql.php
@@ -0,0 +1,154 @@
+<?php
+
+/**
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_db_mysql.php |
+ | |
+ | This file is part of the Roundcube Webmail client |
+ | Copyright (C) 2005-2012, The Roundcube Dev Team |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
+ | |
+ | PURPOSE: |
+ | Database wrapper class that implements PHP PDO functions |
+ | for MySQL database |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl> |
+ +-----------------------------------------------------------------------+
+*/
+
+
+/**
+ * Database independent query interface
+ *
+ * This is a wrapper for the PHP PDO
+ *
+ * @package Database
+ * @version 1.0
+ */
+class rcube_db_mysql extends rcube_db
+{
+ /**
+ * Driver initialization/configuration
+ */
+ protected function init()
+ {
+ // SQL identifiers quoting
+ $this->options['identifier_start'] = '`';
+ $this->options['identifier_end'] = '`';
+ }
+
+ /**
+ * Abstract SQL statement for value concatenation
+ *
+ * @return string SQL statement to be used in query
+ */
+ public function concat(/* col1, col2, ... */)
+ {
+ $args = func_get_args();
+
+ if (is_array($args[0])) {
+ $args = $args[0];
+ }
+
+ return 'CONCAT(' . join(', ', $args) . ')';
+ }
+
+ /**
+ * Returns PDO DSN string from DSN array
+ *
+ * @param array $dsn DSN parameters
+ *
+ * @return string Connection string
+ */
+ protected function dsn_string($dsn)
+ {
+ $params = array();
+ $result = 'mysql:';
+
+ if ($dsn['database']) {
+ $params[] = 'dbname=' . $dsn['database'];
+ }
+
+ if ($dsn['hostspec']) {
+ $params[] = 'host=' . $dsn['hostspec'];
+ }
+
+ if ($dsn['port']) {
+ $params[] = 'port=' . $dsn['port'];
+ }
+
+ if ($dsn['socket']) {
+ $params[] = 'unix_socket=' . $dsn['socket'];
+ }
+
+ $params[] = 'charset=utf8';
+
+ if (!empty($params)) {
+ $result .= implode(';', $params);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Returns driver-specific connection options
+ *
+ * @param array $dsn DSN parameters
+ *
+ * @return array Connection options
+ */
+ protected function dsn_options($dsn)
+ {
+ $result = array();
+
+ if (!empty($dsn['key'])) {
+ $result[PDO::MYSQL_ATTR_KEY] = $dsn['key'];
+ }
+
+ if (!empty($dsn['cipher'])) {
+ $result[PDO::MYSQL_ATTR_CIPHER] = $dsn['cipher'];
+ }
+
+ if (!empty($dsn['cert'])) {
+ $result[PDO::MYSQL_ATTR_SSL_CERT] = $dsn['cert'];
+ }
+
+ if (!empty($dsn['capath'])) {
+ $result[PDO::MYSQL_ATTR_SSL_CAPATH] = $dsn['capath'];
+ }
+
+ if (!empty($dsn['ca'])) {
+ $result[PDO::MYSQL_ATTR_SSL_CA] = $dsn['ca'];
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get database runtime variables
+ *
+ * @param string $varname Variable name
+ * @param mixed $default Default value if variable is not set
+ *
+ * @return mixed Variable value or default
+ */
+ public function get_variable($varname, $default = null)
+ {
+ if (!isset($this->variables)) {
+ $this->variables = array();
+
+ $result = $this->query('SHOW VARIABLES');
+
+ while ($sql_arr = $this->fetch_array($result)) {
+ $this->variables[$row[0]] = $row[1];
+ }
+ }
+
+ return isset($this->variables[$varname]) ? $this->variables[$varname] : $default;
+ }
+
+}