Mercurial > hg > rc2
diff program/lib/Roundcube/rcube_db_sqlite.php @ 0:4681f974d28b
vanilla 1.3.3 distro, I hope
author | Charlie Root |
---|---|
date | Thu, 04 Jan 2018 15:52:31 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/program/lib/Roundcube/rcube_db_sqlite.php Thu Jan 04 15:52:31 2018 -0500 @@ -0,0 +1,161 @@ +<?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 SQLite database | + +-----------------------------------------------------------------------+ + | Author: Aleksander Machniak <alec@alec.pl> | + +-----------------------------------------------------------------------+ +*/ + +/** + * Database independent query interface + * This is a wrapper for the PHP PDO + * + * @package Framework + * @subpackage Database + */ +class rcube_db_sqlite extends rcube_db +{ + public $db_provider = 'sqlite'; + + /** + * Prepare connection + */ + protected function conn_prepare($dsn) + { + // Create database file, required by PDO to exist on connection + if (!empty($dsn['database']) && !file_exists($dsn['database'])) { + $created = touch($dsn['database']); + + // File mode setting, for compat. with MDB2 + if (!empty($dsn['mode']) && $created) { + chmod($dsn['database'], octdec($dsn['mode'])); + } + } + } + + /** + * Configure connection, create database if not exists + */ + protected function conn_configure($dsn, $dbh) + { + // Initialize database structure in file is empty + if (!empty($dsn['database']) && !filesize($dsn['database'])) { + $data = file_get_contents(RCUBE_INSTALL_PATH . 'SQL/sqlite.initial.sql'); + + if (strlen($data)) { + $this->debug('INITIALIZE DATABASE'); + + $q = $dbh->exec($data); + + if ($q === false) { + $error = $dbh->errorInfo(); + $this->db_error = true; + $this->db_error_msg = sprintf('[%s] %s', $error[1], $error[2]); + + rcube::raise_error(array('code' => 500, 'type' => 'db', + 'line' => __LINE__, 'file' => __FILE__, + 'message' => $this->db_error_msg), true, false); + } + } + } + } + + /** + * Return SQL statement to convert a field value into a unix timestamp + * + * @param string $field Field name + * + * @return string SQL statement to use in query + * @deprecated + */ + public function unixtimestamp($field) + { + return "strftime('%s', $field)"; + } + + /** + * Return SQL function for current time and date + * + * @param int $interval Optional interval (in seconds) to add/subtract + * + * @return string SQL function to use in query + */ + public function now($interval = 0) + { + if ($interval) { + $add = ($interval > 0 ? '+' : '') . intval($interval) . ' seconds'; + } + + return "datetime('now'" . ($add ? ",'$add'" : "") . ")"; + } + + /** + * Returns list of tables in database + * + * @return array List of all tables of the current database + */ + public function list_tables() + { + if ($this->tables === null) { + $q = $this->query('SELECT name FROM sqlite_master' + .' WHERE type = \'table\' ORDER BY name'); + + $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : array(); + } + + return $this->tables; + } + + /** + * Returns list of columns in database table + * + * @param string $table Table name + * + * @return array List of table cols + */ + public function list_cols($table) + { + $q = $this->query('SELECT sql FROM sqlite_master WHERE type = ? AND name = ?', + array('table', $table)); + + $columns = array(); + + if ($sql = $this->fetch_array($q)) { + $sql = $sql[0]; + $start_pos = strpos($sql, '('); + $end_pos = strrpos($sql, ')'); + $sql = substr($sql, $start_pos+1, $end_pos-$start_pos-1); + $lines = explode(',', $sql); + + foreach ($lines as $line) { + $line = explode(' ', trim($line)); + + if ($line[0] && strpos($line[0], '--') !== 0) { + $column = $line[0]; + $columns[] = trim($column, '"'); + } + } + } + + return $columns; + } + + /** + * Build DSN string for PDO constructor + */ + protected function dsn_string($dsn) + { + return $dsn['phptype'] . ':' . $dsn['database']; + } +}