Setting tag www-register-wizard-4.3-4
[www-register-wizard.git] / 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 4.3.2 or newer
6  *
7  * @package             CodeIgniter
8  * @author              ExpressionEngine Dev Team
9  * @copyright   Copyright (c) 2008 - 2009, 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          * Column Drop
288          *
289          * @access      public
290          * @param       string  the table name
291          * @param       string  the column name
292          * @return      bool
293          */
294         function drop_column($table = '', $column_name = '')
295         {
296         
297                 if ($table == '')
298                 {
299                         show_error('A table name is required for that operation.');
300                 }
301
302                 if ($column_name == '')
303                 {
304                         show_error('A column name is required for that operation.');
305                 }
306
307                 $sql = $this->_alter_table('DROP', $this->db->dbprefix.$table, $column_name);
308         
309                 return $this->db->query($sql);
310         }
311
312         // --------------------------------------------------------------------
313
314         /**
315          * Column Modify
316          *
317          * @access      public
318          * @param       string  the table name
319          * @param       string  the column name
320          * @param       string  the column definition
321          * @return      bool
322          */
323         function modify_column($table = '', $field = array())
324         {
325                 if ($table == '')
326                 {
327                         show_error('A table name is required for that operation.');
328                 }
329
330                 // add field info into field array, but we can only do one at a time
331                 // so we cycle through
332
333                 foreach ($field as $k => $v)
334                 {
335                         $this->add_field(array($k => $field[$k]));
336
337                         if (count($this->fields) == 0)
338                         {       
339                                 show_error('Field information is required.');
340                         }
341                 
342                         $sql = $this->_alter_table('CHANGE', $this->db->dbprefix.$table, $this->fields);
343
344                         $this->_reset();
345         
346                         if ($this->db->query($sql) === FALSE)
347                         {
348                                 return FALSE;
349                         }
350                 }
351                 
352                 return TRUE;
353         }
354
355         // --------------------------------------------------------------------
356
357         /**
358          * Reset
359          *
360          * Resets table creation vars
361          *
362          * @access      private
363          * @return      void
364          */
365         function _reset()
366         {
367                 $this->fields           = array();
368                 $this->keys                     = array();
369                 $this->primary_keys     = array();
370         }
371
372 }
373
374 /* End of file DB_forge.php */
375 /* Location: ./system/database/DB_forge.php */