PageRenderTime 333ms CodeModel.GetById 162ms app.highlight 9ms RepoModel.GetById 111ms app.codeStats 1ms

/halogy/database/DB_forge.php

https://bitbucket.org/haloweb/halogy-1.0/
PHP | 375 lines | 182 code | 63 blank | 130 comment | 36 complexity | d4d66490a87d545fdf245ee500c720b4 MD5 | raw file
  1<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2/**
  3 * Code Igniter
  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 * Database Utility Class
 20 *
 21 * @category	Database
 22 * @author		ExpressionEngine Dev Team
 23 * @link		http://codeigniter.com/user_guide/database/
 24 */
 25class CI_DB_forge {
 26
 27	var $fields		 	= array();
 28	var $keys			= array();
 29	var $primary_keys 	= array();
 30	var $db_char_set	=	'';
 31
 32	/**
 33	 * Constructor
 34	 *
 35	 * Grabs the CI super object instance so we can access it.
 36	 *
 37	 */	
 38	function CI_DB_forge()
 39	{
 40		// Assign the main database object to $this->db
 41		$CI =& get_instance();
 42		$this->db =& $CI->db;
 43		log_message('debug', "Database Forge Class Initialized");
 44	}
 45
 46	// --------------------------------------------------------------------
 47
 48	/**
 49	 * Create database
 50	 *
 51	 * @access	public
 52	 * @param	string	the database name
 53	 * @return	bool
 54	 */
 55	function create_database($db_name)
 56	{
 57		$sql = $this->_create_database($db_name);
 58		
 59		if (is_bool($sql))
 60		{
 61			return $sql;
 62		}
 63	
 64		return $this->db->query($sql);
 65	}
 66
 67	// --------------------------------------------------------------------
 68
 69	/**
 70	 * Drop database
 71	 *
 72	 * @access	public
 73	 * @param	string	the database name
 74	 * @return	bool
 75	 */
 76	function drop_database($db_name)
 77	{
 78		$sql = $this->_drop_database($db_name);
 79		
 80		if (is_bool($sql))
 81		{
 82			return $sql;
 83		}
 84	
 85		return $this->db->query($sql);
 86	}
 87
 88	// --------------------------------------------------------------------
 89
 90	/**
 91	 * Add Key
 92	 *
 93	 * @access	public
 94	 * @param	string	key
 95	 * @param	string	type
 96	 * @return	void
 97	 */
 98	function add_key($key = '', $primary = FALSE)
 99	{
100		if (is_array($key))
101		{
102			foreach($key as $one)
103			{
104				$this->add_key($one, $primary);
105			}
106			
107			return;
108		}
109	
110		if ($key == '')
111		{
112			show_error('Key information is required for that operation.');
113		}
114		
115		if ($primary === TRUE)
116		{
117			$this->primary_keys[] = $key;
118		}
119		else
120		{
121			$this->keys[] = $key;
122		}
123	}
124
125	// --------------------------------------------------------------------
126
127	/**
128	 * Add Field
129	 *
130	 * @access	public
131	 * @param	string	collation
132	 * @return	void
133	 */
134	function add_field($field = '')
135	{
136		if ($field == '')
137		{
138			show_error('Field information is required.');
139		}
140		
141		if (is_string($field))
142		{
143			if ($field == 'id')
144			{
145				$this->add_field(array(
146										'id' => array(
147													'type' => 'INT',
148													'constraint' => 9,
149													'auto_increment' => TRUE
150													)
151								));
152				$this->add_key('id', TRUE);
153			}
154			else
155			{
156				if (strpos($field, ' ') === FALSE)
157				{
158					show_error('Field information is required for that operation.');
159				}
160				
161				$this->fields[] = $field;
162			}
163		}
164		
165		if (is_array($field))
166		{
167			$this->fields = array_merge($this->fields, $field);
168		}
169		
170	}
171
172	// --------------------------------------------------------------------
173
174	/**
175	 * Create Table
176	 *
177	 * @access	public
178	 * @param	string	the table name
179	 * @return	bool
180	 */
181	function create_table($table = '', $if_not_exists = FALSE)
182	{	
183		if ($table == '')
184		{
185			show_error('A table name is required for that operation.');
186		}
187			
188		if (count($this->fields) == 0)
189		{	
190			show_error('Field information is required.');
191		}
192
193		$sql = $this->_create_table($this->db->dbprefix.$table, $this->fields, $this->primary_keys, $this->keys, $if_not_exists);
194		
195		$this->_reset();
196		return $this->db->query($sql);
197	}
198
199	// --------------------------------------------------------------------
200
201	/**
202	 * Drop Table
203	 *
204	 * @access	public
205	 * @param	string	the table name
206	 * @return	bool
207	 */
208	function drop_table($table_name)
209	{
210		$sql = $this->_drop_table($this->db->dbprefix.$table_name);
211		
212		if (is_bool($sql))
213		{
214			return $sql;
215		}
216	
217		return $this->db->query($sql);
218	}
219
220	// --------------------------------------------------------------------
221
222	/**
223	 * Rename Table
224	 *
225	 * @access	public
226	 * @param	string	the old table name
227	 * @param	string	the new table name
228	 * @return	bool
229	 */
230	function rename_table($table_name, $new_table_name)
231	{
232		if ($table_name == '' OR $new_table_name == '')
233		{
234			show_error('A table name is required for that operation.');
235		}
236			
237		$sql = $this->_rename_table($table_name, $new_table_name);
238		return $this->db->query($sql);
239	}
240
241	// --------------------------------------------------------------------
242
243	/**
244	 * Column Add
245	 *
246	 * @access	public
247	 * @param	string	the table name
248	 * @param	string	the column name
249	 * @param	string	the column definition
250	 * @return	bool
251	 */
252	function add_column($table = '', $field = array(), $after_field = '')
253	{
254		if ($table == '')
255		{
256			show_error('A table name is required for that operation.');
257		}
258
259		// add field info into field array, but we can only do one at a time
260		// so we cycle through
261
262		foreach ($field as $k => $v)
263		{
264			$this->add_field(array($k => $field[$k]));		
265
266			if (count($this->fields) == 0)
267			{	
268				show_error('Field information is required.');
269			}
270			
271			$sql = $this->_alter_table('ADD', $this->db->dbprefix.$table, $this->fields, $after_field);
272
273			$this->_reset();
274	
275			if ($this->db->query($sql) === FALSE)
276			{
277				return FALSE;
278			}
279		}
280		
281		return TRUE;
282	}
283
284	// --------------------------------------------------------------------
285
286	/**
287	 * Column Drop
288	 *
289	 * @access	public
290	 * @param	string	the table name
291	 * @param	string	the column name
292	 * @return	bool
293	 */
294	function drop_column($table = '', $column_name = '')
295	{
296	
297		if ($table == '')
298		{
299			show_error('A table name is required for that operation.');
300		}
301
302		if ($column_name == '')
303		{
304			show_error('A column name is required for that operation.');
305		}
306
307		$sql = $this->_alter_table('DROP', $this->db->dbprefix.$table, $column_name);
308	
309		return $this->db->query($sql);
310	}
311
312	// --------------------------------------------------------------------
313
314	/**
315	 * Column Modify
316	 *
317	 * @access	public
318	 * @param	string	the table name
319	 * @param	string	the column name
320	 * @param	string	the column definition
321	 * @return	bool
322	 */
323	function modify_column($table = '', $field = array())
324	{
325		if ($table == '')
326		{
327			show_error('A table name is required for that operation.');
328		}
329
330		// add field info into field array, but we can only do one at a time
331		// so we cycle through
332
333		foreach ($field as $k => $v)
334		{
335			$this->add_field(array($k => $field[$k]));
336
337			if (count($this->fields) == 0)
338			{	
339				show_error('Field information is required.');
340			}
341		
342			$sql = $this->_alter_table('CHANGE', $this->db->dbprefix.$table, $this->fields);
343
344			$this->_reset();
345	
346			if ($this->db->query($sql) === FALSE)
347			{
348				return FALSE;
349			}
350		}
351		
352		return TRUE;
353	}
354
355	// --------------------------------------------------------------------
356
357	/**
358	 * Reset
359	 *
360	 * Resets table creation vars
361	 *
362	 * @access	private
363	 * @return	void
364	 */
365	function _reset()
366	{
367		$this->fields 		= array();
368		$this->keys			= array();
369		$this->primary_keys 	= array();
370	}
371
372}
373
374/* End of file DB_forge.php */
375/* Location: ./system/database/DB_forge.php */