first commit
This commit is contained in:
382
system/database/DB_forge.php
Normal file
382
system/database/DB_forge.php
Normal file
@ -0,0 +1,382 @@
|
||||
<?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 */
|
Reference in New Issue
Block a user