| <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); |
| /** |
| * Code Igniter |
| * |
| * An open source application development framework for PHP 4.3.2 or newer |
| * |
| * @package CodeIgniter |
| * @author ExpressionEngine Dev Team |
| * @copyright Copyright (c) 2008 - 2010, EllisLab, Inc. |
| * @license http://codeigniter.com/user_guide/license.html |
| * @link http://codeigniter.com |
| * @since Version 1.0 |
| * @filesource |
| */ |
| |
| // ------------------------------------------------------------------------ |
| |
| /** |
| * Database Utility Class |
| * |
| * @category Database |
| * @author ExpressionEngine Dev Team |
| * @link http://codeigniter.com/user_guide/database/ |
| */ |
| class CI_DB_forge { |
| |
| var $fields = array(); |
| var $keys = array(); |
| var $primary_keys = array(); |
| var $db_char_set = ''; |
| |
| /** |
| * Constructor |
| * |
| * Grabs the CI super object instance so we can access it. |
| * |
| */ |
| function CI_DB_forge() |
| { |
| // Assign the main database object to $this->db |
| $CI =& get_instance(); |
| $this->db =& $CI->db; |
| log_message('debug', "Database Forge Class Initialized"); |
| } |
| |
| // -------------------------------------------------------------------- |
| |
| /** |
| * Create database |
| * |
| * @access public |
| * @param string the database name |
| * @return bool |
| */ |
| function create_database($db_name) |
| { |
| $sql = $this->_create_database($db_name); |
| |
| if (is_bool($sql)) |
| { |
| return $sql; |
| } |
| |
| return $this->db->query($sql); |
| } |
| |
| // -------------------------------------------------------------------- |
| |
| /** |
| * Drop database |
| * |
| * @access public |
| * @param string the database name |
| * @return bool |
| */ |
| function drop_database($db_name) |
| { |
| $sql = $this->_drop_database($db_name); |
| |
| if (is_bool($sql)) |
| { |
| return $sql; |
| } |
| |
| return $this->db->query($sql); |
| } |
| |
| // -------------------------------------------------------------------- |
| |
| /** |
| * Add Key |
| * |
| * @access public |
| * @param string key |
| * @param string type |
| * @return void |
| */ |
| function add_key($key = '', $primary = FALSE) |
| { |
| if (is_array($key)) |
| { |
| foreach($key as $one) |
| { |
| $this->add_key($one, $primary); |
| } |
| |
| return; |
| } |
| |
| if ($key == '') |
| { |
| show_error('Key information is required for that operation.'); |
| } |
| |
| if ($primary === TRUE) |
| { |
| $this->primary_keys[] = $key; |
| } |
| else |
| { |
| $this->keys[] = $key; |
| } |
| } |
| |
| // -------------------------------------------------------------------- |
| |
| /** |
| * Add Field |
| * |
| * @access public |
| * @param string collation |
| * @return void |
| */ |
| function add_field($field = '') |
| { |
| if ($field == '') |
| { |
| show_error('Field information is required.'); |
| } |
| |
| if (is_string($field)) |
| { |
| if ($field == 'id') |
| { |
| $this->add_field(array( |
| 'id' => array( |
| 'type' => 'INT', |
| 'constraint' => 9, |
| 'auto_increment' => TRUE |
| ) |
| )); |
| $this->add_key('id', TRUE); |
| } |
| else |
| { |
| if (strpos($field, ' ') === FALSE) |
| { |
| show_error('Field information is required for that operation.'); |
| } |
| |
| $this->fields[] = $field; |
| } |
| } |
| |
| if (is_array($field)) |
| { |
| $this->fields = array_merge($this->fields, $field); |
| } |
| |
| } |
| |
| // -------------------------------------------------------------------- |
| |
| /** |
| * Create Table |
| * |
| * @access public |
| * @param string the table name |
| * @return bool |
| */ |
| function create_table($table = '', $if_not_exists = FALSE) |
| { |
| if ($table == '') |
| { |
| show_error('A table name is required for that operation.'); |
| } |
| |
| if (count($this->fields) == 0) |
| { |
| show_error('Field information is required.'); |
| } |
| |
| $sql = $this->_create_table($this->db->dbprefix.$table, $this->fields, $this->primary_keys, $this->keys, $if_not_exists); |
| |
| $this->_reset(); |
| return $this->db->query($sql); |
| } |
| |
| // -------------------------------------------------------------------- |
| |
| /** |
| * Drop Table |
| * |
| * @access public |
| * @param string the table name |
| * @return bool |
| */ |
| function drop_table($table_name) |
| { |
| $sql = $this->_drop_table($this->db->dbprefix.$table_name); |
| |
| if (is_bool($sql)) |
| { |
| return $sql; |
| } |
| |
| return $this->db->query($sql); |
| } |
| |
| // -------------------------------------------------------------------- |
| |
| /** |
| * Rename Table |
| * |
| * @access public |
| * @param string the old table name |
| * @param string the new table name |
| * @return bool |
| */ |
| function rename_table($table_name, $new_table_name) |
| { |
| if ($table_name == '' OR $new_table_name == '') |
| { |
| show_error('A table name is required for that operation.'); |
| } |
| |
| $sql = $this->_rename_table($table_name, $new_table_name); |
| return $this->db->query($sql); |
| } |
| |
| // -------------------------------------------------------------------- |
| |
| /** |
| * Column Add |
| * |
| * @access public |
| * @param string the table name |
| * @param string the column name |
| * @param string the column definition |
| * @return bool |
| */ |
| function add_column($table = '', $field = array(), $after_field = '') |
| { |
| if ($table == '') |
| { |
| show_error('A table name is required for that operation.'); |
| } |
| |
| // add field info into field array, but we can only do one at a time |
| // so we cycle through |
| |
| foreach ($field as $k => $v) |
| { |
| $this->add_field(array($k => $field[$k])); |
| |
| if (count($this->fields) == 0) |
| { |
| show_error('Field information is required.'); |
| } |
| |
| $sql = $this->_alter_table('ADD', $this->db->dbprefix.$table, $this->fields, $after_field); |
| |
| $this->_reset(); |
| |
| if ($this->db->query($sql) === FALSE) |
| { |
| return FALSE; |
| } |
| } |
| |
| return TRUE; |
| |
| } |
| |
| // -------------------------------------------------------------------- |
| |
| /** |
| * Column Drop |
| * |
| * @access public |
| * @param string the table name |
| * @param string the column name |
| * @return bool |
| */ |
| function drop_column($table = '', $column_name = '') |
| { |
| |
| if ($table == '') |
| { |
| show_error('A table name is required for that operation.'); |
| } |
| |
| if ($column_name == '') |
| { |
| show_error('A column name is required for that operation.'); |
| } |
| |
| $sql = $this->_alter_table('DROP', $this->db->dbprefix.$table, $column_name); |
| |
| return $this->db->query($sql); |
| } |
| |
| // -------------------------------------------------------------------- |
| |
| /** |
| * Column Modify |
| * |
| * @access public |
| * @param string the table name |
| * @param string the column name |
| * @param string the column definition |
| * @return bool |
| */ |
| function modify_column($table = '', $field = array()) |
| { |
| if ($table == '') |
| { |
| show_error('A table name is required for that operation.'); |
| } |
| |
| // add field info into field array, but we can only do one at a time |
| // so we cycle through |
| |
| foreach ($field as $k => $v) |
| { |
| $this->add_field(array($k => $field[$k])); |
| |
| if (count($this->fields) == 0) |
| { |
| show_error('Field information is required.'); |
| } |
| |
| $sql = $this->_alter_table('CHANGE', $this->db->dbprefix.$table, $this->fields); |
| |
| $this->_reset(); |
| |
| if ($this->db->query($sql) === FALSE) |
| { |
| return FALSE; |
| } |
| } |
| |
| return TRUE; |
| } |
| |
| // -------------------------------------------------------------------- |
| |
| /** |
| * Reset |
| * |
| * Resets table creation vars |
| * |
| * @access private |
| * @return void |
| */ |
| function _reset() |
| { |
| $this->fields = array(); |
| $this->keys = array(); |
| $this->primary_keys = array(); |
| } |
| |
| } |
| |
| /* End of file DB_forge.php */ |
| /* Location: ./system/database/DB_forge.php */ |