123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <?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'];
- }
- }
|