[limb-svn] r6798 - in 3.x/trunk/limb/dbal: src/query tests/cases/non-driver/query

svn at limb-project.com svn at limb-project.com
Thu Feb 14 00:34:17 MSK 2008


Author: pachanga
Date: 2008-02-14 00:34:17 +0300 (Thu, 14 Feb 2008)
New Revision: 6798
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6798

Modified:
   3.x/trunk/limb/dbal/src/query/lmbSelectRawQuery.class.php
   3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectRawQueryTest.class.php
Log:
-- adding lmbSelectRawQuery::addRawField(, ='') which adds fields without any escaping

Modified: 3.x/trunk/limb/dbal/src/query/lmbSelectRawQuery.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/query/lmbSelectRawQuery.class.php	2008-02-12 10:15:07 UTC (rev 6797)
+++ 3.x/trunk/limb/dbal/src/query/lmbSelectRawQuery.class.php	2008-02-13 21:34:17 UTC (rev 6798)
@@ -21,6 +21,7 @@
   const DEFAULT_SQL_TEMPLATE = "SELECT %fields% FROM %tables% %left_join% %where% %group% %having% %order%";
 
   protected $_fields = array();
+  protected $_raw_fields = array();
   protected $_tables = array();
   protected $_left_join_constraints  = array();
   protected $_order = array();
@@ -51,6 +52,12 @@
     return array_keys($this->_fields);
   }
 
+  function addRawField($field, $alias = null)
+  {
+    $this->_raw_fields[$field] = $alias;
+    return $this;
+  }
+
   function addTable($table, $alias = null)
   {
     $this->_tables[] = array($table, $alias);
@@ -173,16 +180,29 @@
       $fields .= $this->_conn->quoteIdentifier($field) .
                  ($alias ? ' as ' . $this->_conn->quoteIdentifier($alias) : '') . ',';
     }
+    if(count($this->_raw_fields) == 0)
+      $fields = rtrim($fields, ',');
+
+    foreach($this->_raw_fields as $field => $alias)
+    {
+      if(strpos($field, '*') !== false)
+      {
+        $fields .= $field . ',';
+        continue;
+      }
+      
+      $fields .= $field .  ($alias ? ' as ' . $alias : '') . ',';
+    }
     $fields = rtrim($fields, ',');
 
     if($this->_selectFieldsExists())
     {
-      if(count($this->_fields))
+      if(count($this->_fields) || count($this->_raw_fields))
         return ',' . $fields;
       else
         return '';
     }
-    elseif(count($this->_fields) == 0)
+    elseif(count($this->_fields) == 0 && count($this->_raw_fields) == 0)
       return '*';
     else
       return $fields;

Modified: 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectRawQueryTest.class.php
===================================================================
--- 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectRawQueryTest.class.php	2008-02-12 10:15:07 UTC (rev 6797)
+++ 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectRawQueryTest.class.php	2008-02-13 21:34:17 UTC (rev 6798)
@@ -6,7 +6,7 @@
  * @copyright  Copyright © 2004-2007 BIT(http://bit-creative.com)
  * @license    LGPL http://www.gnu.org/copyleft/lesser.html
  */
-require_once('limb/dbal/tests/common.inc.php');
+lmb_require('limb/dbal/tests/common.inc.php');
 lmb_require('limb/dbal/src/criteria/lmbSQLRawCriteria.class.php');
 lmb_require('limb/dbal/src/criteria/lmbSQLTableFieldCriteria.class.php');
 lmb_require('limb/dbal/src/query/lmbSelectRawQuery.class.php');
@@ -26,47 +26,67 @@
     $this->conn = new ConnectionTestStub();
   }
 
-  function testSelect()
+  function testSimpleSelect()
   {
     $sql = new lmbSelectRawQuery('SELECT * FROM test', $this->conn);
 
     $this->assertEqual($sql->toString(), 'SELECT * FROM test');
   }
 
-  function testNoFields()
+  function testReplaceFieldsHintByDefault()
   {
     $sql = new lmbSelectRawQuery('SELECT %fields% FROM test', $this->conn);
 
     $this->assertEqual($sql->toString(), 'SELECT * FROM test');
   }
 
