Файл: Luxe-Shop v6.0/system/database/DB_forge.php
Строк: 212
<?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 */