You've already forked codeigniter_test
							
							
		
			
				
	
	
		
			382 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			382 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 | |
| /**
 | |
|  * Code Igniter
 | |
|  *
 | |
|  * An open source application development framework for PHP 5.1.6 or newer
 | |
|  *
 | |
|  * @package		CodeIgniter
 | |
|  * @author		ExpressionEngine Dev Team
 | |
|  * @copyright	Copyright (c) 2008 - 2011, 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 __construct()
 | |
| 	{
 | |
| 		// 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($this->db->dbprefix.$table_name, $this->db->dbprefix.$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)
 | |
| 		{
 | |
| 			// If no name provided, use the current name
 | |
| 			if ( ! isset($field[$k]['name']))
 | |
| 			{
 | |
| 				$field[$k]['name'] = $k;
 | |
| 			}
 | |
| 
 | |
| 			$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 */ | 
