382 行
		
	
	
	
		
			7.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			382 行
		
	
	
	
		
			7.2 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 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)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											// 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 */
							 |