source: sourcecode/system/database/DB_forge.php @ 1

Last change on this file since 1 was 1, checked in by dungnv, 11 years ago
File size: 7.3 KB
Line 
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 */
25class 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 __construct()
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($this->db->dbprefix.$table_name, $this->db->dbprefix.$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 */
Note: See TracBrowser for help on using the repository browser.