[limb-svn] r6689 - in 3.x/trunk/limb/dbal: src/query tests/cases/non-driver/query
svn at limb-project.com
svn at limb-project.com
Tue Jan 15 17:08:10 MSK 2008
Author: serega
Date: 2008-01-15 17:08:10 +0300 (Tue, 15 Jan 2008)
New Revision: 6689
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6689
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:
-- fixed: lmbSelectRawQuery now allows to join the same table several times
-- lmbSelectRawQuery :: addOrder() now may also accepts array as first parameter, e.g. $query->order(array('field1' => 'ASC', 'field2' => 'DESC'));
Modified: 3.x/trunk/limb/dbal/src/query/lmbSelectRawQuery.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/query/lmbSelectRawQuery.class.php 2008-01-14 13:31:59 UTC (rev 6688)
+++ 3.x/trunk/limb/dbal/src/query/lmbSelectRawQuery.class.php 2008-01-15 14:08:10 UTC (rev 6689)
@@ -72,7 +72,14 @@
function addOrder($field, $type='ASC')
{
- $this->_order[] = $this->_conn->quoteIdentifier($field) . " $type";
+ if(is_array($field))
+ {
+ foreach($field as $field_name => $type)
+ $this->_order[] = $this->_conn->quoteIdentifier($field_name) . " $type";
+ }
+ else
+ $this->_order[] = $this->_conn->quoteIdentifier($field) . " $type";
+
return $this;
}
@@ -118,9 +125,16 @@
return $this->_having;
}
- function addLeftJoin($table, $field, $connect_table, $connect_field)
+ function addLeftJoin($table, $field, $connect_table, $connect_field, $table_alias = '')
{
- $this->_left_join_constraints[$table] = array($table . '.' . $field => $connect_table . '.' . $connect_field);
+ if(!$table_alias)
+ $connect_by = array($table . '.' . $field => $connect_table . '.' . $connect_field);
+ else
+ $connect_by = array($table_alias . '.' . $field => $connect_table . '.' . $connect_field);
+
+ $this->_left_join_constraints[] = array('table' => $table,
+ 'connect_by' => $connect_by,
+ 'alias' => $table_alias);
return $this;
}
@@ -196,11 +210,14 @@
protected function _getLeftJoinHint()
{
$join = array();
- foreach($this->_left_join_constraints as $table => $connect_by)
+ foreach($this->_left_join_constraints as $info)
{
+ $table = $info['table'];
+ $connect_by = $info['connect_by'];
+ $alias = $info['alias'] ? ' AS ' . $this->_conn->quoteIdentifier($info['alias']) : '';
$foreign_key = $this->_conn->quoteIdentifier(key($connect_by));
$alias_key = $this->_conn->quoteIdentifier(reset($connect_by));
- $join[] = "LEFT JOIN " . $this->_conn->quoteIdentifier($table) . " ON $foreign_key=$alias_key";
+ $join[] = "LEFT JOIN " . $this->_conn->quoteIdentifier($table) . "$alias ON $foreign_key=$alias_key";
}
return implode(' ', $join);
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-01-14 13:31:59 UTC (rev 6688)
+++ 3.x/trunk/limb/dbal/tests/cases/non-driver/query/lmbSelectRawQueryTest.class.php 2008-01-15 14:08:10 UTC (rev 6689)
@@ -133,6 +133,18 @@
"SELECT * FROM test LEFT JOIN 'article' ON 'article.id'='test.article_id'");
}
+ function testAddLeftJoinTwiceForTheSameTable()
+ {
+ $sql = new lmbSelectRawQuery('SELECT * FROM test %left_join%', $this->conn);
+
+ $sql->addLeftJoin('article', 'id', 'test', 'article_id');
+ $sql->addLeftJoin('article', 'id', 'test', 'other_article_id', 'next_article');
+
+ $this->assertEqual($sql->toString(),
+ "SELECT * FROM test LEFT JOIN 'article' ON 'article.id'='test.article_id'".
+ " LEFT JOIN 'article' AS 'next_article' ON 'next_article.id'='test.other_article_id'");
+ }
+
function testEmptyCondition()
{
$sql = new lmbSelectRawQuery('SELECT * FROM test %where%', $this->conn);
@@ -232,6 +244,14 @@
"SELECT * FROM test \nORDER BY 't1' ASC,'t2' DESC");
}
+ function testAddOrderAsArray()
+ {
+ $sql = new lmbSelectRawQuery("SELECT * FROM test \n%order%", $this->conn);
+
+ $sql->addOrder(array('t1' => 'ASC', 't2' => 'DESC'));
+ $this->assertEqual($sql->toString(),
+ }
+
function testAddOrderWithOrderClause()
{
$sql = new lmbSelectRawQuery("SELECT * FROM test ORDER BY\n %order%", $this->conn);
More information about the limb-svn
mailing list