Added get_compiled_select(), get_compiled_insert(), get_compiled_update(), get_compiled_delete(), and reset_query() methods. to the Active Record class.
diff --git a/system/database/DB_active_rec.php b/system/database/DB_active_rec.php
index 37d162b..8c801cd 100644
--- a/system/database/DB_active_rec.php
+++ b/system/database/DB_active_rec.php
@@ -28,6 +28,9 @@
  */
 class CI_DB_active_record extends CI_DB_driver {
 
+	private $return_delete_sql	= FALSE;
+	private $reset_delete_data	= FALSE;
+	
 	var $ar_select				= array();
 	var $ar_distinct			= FALSE;
 	var $ar_from				= array();
@@ -196,7 +199,7 @@
 			$alias = $this->_create_alias_from_table(trim($select));
 		}
 
-		$sql = $type.'('.$this->_protect_identifiers(trim($select)).') AS '.$this->_protect_identifiers(trim($alias));
+		$sql = $type.'('.$this->_protect_identifiers(trim($select)).') AS '.$alias;
 
 		$this->ar_select[] = $sql;
 
@@ -660,12 +663,8 @@
 			$prefix = (count($this->ar_like) == 0) ? '' : $type;
 
 			$v = $this->escape_like_str($v);
-			
-			if ($side == 'none')
-			{
-				$like_statement = $prefix." $k $not LIKE '{$v}'";
-			}
-			elseif ($side == 'before')
+
+			if ($side == 'before')
 			{
 				$like_statement = $prefix." $k $not LIKE '%{$v}'";
 			}
@@ -874,11 +873,11 @@
 	 */
 	public function limit($value, $offset = '')
 	{
-		$this->ar_limit = (int) $value;
+		$this->ar_limit = $value;
 
 		if ($offset != '')
 		{
-			$this->ar_offset = (int) $offset;
+			$this->ar_offset = $offset;
 		}
 
 		return $this;
@@ -931,6 +930,38 @@
 
 		return $this;
 	}
+	
+		
+	// --------------------------------------------------------------------
+
+	/**
+	 * Get SELECT query string
+	 *
+	 * Compiles a SELECT query string and returns the sql.
+	 *
+	 * @access	public
+	 * @param	string	the table name to select from (optional)
+	 * @param	boolean	TRUE: resets AR values; FALSE: leave AR vaules alone
+	 * @return	string
+	 */
+	public function get_compiled_select($table = '', $reset = TRUE) 
+	{
+		if ($table != '')
+        {
+			$this->_track_aliases($table);
+			$this->from($table);
+		}
+		
+		$select =  $this->_compile_select();
+		
+		if ($reset === TRUE)
+		{
+			$this->_reset_select();
+		}
+		
+		return $select;
+	}
+	
 
 	// --------------------------------------------------------------------
 
@@ -1148,6 +1179,36 @@
 
 		return $this;
 	}
+	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Get INSERT query string
+	 *
+	 * Compiles an insert query and returns the sql
+	 *
+	 * @access	public
+	 * @param	string	the table to insert into
+	 * @param	boolean	TRUE: reset AR values; FALSE: leave AR values alone
+	 * @return	string
+	 */
+	public function get_compiled_insert($table = '', $reset = TRUE)
+	{	
+		if ($this->_validate_insert($table) === FALSE)
+		{
+			return FALSE;
+		}
+		
+		$sql = $this->_insert($this->_protect_identifiers($this->ar_from[0], TRUE, NULL, FALSE), array_keys($this->ar_set), array_values($this->ar_set));
+		
+		if ($reset === TRUE)
+		{
+			$this->_reset_write();
+		}
+		
+		return $sql;
+	}
+	
 
 	// --------------------------------------------------------------------
 
@@ -1156,17 +1217,45 @@
 	 *
 	 * Compiles an insert string and runs the query
 	 *
+	 * @access	public
 	 * @param	string	the table to insert data into
 	 * @param	array	an associative array of insert values
 	 * @return	object
 	 */
-	function insert($table = '', $set = NULL)
+	public function insert($table = '', $set = NULL)
 	{
 		if ( ! is_null($set))
 		{
 			$this->set($set);
 		}
+		
+		if ($this->_validate_insert($table) === FALSE)
+		{
+			return FALSE;
+		}
+		
+		$sql = $this->_insert($this->_protect_identifiers($this->ar_from[0], TRUE, NULL, FALSE), array_keys($this->ar_set), array_values($this->ar_set));
 
+		$this->_reset_write();
+		return $this->query($sql);
+	}
+	
+	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Validate Insert
+	 *
+	 * This method is used by both insert() and get_compiled_insert() to
+	 * validate that the there data is actually being set and that table
+	 * has been chosen to be inserted into.
+	 *
+	 * @access	public
+	 * @param	string	the table to insert data into
+	 * @return	string
+	 */
+	protected function _validate_insert($table = '') 
+	{
 		if (count($this->ar_set) == 0)
 		{
 			if ($this->db_debug)
@@ -1186,14 +1275,13 @@
 				}
 				return FALSE;
 			}
-
-			$table = $this->ar_from[0];
 		}
