Преглед на файлове

ZF-7127: Problem with WHERE clause in Paginator

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@16293 44c647ce-9c0f-0410-b52a-842ac1e357ba
norm2782 преди 16 години
родител
ревизия
a99a8d6838
променени са 2 файла, в които са добавени 19 реда и са изтрити 2 реда
  1. 1 2
      library/Zend/Paginator/Adapter/DbSelect.php
  2. 18 0
      tests/Zend/Paginator/Adapter/DbSelectTest.php

+ 1 - 2
library/Zend/Paginator/Adapter/DbSelect.php

@@ -214,8 +214,7 @@ class Zend_Paginator_Adapter_DbSelect implements Zend_Paginator_Adapter_Interfac
              * the original query and use it as a subquery os the COUNT query.
              */
             if (($isDistinct && count($columnParts) > 1) || count($groupParts) > 1 || !empty($havingParts)) {
-                $rowCount->reset(Zend_Db_Select::FROM);
-                $rowCount->from($this->_select);
+                $rowCount = $db->select()->from($this->_select);
             } else if ($isDistinct) {
                 $part = $columnParts[0];
 

+ 18 - 0
tests/Zend/Paginator/Adapter/DbSelectTest.php

@@ -455,4 +455,22 @@ class Zend_Paginator_Adapter_DbSelectTest extends PHPUnit_Framework_TestCase
         $this->assertEquals($expected, $adapter->getCountSelect()->__toString());
         $this->assertEquals(250, $adapter->count());
     }
+
+    /**
+     * @group ZF-7127
+     */
+    public function testMultipleGroupSelect()
+    {
+        $select = $this->_db->select()->from('test')
+                                      ->group('testgroup')
+                                      ->group('number')
+                                      ->where('number > 250');
+
+        $adapter = new Zend_Paginator_Adapter_DbSelect($select);
+
+        $expected = 'SELECT COUNT(1) AS "zend_paginator_row_count" FROM (SELECT "test".* FROM "test" WHERE (number > 250) GROUP BY "testgroup"' . ",\n\t" . '"number") AS "t"';
+
+        $this->assertEquals($expected, $adapter->getCountSelect()->__toString());
+        $this->assertEquals(250, $adapter->count());
+    }
 }