comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:4681f974d28b
1 <?php
2
3 /**
4 +-----------------------------------------------------------------------+
5 | This file is part of the Roundcube Webmail client |
6 | Copyright (C) 2005-2012, The Roundcube Dev Team |
7 | |
8 | Licensed under the GNU General Public License version 3 or |
9 | any later version with exceptions for skins & plugins. |
10 | See the README file for a full license statement. |
11 | |
12 | PURPOSE: |
13 | Database wrapper class that implements PHP PDO functions |
14 | for SQLite database |
15 +-----------------------------------------------------------------------+
16 | Author: Aleksander Machniak <alec@alec.pl> |
17 +-----------------------------------------------------------------------+
18 */
19
20 /**
21 * Database independent query interface
22 * This is a wrapper for the PHP PDO
23 *
24 * @package Framework
25 * @subpackage Database
26 */
27 class rcube_db_sqlite extends rcube_db
28 {
29 public $db_provider = 'sqlite';
30
31 /**
32 * Prepare connection
33 */
34 protected function conn_prepare($dsn)
35 {
36 // Create database file, required by PDO to exist on connection
37 if (!empty($dsn['database']) && !file_exists($dsn['database'])) {
38 $created = touch($dsn['database']);
39
40 // File mode setting, for compat. with MDB2
41 if (!empty($dsn['mode']) && $created) {
42 chmod($dsn['database'], octdec($dsn['mode']));
43 }
44 }
45 }
46
47 /**
48 * Configure connection, create database if not exists
49 */
50 protected function conn_configure($dsn, $dbh)
51 {
52 // Initialize database structure in file is empty
53 if (!empty($dsn['database']) && !filesize($dsn['database'])) {
54 $data = file_get_contents(RCUBE_INSTALL_PATH . 'SQL/sqlite.initial.sql');
55
56 if (strlen($data)) {
57 $this->debug('INITIALIZE DATABASE');
58
59 $q = $dbh->exec($data);
60
61 if ($q === false) {
62 $error = $dbh->errorInfo();
63 $this->db_error = true;
64 $this->db_error_msg = sprintf('[%s] %s', $error[1], $error[2]);
65
66 rcube::raise_error(array('code' => 500, 'type' => 'db',
67 'line' => __LINE__, 'file' => __FILE__,
68 'message' => $this->db_error_msg), true, false);
69 }
70 }
71 }
72 }
73
74 /**
75 * Return SQL statement to convert a field value into a unix timestamp
76 *
77 * @param string $field Field name
78 *
79 * @return string SQL statement to use in query
80 * @deprecated
81 */
82 public function unixtimestamp($field)
83 {
84 return "strftime('%s', $field)";
85 }
86
87 /**
88 * Return SQL function for current time and date
89 *
90 * @param int $interval Optional interval (in seconds) to add/subtract
91 *
92 * @return string SQL function to use in query
93 */
94 public function now($interval = 0)
95 {
96 if ($interval) {
97 $add = ($interval > 0 ? '+' : '') . intval($interval) . ' seconds';
98 }
99
100 return "datetime('now'" . ($add ? ",'$add'" : "") . ")";
101 }
102
103 /**
104 * Returns list of tables in database
105 *
106 * @return array List of all tables of the current database
107 */
108 public function list_tables()
109 {
110 if ($this->tables === null) {
111 $q = $this->query('SELECT name FROM sqlite_master'
112 .' WHERE type = \'table\' ORDER BY name');
113
114 $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : array();
115 }
116
117 return $this->tables;
118 }
119
120 /**
121 * Returns list of columns in database table
122 *
123 * @param string $table Table name
124 *
125 * @return array List of table cols
126 */
127 public function list_cols($table)
128 {
129 $q = $this->query('SELECT sql FROM sqlite_master WHERE type = ? AND name = ?',
130 array('table', $table));
131
132 $columns = array();
133
134 if ($sql = $this->fetch_array($q)) {
135 $sql = $sql[0];
136 $start_pos = strpos($sql, '(');
137 $end_pos = strrpos($sql, ')');
138 $sql = substr($sql, $start_pos+1, $end_pos-$start_pos-1);
139 $lines = explode(',', $sql);
140
141 foreach ($lines as $line) {
142 $line = explode(' ', trim($line));
143
144 if ($line[0] && strpos($line[0], '--') !== 0) {
145 $column = $line[0];
146 $columns[] = trim($column, '"');
147 }
148 }
149 }
150
151 return $columns;
152 }
153
154 /**
155 * Build DSN string for PDO constructor
156 */
157 protected function dsn_string($dsn)
158 {
159 return $dsn['phptype'] . ':' . $dsn['database'];
160 }
161 }