PageRenderTime 32ms CodeModel.GetById 22ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 1ms

/halogy/database/drivers/mysql/mysql_utility.php

https://bitbucket.org/haloweb/halogy-1.0/
PHP | 245 lines | 110 code | 36 blank | 99 comment | 16 complexity | b5a9c347da46ef054c95b1ab0c942104 MD5 | raw file
  1<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2/**
  3 * CodeIgniter
  4 *
  5 * An open source application development framework for PHP 4.3.2 or newer
  6 *
  7 * @package		CodeIgniter
  8 * @author		ExpressionEngine Dev Team
  9 * @copyright	Copyright (c) 2008 - 2009, EllisLab, Inc.
 10 * @license		http://codeigniter.com/user_guide/license.html
 11 * @link		http://codeigniter.com
 12 * @since		Version 1.0
 13 * @filesource
 14 */
 15
 16// ------------------------------------------------------------------------
 17
 18/**
 19 * MySQL Utility Class
 20 *
 21 * @category	Database
 22 * @author		ExpressionEngine Dev Team
 23 * @link		http://codeigniter.com/user_guide/database/
 24 */
 25class CI_DB_mysql_utility extends CI_DB_utility {
 26
 27	/**
 28	 * List databases
 29	 *
 30	 * @access	private
 31	 * @return	bool
 32	 */
 33	function _list_databases()
 34	{
 35		return "SHOW DATABASES";
 36	}
 37
 38	// --------------------------------------------------------------------
 39
 40	/**
 41	 * Optimize table query
 42	 *
 43	 * Generates a platform-specific query so that a table can be optimized
 44	 *
 45	 * @access	private
 46	 * @param	string	the table name
 47	 * @return	object
 48	 */
 49	function _optimize_table($table)
 50	{
 51		return "OPTIMIZE TABLE ".$this->db->_escape_identifiers($table);
 52	}
 53
 54	// --------------------------------------------------------------------
 55
 56	/**
 57	 * Repair table query
 58	 *
 59	 * Generates a platform-specific query so that a table can be repaired
 60	 *
 61	 * @access	private
 62	 * @param	string	the table name
 63	 * @return	object
 64	 */
 65	function _repair_table($table)
 66	{
 67		return "REPAIR TABLE ".$this->db->_escape_identifiers($table);
 68	}
 69
 70	// --------------------------------------------------------------------
 71	/**
 72	 * MySQL Export
 73	 *
 74	 * @access	private
 75	 * @param	array	Preferences
 76	 * @return	mixed
 77	 */
 78	function _backup($params = array())
 79	{
 80		if (count($params) == 0)
 81		{
 82			return FALSE;
 83		}
 84
 85		// Extract the prefs for simplicity
 86		extract($params);
 87	
 88		// Build the output
 89		$output = '';
 90		foreach ((array)$tables as $table)
 91		{
 92			// Is the table in the "ignore" list?
 93			if (in_array($table, (array)$ignore, TRUE))
 94			{
 95				continue;
 96			}
 97
 98			// Get the table schema
 99			$query = $this->db->query("SHOW CREATE TABLE `".$this->db->database.'`.'.$table);
100			
101			// No result means the table name was invalid
102			if ($query === FALSE)
103			{
104				continue;
105			}
106			
107			// Write out the table schema
108			$output .= '#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline;
109
110 			if ($add_drop == TRUE)
111 			{
112				$output .= 'DROP TABLE IF EXISTS '.$table.';'.$newline.$newline;
113			}
114			
115			$i = 0;
116			$result = $query->result_array();
117			foreach ($result[0] as $val)
118			{
119				if ($i++ % 2)
120				{ 					
121					$output .= $val.';'.$newline.$newline;
122				}
123			}
124			
125			// If inserts are not needed we're done...
126			if ($add_insert == FALSE)
127			{
128				continue;
129			}
130
131			// Grab all the data from the current table
132			$query = $this->db->query("SELECT * FROM $table");
133			
134			if ($query->num_rows() == 0)
135			{
136				continue;
137			}
138		
139			// Fetch the field names and determine if the field is an
140			// integer type.  We use this info to decide whether to
141			// surround the data with quotes or not
142			
143			$i = 0;
144			$field_str = '';
145			$is_int = array();
146			while ($field = mysql_fetch_field($query->result_id))
147			{
148				// Most versions of MySQL store timestamp as a string
149				$is_int[$i] = (in_array(
150										strtolower(mysql_field_type($query->result_id, $i)),
151										array('tinyint', 'smallint', 'mediumint', 'int', 'bigint'), //, 'timestamp'), 
152										TRUE)
153										) ? TRUE : FALSE;
154										
155				// Create a string of field names
156				$field_str .= '`'.$field->name.'`, ';
157				$i++;
158			}
159			
160			// Trim off the end comma
161			$field_str = preg_replace( "/, $/" , "" , $field_str);
162			
163			
164			// Build the insert string
165			foreach ($query->result_array() as $row)
166			{
167				$val_str = '';
168			
169				$i = 0;
170				foreach ($row as $v)
171				{
172					// Is the value NULL?
173					if ($v === NULL)
174					{
175						$val_str .= 'NULL';
176					}
177					else
178					{
179						// Escape the data if it's not an integer
180						if ($is_int[$i] == FALSE)
181						{
182							$val_str .= $this->db->escape($v);
183						}
184						else
185						{
186							$val_str .= $v;
187						}					
188					}					
189					
190					// Append a comma
191					$val_str .= ', ';
192					$i++;
193				}
194				
195				// Remove the comma at the end of the string
196				$val_str = preg_replace( "/, $/" , "" , $val_str);
197								
198				// Build the INSERT string
199				$output .= 'INSERT INTO '.$table.' ('.$field_str.') VALUES ('.$val_str.');'.$newline;
200			}
201			
202			$output .= $newline.$newline;
203		}
204
205		return $output;
206	}
207
208	/**
209	 *
210	 * The functions below have been deprecated as of 1.6, and are only here for backwards
211	 * compatibility.  They now reside in dbforge().  The use of dbutils for database manipulation
212	 * is STRONGLY discouraged in favour if using dbforge.
213	 *
214	 */
215
216	/**
217	 * Create database
218	 *
219	 * @access	private
220	 * @param	string	the database name
221	 * @return	bool
222	 */
223	function _create_database($name)
224	{
225		return "CREATE DATABASE ".$name;
226	}
227
228	// --------------------------------------------------------------------
229
230	/**
231	 * Drop database
232	 *
233	 * @access	private
234	 * @param	string	the database name
235	 * @return	bool
236	 */
237	function _drop_database($name)
238	{
239		return "DROP DATABASE ".$name;
240	}
241
242}
243
244/* End of file mysql_utility.php */
245/* Location: ./system/database/drivers/mysql/mysql_utility.php */