CodeIgniter installed
[living-lab-site.git] / system / database / DB_forge.php
1 <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2 /**
3  * Code Igniter
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  * Database Utility Class
20  *
21  * @category    Database
22  * @author              ExpressionEngine Dev Team
23  * @link                http://codeigniter.com/user_guide/database/
24  */
25 class CI_DB_forge {
26
27         var $fields                     = array();
28         var $keys                       = array();
29         var $primary_keys       = array();
30         var $db_char_set        =       '';
31
32         /**
33          * Constructor
34          *
35          * Grabs the CI super object instance so we can access it.
36          *
37          */
38         function CI_DB_forge()
39         {
40                 // Assign the main database object to $this->db
41                 $CI =& get_instance();
42                 $this->db =& $CI->db;
43                 log_message('debug', "Database Forge Class Initialized");
44         }
45
46         // --------------------------------------------------------------------
47
48         /**
49          * Create database
50          *
51          * @access      public
52          * @param       string  the database name
53          * @return      bool
54          */
55         function create_database($db_name)
56         {
57                 $sql = $this->_create_database($db_name);
58
59                 if (is_bool($sql))
60                 {
61                         return $sql;
62                 }
63
64                 return $this->db->query($sql);
65         }
66
67         // --------------------------------------------------------------------
68
69         /**
70          * Drop database
71          *
72          * @access      public
73          * @param       string  the database name
74          * @return      bool
75          */
76         function drop_database($db_name)
77         {
78                 $sql = $this->_drop_database($db_name);
79
80                 if (is_bool($sql))
81                 {
82                         return $sql;
83                 }
84
85                 return $this->db->query($sql);
86         }
87
88         // --------------------------------------------------------------------
89
90         /**
91          * Add Key
92          *
93          * @access      public
94          * @param       string  key
95          * @param       string  type
96          * @return      void
97          */
98         function add_key($key = '', $primary = FALSE)
99         {
100                 if (is_array($key))
101                 {
102                         foreach ($key as $one)
103                         {
104                                 $this->add_key($one, $primary);
105                         }
106
107                         return;
108                 }
109
110                 if ($key == '')
111                 {
112                         show_error('Key information is required for that operation.');
113                 }
114
115                 if ($primary === TRUE)
116                 {
117                         $this->primary_keys[] = $key;
118                 }
119                 else
120                 {
121                         $this->keys[] = $key;
122                 }
123         }
124
125         // --------------------------------------------------------------------
126
127         /**
128          * Add Field
129          *
130          * @access      public
131          * @param       string  collation
132          * @return      void
133          */
134         function add_field($field = '')
135         {
136                 if ($field == '')
137                 {
138                         show_error('Field information is required.');
139                 }
140
141                 if (is_string($field))
142                 {
143                         if ($field == 'id')
144                         {
145                                 $this->add_field(array(
146                                                                                 'id' => array(
147                                                                                                         'type' => 'INT',
148                                                                                                         'constraint' => 9,
149                                                                                                         'auto_increment' => TRUE
150                                                                                                         )
151                                                                 ));
152                                 $this->add_key('id', TRUE);
153                         }
154                         else
155                         {
156                                 if (strpos($field, ' ') === FALSE)
157                                 {
158                                         show_error('Field information is required for that operation.');
159                                 }
160
161                                 $this->fields[] = $field;
162                         }
163                 }
164
165                 if (is_array($field))
166                 {
167                         $this->fields = array_merge($this->fields, $field);
168                 }
169
170         }
171
172         // --------------------------------------------------------------------
173
174         /**
175          * Create Table
176          *
177          * @access      public
178          * @param       string  the table name
179          * @return      bool
180          */
181         function create_table($table = '', $if_not_exists = FALSE)
182         {
183                 if ($table == '')
184                 {
185                         show_error('A table name is required for that operation.');
186                 }
187
188                 if (count($this->fields) == 0)
189                 {
190                         show_error('Field information is required.');
191                 }
192
193                 $sql = $this->_create_table($this->db->dbprefix.$table, $this->fields, $this->primary_keys, $this->keys, $if_not_exists);
194
195                 $this->_reset();
196                 return $this->db->query($sql);
197         }
198
199         // --------------------------------------------------------------------
200
201         /**
202          * Drop Table
203          *
204          * @access      public
205          * @param       string  the table name
206          * @return      bool
207          */
208         function drop_table($table_name)
209         {
210                 $sql = $this->_drop_table($this->db->dbprefix.$table_name);
211
212                 if (is_bool($sql))
213                 {
214                         return $sql;
215                 }
216
217                 return $this->db->query($sql);
218         }
219
220         // --------------------------------------------------------------------
221
222         /**
223          * Rename Table
224          *
225          * @access      public
226          * @param       string  the old table name
227          * @param       string  the new table name
228          * @return      bool
229          */
230         function rename_table($table_name, $new_table_name)
231         {
232                 if ($table_name == '' OR $new_table_name == '')
233                 {
234                         show_error('A table name is required for that operation.');
235                 }
236
237                 $sql = $this->_rename_table($table_name, $new_table_name);
238                 return $this->db->query($sql);
239         }
240
241         // --------------------------------------------------------------------
242
243         /**
244          * Column Add
245          *
246          * @access      public
247          * @param       string  the table name
248          * @param       string  the column name
249          * @param       string  the column definition
250          * @return      bool
251          */
252         function add_column($table = '', $field = array(), $after_field = '')
253         {
254                 if ($table == '')
255                 {
256                         show_error('A table name is required for that operation.');
257                 }
258
259                 // add field info into field array, but we can only do one at a time
260                 // so we cycle through
261
262                 foreach ($field as $k => $v)
263                 {
264                         $this->add_field(array($k => $field[$k]));
265
266                         if (count($this->fields) == 0)
267                         {
268                                 show_error('Field information is required.');
269                         }
270
271                         $sql = $this->_alter_table('ADD', $this->db->dbprefix.$table, $this->fields, $after_field);
272
273                         $this->_reset();
274
275                         if ($this->db->query($sql) === FALSE)
276                         {
277                                 return FALSE;
278                         }
279                 }
280
281                 return TRUE;
282
283         }
284
285         // --------------------------------------------------------------------
286
287         /**
288          * Column Drop
289          *
290          * @access      public
291          * @param       string  the table name
292          * @param       string  the column name
293          * @return      bool
294          */
295         function drop_column($table = '', $column_name = '')
296         {
297
298                 if ($table == '')
299                 {
300                         show_error('A table name is required for that operation.');
301                 }
302
303                 if ($column_name == '')
304                 {
305                         show_error('A column name is required for that operation.');
306                 }
307
308                 $sql = $this->_alter_table('DROP', $this->db->dbprefix.$table, $column_name);
309
310                 return $this->db->query($sql);
311         }
312
313         // --------------------------------------------------------------------
314
315         /**
316          * Column Modify
317          *
318          * @access      public
319          * @param       string  the table name
320          * @param       string  the column name
321          * @param       string  the column definition
322          * @return      bool
323          */
324         function modify_column($table = '', $field = array())
325         {
326                 if ($table == '')
327                 {
328                         show_error('A table name is required for that operation.');
329                 }
330
331                 // add field info into field array, but we can only do one at a time
332                 // so we cycle through
333
334                 foreach ($field as $k => $v)
335                 {
336                         // If no name provided, use the current name
337                         if ( ! isset($field[$k]['name']))
338                         {
339                                 $field[$k]['name'] = $k;
340                         }
341
342                         $this->add_field(array($k => $field[$k]));
343
344                         if (count($this->fields) == 0)
345                         {
346                                 show_error('Field information is required.');
347                         }
348
349                         $sql = $this->_alter_table('CHANGE', $this->db->dbprefix.$table, $this->fields);
350
351                         $this->_reset();
352
353                         if ($this->db->query($sql) === FALSE)
354                         {
355                                 return FALSE;
356                         }
357                 }
358
359                 return TRUE;
360         }
361
362         // --------------------------------------------------------------------
363
364         /**
365          * Reset
366          *
367          * Resets table creation vars
368          *
369          * @access      private
370          * @return      void
371          */
372         function _reset()
373         {
374                 $this->fields           = array();
375                 $this->keys                     = array();
376                 $this->primary_keys     = array();
377         }
378
379 }
380
381 /* End of file DB_forge.php */
382 /* Location: ./system/database/DB_forge.php */