Просмотр исходного кода

Change "new line" char on space char instead of blank char to preserve a very rare case with raw subquery with "new line" chars inside

Alex Komarov 10 лет назад
Родитель
Сommit
d4887a050f
2 измененных файлов с 14 добавлено и 2 удалено
  1. 1 1
      library/Zend/Db/Select.php
  2. 13 1
      tests/Zend/Db/Select/StaticTest.php

+ 1 - 1
library/Zend/Db/Select.php

@@ -940,7 +940,7 @@ class Zend_Db_Select
             $currentCorrelationName = $correlationName;
             if (is_string($col)) {
                 // Check for a column matching "<column> AS <alias>" and extract the alias name
-                $col = str_replace("\n",'',$col);
+                $col = str_replace("\n",' ',$col);
                 if (preg_match('/^(.+)\s+' . self::SQL_AS . '\s+(.+)$/i', $col, $m)) {
                     $col = $m[1];
                     $alias = $m[2];

+ 13 - 1
tests/Zend/Db/Select/StaticTest.php

@@ -1023,10 +1023,22 @@ class Zend_Db_Select_StaticTest extends Zend_Db_Select_TestCommon
         $select = $this->_db->select();
         $select->from(array('t' => 'table1'), $columns);
 
-        $expected = 'SELECT (SELECT "st1"."col1", "st2"."col2" FROM "subTable1" AS "st1" INNER JOIN "subTable2" AS "st2" ON st1.fk_id=st2.fk_id) AS "subInSelect" FROM "table1" AS "t"';
+        $expected = 'SELECT (SELECT "st1"."col1", "st2"."col2" FROM "subTable1" AS "st1"  INNER JOIN "subTable2" AS "st2" ON st1.fk_id=st2.fk_id) AS "subInSelect" FROM "table1" AS "t"';
 
         $this->assertEquals($expected, $select->assemble(),
                             'Assembling query with subquery with join failed');
     }
 
+    public function testAssembleQueryWithRawSubqueryInSelectBlock() {
+        $columns[] = '(SELECT *
+FROM tb2) as subInSelect2';
+        $select = $this->_db->select();
+        $select->from(array('t' => 'table1'), $columns);
+
+        $expected = 'SELECT (SELECT * FROM tb2) AS "subInSelect2" FROM "table1" AS "t"';
+
+        $this->assertEquals($expected, $select->assemble(),
+                            'Assembling query with raw subquery with "new line" char failed');
+    }
+
 }