Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Code Igniter
 *
 * An open source application development framework for PHP 4.3.2 or newer
 *
 * @package             CodeIgniter
 * @author              ExpressionEngine Dev Team
 * @copyright   Copyright (c) 2008, 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 only grab the first field in the event there are more then one
                $this->add_field(array_slice($field, 0, 1));

                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();
                return $this->db->query($sql);
        }

        // --------------------------------------------------------------------

        /**
         * 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 only grab the first field in the event there are more then one
                $this->add_field(array_slice($field, 0, 1));

                if (count($this->fields) == 0)
                {       
                        show_error('Field information is required.');
                }

                $sql = $this->_alter_table('CHANGE', $this->db->dbprefix.$table, $this->fields);

                $this->_reset();
                return $this->db->query($sql);
        }

        // --------------------------------------------------------------------

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