| | |
| | | |
| | | /** |
| | | +-----------------------------------------------------------------------+ |
| | | | program/include/rcube_db_sqlite.php | |
| | | | | |
| | | | This file is part of the Roundcube Webmail client | |
| | | | Copyright (C) 2005-2012, The Roundcube Dev Team | |
| | | | | |
| | |
| | | | PURPOSE: | |
| | | | Database wrapper class that implements PHP PDO functions | |
| | | | for SQLite database | |
| | | | | |
| | | +-----------------------------------------------------------------------+ |
| | | | Author: Aleksander Machniak <alec@alec.pl> | |
| | | +-----------------------------------------------------------------------+ |
| | | */ |
| | | |
| | | |
| | | /** |
| | | * Database independent query interface |
| | |
| | | class rcube_db_sqlite extends rcube_db |
| | | { |
| | | public $db_provider = 'sqlite'; |
| | | |
| | | /** |
| | | * Database character set |
| | | */ |
| | | protected function set_charset($charset) |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * Prepare connection |
| | |
| | | */ |
| | | protected function conn_configure($dsn, $dbh) |
| | | { |
| | | // we emulate via callback some missing functions |
| | | $dbh->sqliteCreateFunction('unix_timestamp', array('rcube_db_sqlite', 'sqlite_unix_timestamp'), 1); |
| | | $dbh->sqliteCreateFunction('now', array('rcube_db_sqlite', 'sqlite_now'), 0); |
| | | |
| | | // 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'); |
| | |
| | | } |
| | | |
| | | /** |
| | | * Callback for sqlite: unix_timestamp() |
| | | * 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 static function sqlite_unix_timestamp($timestamp = '') |
| | | public function unixtimestamp($field) |
| | | { |
| | | $timestamp = trim($timestamp); |
| | | if (!$timestamp) { |
| | | $ret = time(); |
| | | } |
| | | else if (!preg_match('/^[0-9]+$/s', $timestamp)) { |
| | | $ret = strtotime($timestamp); |
| | | } |
| | | else { |
| | | $ret = $timestamp; |
| | | } |
| | | |
| | | return $ret; |
| | | return "strftime('%s', $field)"; |
| | | } |
| | | |
| | | /** |
| | | * Callback for sqlite: now() |
| | | * 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 static function sqlite_now() |
| | | public function now($interval = 0) |
| | | { |
| | | return date("Y-m-d H:i:s"); |
| | | if ($interval) { |
| | | $add = ($interval > 0 ? '+' : '') . intval($interval) . ' seconds'; |
| | | } |
| | | |
| | | return "datetime('now'" . ($add ? ",'$add'" : "") . ")"; |
| | | } |
| | | |
| | | /** |
| | |
| | | $q = $this->query('SELECT name FROM sqlite_master' |
| | | .' WHERE type = \'table\' ORDER BY name'); |
| | | |
| | | if ($res = $this->_get_result($q)) { |
| | | $this->tables = $res->fetchAll(PDO::FETCH_COLUMN, 0); |
| | | } |
| | | else { |
| | | $this->tables = array(); |
| | | } |
| | | $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : array(); |
| | | } |
| | | |
| | | return $this->tables; |