[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