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 */ |