[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