-
-		$sql = $this->_insert($this->_protect_identifiers($table, TRUE, NULL, FALSE), array_keys($this->ar_set), array_values($this->ar_set));
-
-		$this->_reset_write();
-		return $this->query($sql);
+		else
+		{
+			$this->ar_from[0] = $table;
+		}
+		
+		return TRUE;
 	}
 
 	// --------------------------------------------------------------------
@@ -1242,7 +1330,41 @@
 		$this->_reset_write();
 		return $this->query($sql);
 	}
+	
+	
+	// --------------------------------------------------------------------
 
+	/**
+	 * Get UPDATE query string
+	 *
+	 * Compiles an update query and returns the sql
+	 *
+	 * @access	public
+	 * @param	string	the table to update
+	 * @param	boolean	TRUE: reset AR values; FALSE: leave AR values alone
+	 * @return	string
+	 */
+	public function get_compiled_update($table = '', $reset = TRUE)
+	{
+		// Combine any cached components with the current statements
+		$this->_merge_cache();
+	
+		if ($this->_validate_update($table) === FALSE)
+		{
+			return FALSE;
+		}
+		
+		$sql = $this->_update($this->_protect_identifiers($this->ar_from[0], TRUE, NULL, FALSE), $this->ar_set, $this->ar_where, $this->ar_orderby, $this->ar_limit);
+		
+		if ($reset === TRUE)
+		{
+			$this->_reset_write();
+		}
+		
+		return $sql;
+	}
+	
+	
 	// --------------------------------------------------------------------
 
 	/**
@@ -1265,6 +1387,43 @@
 			$this->set($set);
 		}
 
+		if ($this->_validate_update($table) === FALSE)
+		{
+			return FALSE;
+		}
+
+		if ($where != NULL)
+		{
+			$this->where($where);
+		}
+
+		if ($limit != NULL)
+		{
+			$this->limit($limit);
+		}
+
+		$sql = $this->_update($this->_protect_identifiers($this->ar_from[0], TRUE, NULL, FALSE), $this->ar_set, $this->ar_where, $this->ar_orderby, $this->ar_limit);
+
+		$this->_reset_write();
+		return $this->query($sql);
+	}
+	
+		
+	// --------------------------------------------------------------------
+
+	/**
+	 * Validate Update
+	 *
+	 * This method is used by both update() and get_compiled_update() to
+	 * validate that data is actually being set and that a table has been
+	 * chosen to be update.
+	 *
+	 * @access	public
+	 * @param	string	the table to update data on
+	 * @return	string
+	 */
+	protected function _validate_update($table = '')
+	{
 		if (count($this->ar_set) == 0)
 		{
 			if ($this->db_debug)
@@ -1284,24 +1443,11 @@
 				}
 				return FALSE;
 			}
-
-			$table = $this->ar_from[0];
 		}
-
-		if ($where != NULL)
+		else
 		{
-			$this->where($where);
+			$this->ar_from[0] = $table;
 		}
-
-		if ($limit != NULL)
-		{
-			$this->limit($limit);
-		}
-
-		$sql = $this->_update($this->_protect_identifiers($table, TRUE, NULL, FALSE), $this->ar_set, $this->ar_where, $this->ar_orderby, $this->ar_limit);
-
-		$this->_reset_write();
-		return $this->query($sql);
 	}
 
 
@@ -1326,7 +1472,7 @@
 		{
 			if ($this->db_debug)
 			{
-				return $this->display_error('db_must_use_index');
+				return $this->display_error('db_myst_use_index');
 			}
 
 			return FALSE;
@@ -1503,7 +1649,27 @@
 
 		return $this->query($sql);
 	}
+	
+	// --------------------------------------------------------------------
 
+	/**
+	 * Get DELETE query string
+	 *
+	 * Compiles a delete query string and returns the sql
+	 *
+	 * @access	public
+	 * @param	string	the table to delete from
+	 * @param	boolean	TRUE: reset AR values; FALSE: leave AR values alone
+	 * @return	string
+	 */
+	public function get_compiled_delete($table = '', $reset = TRUE)
+	{
+		$this->return_delete_sql = TRUE;
+		$sql = $this->delete($table, '', NULL, $reset);
+		$this->return_delete_sql = FALSE;
+		return $sql;
+	}
+	
 	// --------------------------------------------------------------------
 
 	/**
@@ -1576,9 +1742,15 @@
 		{
 			$this->_reset_write();
 		}
+		
+		if ($this->return_delete_sql === true)
+		{
+			return $sql;
+		}
 
 		return $this->query($sql);
 	}
+	
 
 	// --------------------------------------------------------------------
 
@@ -1659,6 +1831,7 @@
 			}
 		}
 	}
+	
 
 	// --------------------------------------------------------------------
 
@@ -1965,6 +2138,22 @@
 
 		$this->ar_no_escape = $this->ar_cache_no_escape;
 	}
+	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Reset Active Record values.
+	 * 
+	 * Publicly-visible method to reset the AR values.
+	 *
+	 * @access	public
+	 * @return	void
+	 */
+	public function reset_query()
+	{
+		$this->_reset_select();
+		$this->_reset_write();
+	}
 
 	// --------------------------------------------------------------------
 
@@ -2042,4 +2231,4 @@
 }
 
 /* End of file DB_active_rec.php */
-/* Location: ./system/database/DB_active_rec.php */
\ No newline at end of file
+/* Location: ./system/database/DB_active_rec.php */