-  function testAddFieldWithFields()
+  function testReplaceFieldsHintWhenFieldsExistInTemplate()
   {
     $sql = new lmbSelectRawQuery("SELECT t3 \n%fields%,t4 FROM test", $this->conn);
 
+    $this->assertEqual($sql->toString(), "SELECT t3 \n,t4 FROM test");
+  }
+
+  function testAddFieldWhenNoFieldsExistInTemplate()
+  {
+    $sql = new lmbSelectRawQuery('SELECT %fields% FROM test', $this->conn);
+
     $sql->addField('t1');
     $sql->addField('t2');
 
-    $this->assertEqual($sql->toString(), "SELECT t3 \n,'t1','t2',t4 FROM test");
+    $this->assertEqual($sql->toString(), "SELECT 't1','t2' FROM test");
   }
 
-  function testNoFieldsAdded()
+  function testAddRawFieldWhenNoFieldsExistInTemplate()
   {
-    $sql = new lmbSelectRawQuery("SELECT t3 \n%fields%,t4 FROM test", $this->conn);
+    $sql = new lmbSelectRawQuery('SELECT %fields% FROM test', $this->conn);
 
-    $this->assertEqual($sql->toString(), "SELECT t3 \n,t4 FROM test");
+    $sql->addRawField('t1');
+    $sql->addRawField('t2');
+
+    $this->assertEqual($sql->toString(), "SELECT t1,t2 FROM test");
   }
 
-  function testAddFieldNoFields()
+  function testAddFieldWhenFieldsExistInTemplate()
   {
-    $sql = new lmbSelectRawQuery('SELECT %fields% FROM test', $this->conn);
+    $sql = new lmbSelectRawQuery("SELECT t3 \n%fields%,t4 FROM test", $this->conn);
 
     $sql->addField('t1');
     $sql->addField('t2');
 
-    $this->assertEqual($sql->toString(), "SELECT 't1','t2' FROM test");
+    $this->assertEqual($sql->toString(), "SELECT t3 \n,'t1','t2',t4 FROM test");
   }
 
+  function testAddRawFieldWhenFieldsExistInTemplate()
+  {
+    $sql = new lmbSelectRawQuery("SELECT t3 \n%fields%,t4 FROM test", $this->conn);
+
+    $sql->addRawField('t1');
+    $sql->addRawField('t2');
+
+    $this->assertEqual($sql->toString(), "SELECT t3 \n,t1,t2,t4 FROM test");
+  }
+
   function testAddFieldWithAlias()
   {
     $sql = new lmbSelectRawQuery('SELECT %fields% FROM test', $this->conn);
@@ -77,16 +97,49 @@
     $this->assertEqual($sql->toString(), "SELECT 't1' as 'a1','t2' as 'a2' FROM test");
   }
   
-  function testAddAllFieldFromTable()
+  function testAddRawFieldWithAlias()
   {
     $sql = new lmbSelectRawQuery('SELECT %fields% FROM test', $this->conn);
+
+    $sql->addRawField('t1', 'a1');
+    $sql->addRawField('t2', 'a2');
+
+    $this->assertEqual($sql->toString(), "SELECT t1 as a1,t2 as a2 FROM test");
+  }
+
+  function testMixAddingRawAndRegularFields()
+  {
+    $sql = new lmbSelectRawQuery("SELECT %fields% FROM test", $this->conn);
+
+    $sql->addRawField('t1');
+    $sql->addField('t2', 'a2');
+    $sql->addRawField('t3', 'a3');
+    $sql->addField('t4');
+
+    $this->assertEqual($sql->toString(), "SELECT 't2' as 'a2','t4',t1,t3 as a3 FROM test");
+  }
+  
+  function testMixAddingRawAndRegularFieldsWhenFieldsExistInTemplate()
+  {
+    $sql = new lmbSelectRawQuery("SELECT a \n%fields%,b FROM test", $this->conn);
+
+    $sql->addRawField('t1');
+    $sql->addField('t2', 'a2');
+    $sql->addRawField('t3', 'a3');
+    $sql->addField('t4');
+
+    $this->assertEqual($sql->toString(), "SELECT a \n,'t2' as 'a2','t4',t1,t3 as a3,b FROM test");
+  }
+  
+  function testAddStarredFieldFromTable()
+  {
+    $sql = new lmbSelectRawQuery('SELECT %fields% FROM test', $this->conn);
     $sql->addField('t1.*');
 
     $this->assertEqual($sql->toString(), 'SELECT t1.* FROM test');
   }
-  
 
-  function testNoAddTable()
+  function testReplaceTableHintInTemplate()
   {
     $sql = new lmbSelectRawQuery('SELECT * FROM test %tables%', $this->conn);
 



More information about the limb-svn mailing list