PluginProbe
ShiftController Employee Shift Scheduling / 2.1.0
ShiftController Employee Shift Scheduling v2.1.0
4.9.97 4.9.96 4.9.95 4.9.74 4.9.75 4.9.76 4.9.77 4.9.78 4.9.84 4.9.85 4.9.87 4.9.91 4.9.92 trunk 2.1.0 2.1.1 2.1.2 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 3.2.4 All 38 releases
shiftcontroller / happ / system / database / drivers / sqlite / sqlite_forge.php

sqlite_forge.php in ShiftController Employee Shift Scheduling 2.1.0, at happ/system/database/drivers/sqlite/sqlite_forge.php

265 lines 6.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2 /**
3 * CodeIgniter
4 *
5 * An open source application development framework for PHP 5.1.6 or newer
6 *
7 * @package CodeIgniter
8 * @author ExpressionEngine Dev Team
9 * @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
10 * @license http://codeigniter.com/user_guide/license.html
11 * @link http://codeigniter.com
12 * @since Version 1.0
13 * @filesource
14 */
15
16 // ------------------------------------------------------------------------
17
18 /**
19 * SQLite Forge Class
20 *
21 * @category Database
22 * @author ExpressionEngine Dev Team
23 * @link http://codeigniter.com/user_guide/database/
24 */
25 class CI_DB_sqlite_forge extends CI_DB_forge {
26
27 /**
28 * Create database
29 *
30 * @access public
31 * @param string the database name
32 * @return bool
33 */
34 function _create_database()
35 {
36 // In SQLite, a database is created when you connect to the database.
37 // We'll return TRUE so that an error isn't generated
38 return TRUE;
39 }
40
41 // --------------------------------------------------------------------
42
43 /**
44 * Drop database
45 *
46 * @access private
47 * @param string the database name
48 * @return bool
49 */
50 function _drop_database($name)
51 {
52 if ( ! @file_exists($this->db->database) OR ! @unlink($this->db->database))
53 {
54 if ($this->db->db_debug)
55 {
56 return $this->db->display_error('db_unable_to_drop');
57 }
58 return FALSE;
59 }
60 return TRUE;
61 }
62 // --------------------------------------------------------------------
63
64 /**
65 * Create Table
66 *
67 * @access private
68 * @param string the table name
69 * @param array the fields
70 * @param mixed primary key(s)
71 * @param mixed key(s)
72 * @param boolean should 'IF NOT EXISTS' be added to the SQL
73 * @return bool
74 */
75 function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists)
76 {
77 $sql = 'CREATE TABLE ';
78
79 // IF NOT EXISTS added to SQLite in 3.3.0
80 if ($if_not_exists === TRUE && version_compare($this->db->_version(), '3.3.0', '>=') === TRUE)
81 {
82 $sql .= 'IF NOT EXISTS ';
83 }
84
85 $sql .= $this->db->_escape_identifiers($table)."(";
86 $current_field_count = 0;
87
88 foreach ($fields as $field=>$attributes)
89 {
90 // Numeric field names aren't allowed in databases, so if the key is
91 // numeric, we know it was assigned by PHP and the developer manually
92 // entered the field information, so we'll simply add it to the list
93 if (is_numeric($field))
94 {
95 $sql .= "\n\t$attributes";
96 }
97 else
98 {
99 $attributes = array_change_key_case($attributes, CASE_UPPER);
100
101 $sql .= "\n\t".$this->db->_protect_identifiers($field);
102
103 $sql .= ' '.$attributes['TYPE'];
104
105 if (array_key_exists('CONSTRAINT', $attributes))
106 {
107 $sql .= '('.$attributes['CONSTRAINT'].')';
108 }
109
110 if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE)
111 {
112 $sql .= ' UNSIGNED';
113 }
114
115 if (array_key_exists('DEFAULT', $attributes))
116 {
117 $sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\'';
118 }
119
120 if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE)
121 {
122 $sql .= ' NULL';
123 }
124 else
125 {
126 $sql .= ' NOT NULL';
127 }
128
129 if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE)
130 {
131 $sql .= ' AUTO_INCREMENT';
132 }
133 }
134
135 // don't add a comma on the end of the last field
136 if (++$current_field_count < count($fields))
137 {
138 $sql .= ',';
139 }
140 }
141
142 if (count($primary_keys) > 0)
143 {
144 $primary_keys = $this->db->_protect_identifiers($primary_keys);
145 $sql .= ",\n\tPRIMARY KEY (" . implode(', ', $primary_keys) . ")";
146 }
147
148 if (is_array($keys) && count($keys) > 0)
149 {
150 foreach ($keys as $key)
151 {
152 if (is_array($key))
153 {
154 $key = $this->db->_protect_identifiers($key);
155 }
156 else
157 {
158 $key = array($this->db->_protect_identifiers($key));
159 }
160
161 $sql .= ",\n\tUNIQUE (" . implode(', ', $key) . ")";
162 }
163 }
164
165 $sql .= "\n)";
166
167 return $sql;
168 }
169
170 // --------------------------------------------------------------------
171
172 /**
173 * Drop Table
174 *
175 * Unsupported feature in SQLite
176 *
177 * @access private
178 * @return bool
179 */
180 function _drop_table($table)
181 {
182 if ($this->db->db_debug)
183 {
184 return $this->db->display_error('db_unsuported_feature');
185 }
186 return array();
187 }
188
189 // --------------------------------------------------------------------
190
191 /**
192 * Alter table query
193 *
194 * Generates a platform-specific query so that a table can be altered
195 * Called by add_column(), drop_column(), and column_alter(),
196 *
197 * @access private
198 * @param string the ALTER type (ADD, DROP, CHANGE)
199 * @param string the column name
200 * @param string the table name
201 * @param string the column definition
202 * @param string the default value
203 * @param boolean should 'NOT NULL' be added
204 * @param string the field after which we should add the new field
205 * @return object
206 */
207 function _alter_table($alter_type, $table, $column_name, $column_definition = '', $default_value = '', $null = '', $after_field = '')
208 {
209 $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table)." $alter_type ".$this->db->_protect_identifiers($column_name);
210
211 // DROP has everything it needs now.
212 if ($alter_type == 'DROP')
213 {
214 // SQLite does not support dropping columns
215 // http://www.sqlite.org/omitted.html
216 // http://www.sqlite.org/faq.html#q11
217 return FALSE;
218 }
219
220 $sql .= " $column_definition";
221
222 if ($default_value != '')
223 {
224 $sql .= " DEFAULT \"$default_value\"";
225 }
226
227 if ($null === NULL)
228 {
229 $sql .= ' NULL';
230 }
231 else
232 {
233 $sql .= ' NOT NULL';
234 }
235
236 if ($after_field != '')
237 {
238 $sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field);
239 }
240
241 return $sql;
242
243 }
244
245 // --------------------------------------------------------------------
246
247 /**
248 * Rename a table
249 *
250 * Generates a platform-specific query so that a table can be renamed
251 *
252 * @access private
253 * @param string the old table name
254 * @param string the new table name
255 * @return string
256 */
257 function _rename_table($table_name, $new_table_name)
258 {
259 $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table_name)." RENAME TO ".$this->db->_protect_identifiers($new_table_name);
260 return $sql;
261 }
262 }
263
264 /* End of file sqlite_forge.php */
265 /* Location: ./system/database/drivers/sqlite/sqlite_forge.php */