| <?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) 2006, 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 ($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 only grab the first field in the event there are more then one
|
| $this->add_field(array_slice($field, 0, 1));
|
|
|
| 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();
|
| return $this->db->query($sql);
|
| }
|
|
|
| // --------------------------------------------------------------------
|
|
|
| /**
|
| * 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 only grab the first field in the event there are more then one
|
| $this->add_field(array_slice($field, 0, 1));
|
|
|
| if (count($this->fields) == 0)
|
| {
|
| show_error('Field information is required.');
|
| }
|
|
|
| $sql = $this->_alter_table('CHANGE', $this->db->dbprefix.$table, $this->fields);
|
|
|
| $this->_reset();
|
| return $this->db->query($sql);
|
| }
|
|
|
| // --------------------------------------------------------------------
|
|
|
| /**
|
| * 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 */ |