upgrade to codeigniter 1.7.2 for f12
[www-register-wizard.git] / database / DB_active_rec.php
index 4cc54a7..0702199 100644 (file)
@@ -6,7 +6,7 @@
  *
  * @package            CodeIgniter
  * @author             ExpressionEngine Dev Team
- * @copyright  Copyright (c) 2008, EllisLab, Inc.
+ * @copyright  Copyright (c) 2008 - 2009, EllisLab, Inc.
  * @license            http://codeigniter.com/user_guide/license.html
  * @link               http://codeigniter.com
  * @since              Version 1.0
@@ -267,16 +267,38 @@ class CI_DB_active_record extends CI_DB_driver {
        {
                foreach ((array)$from as $val)
                {
-                       // Extract any aliases that might exist.  We use this information
-                       // in the _protect_identifiers to know whether to add a table prefix 
-                       $this->_track_aliases($val);
+                       if (strpos($val, ',') !== FALSE)
+                       {
+                               foreach (explode(',', $val) as $v)
+                               {
+                                       $v = trim($v);
+                                       $this->_track_aliases($v);
 
-                       $this->ar_from[] = $this->_protect_identifiers($val, TRUE, NULL, FALSE);
-                       
-                       if ($this->ar_caching === TRUE)
+                                       $this->ar_from[] = $this->_protect_identifiers($v, TRUE, NULL, FALSE);
+                                       
+                                       if ($this->ar_caching === TRUE)
+                                       {
+                                               $this->ar_cache_from[] = $this->_protect_identifiers($v, TRUE, NULL, FALSE);
+                                               $this->ar_cache_exists[] = 'from';
+                                       }                               
+                               }
+
+                       }
+                       else
                        {
-                               $this->ar_cache_from[] = $this->_protect_identifiers($val, TRUE, NULL, FALSE);
-                               $this->ar_cache_exists[] = 'from';
+                               $val = trim($val);
+
+                               // Extract any aliases that might exist.  We use this information
+                               // in the _protect_identifiers to know whether to add a table prefix 
+                               $this->_track_aliases($val);
+       
+                               $this->ar_from[] = $this->_protect_identifiers($val, TRUE, NULL, FALSE);
+                               
+                               if ($this->ar_caching === TRUE)
+                               {
+                                       $this->ar_cache_from[] = $this->_protect_identifiers($val, TRUE, NULL, FALSE);
+                                       $this->ar_cache_exists[] = 'from';
+                               }
                        }
                }
 
@@ -685,7 +707,7 @@ class CI_DB_active_record extends CI_DB_driver {
 
                        $prefix = (count($this->ar_like) == 0) ? '' : $type;
 
-                       $v = $this->escape_str($v);
+                       $v = $this->escape_like_str($v);
 
                        if ($side == 'before')
                        {
@@ -700,6 +722,12 @@ class CI_DB_active_record extends CI_DB_driver {
                                $like_statement = $prefix." $k $not LIKE '%{$v}%'";
                        }
                        
+                       // some platforms require an escape sequence definition for LIKE wildcards
+                       if ($this->_like_escape_str != '')
+                       {
+                               $like_statement = $like_statement.sprintf($this->_like_escape_str, $this->_like_escape_char);
+                       }
+                       
                        $this->ar_like[] = $like_statement;
                        if ($this->ar_caching === TRUE)
                        {
@@ -873,8 +901,30 @@ class CI_DB_active_record extends CI_DB_driver {
                {
                        $direction = (in_array(strtoupper(trim($direction)), array('ASC', 'DESC'), TRUE)) ? ' '.$direction : ' ASC';
                }
-               
-               $orderby_statement = $this->_protect_identifiers($orderby).$direction;
+       
+       
+               if (strpos($orderby, ',') !== FALSE)
+               {
+                       $temp = array();
+                       foreach (explode(',', $orderby) as $part)
+                       {
+                               $part = trim($part);
+                               if ( ! in_array($part, $this->ar_aliased_tables))
+                               {
+                                       $part = $this->_protect_identifiers(trim($part));
+                               }
+                               
+                               $temp[] = $part;
+                       }
+                       
+                       $orderby = implode(', ', $temp);                        
+               }
+               else if ($direction != $this->_random_keyword)
+               {
+                       $orderby = $this->_protect_identifiers($orderby);
+               }
+       
+               $orderby_statement = $orderby.$direction;
                
                $this->ar_orderby[] = $orderby_statement;
                if ($this->ar_caching === TRUE)
@@ -1330,7 +1380,7 @@ class CI_DB_active_record extends CI_DB_driver {
                        $this->limit($limit);
                }
 
-               if (count($this->ar_where) == 0 && count($this->ar_like) == 0)
+               if (count($this->ar_where) == 0 && count($this->ar_wherein) == 0 && count($this->ar_like) == 0)
                {
                        if ($this->db_debug)
                        {