2
0
فهرست منبع

ZF-6562: Zend_Paginator_Adapter_DbSelect fails on HAVING clause

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@16157 44c647ce-9c0f-0410-b52a-842ac1e357ba
norm2782 16 سال پیش
والد
کامیت
d7ffcf5dd6
2فایلهای تغییر یافته به همراه20 افزوده شده و 1 حذف شده
  1. 3 1
      library/Zend/Paginator/Adapter/DbSelect.php
  2. 17 0
      tests/Zend/Paginator/Adapter/DbSelectTest.php

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

@@ -223,13 +223,14 @@ class Zend_Paginator_Adapter_DbSelect implements Zend_Paginator_Adapter_Interfac
                 }
             } else {
                 $groupParts = $rowCount->getPart(Zend_Db_Select::GROUP);
+                $havingPart = $rowCount->getPart(Zend_Db_Select::HAVING);
 
                 /**
                  * If this is a GROUP BY query with multiple columns, then turn
                  * the original query into a subquery of the COUNT query.
                  */
                 if (!empty($groupParts)) {
-                    if (count($groupParts) > 1) {
+                    if (count($groupParts) > 1 || !empty($havingPart)) {
                         $rowCount->reset(Zend_Db_Select::FROM);
                         $rowCount->from($this->_select);
                     } else {
@@ -251,6 +252,7 @@ class Zend_Paginator_Adapter_DbSelect implements Zend_Paginator_Adapter_Interfac
                      ->reset(Zend_Db_Select::LIMIT_OFFSET)
                      ->reset(Zend_Db_Select::GROUP)
                      ->reset(Zend_Db_Select::DISTINCT)
+                     ->reset(Zend_Db_Select::HAVING)
                      ->columns($expression);
         }
 

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

@@ -438,4 +438,21 @@ class Zend_Paginator_Adapter_DbSelectTest extends PHPUnit_Framework_TestCase
         $this->assertEquals($expected, $adapter->getCountSelect()->__toString());
         $this->assertEquals(2, $adapter->count());
     }
+
+    /**
+     * @group ZF-6562
+     */
+    public function testSelectWithHaving()
+    {
+        $select = $this->_db->select()->from('test')
+                                      ->group('number')
+                                      ->having('number > 250');
+
+        $adapter = new Zend_Paginator_Adapter_DbSelect($select);
+
+        $expected = 'SELECT COUNT(1) AS "zend_paginator_row_count" FROM (SELECT "test".* FROM "test" GROUP BY "number" HAVING (number > 250)) AS "t"';
+
+        $this->assertEquals($expected, $adapter->getCountSelect()->__toString());
+        $this->assertEquals(250, $adapter->count());
+    }
 }