Browse Source

[ZF-10884] Zend_Paginator

- Fixed Zend_Paginator_Adapter_DbSelect::setRowCount() with alias set in object select.

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@23658 44c647ce-9c0f-0410-b52a-842ac1e357ba
ramon 15 years ago
parent
commit
2f8072adda

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

@@ -100,7 +100,9 @@ class Zend_Paginator_Adapter_DbSelect implements Zend_Paginator_Adapter_Interfac
         if ($rowCount instanceof Zend_Db_Select) {
             $columns = $rowCount->getPart(Zend_Db_Select::COLUMNS);
 
-            $countColumnPart = $columns[0][1];
+            $countColumnPart = empty($columns[0][2])
+                             ? $columns[0][1]
+                             : $columns[0][2];
 
             if ($countColumnPart instanceof Zend_Db_Expr) {
                 $countColumnPart = $countColumnPart->__toString();

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

@@ -473,4 +473,26 @@ class Zend_Paginator_Adapter_DbSelectTest extends PHPUnit_Framework_TestCase
         $this->assertEquals($expected, $adapter->getCountSelect()->__toString());
         $this->assertEquals(250, $adapter->count());
     }
+
+    /**
+     * @group ZF-10884
+     */
+    public function testSetRowCountWithAlias()
+    {
+        $select = $this->_db->select();
+        $select->from('test', array(
+            Zend_Paginator_Adapter_DbSelect::ROW_COUNT_COLUMN => new Zend_Db_Expr('COUNT(DISTINCT number)')
+        ));
+
+        $this->_db->setProfiler(true);
+        $adapter = new Zend_Paginator_Adapter_DbSelect($this->_db->select());
+        $adapter->setRowCount($select);
+        $adapter->count();
+
+        $expected = 'SELECT COUNT(DISTINCT number) AS "zend_paginator_row_count" FROM "test"';
+        $lastQuery = $this->_db->getProfiler()
+                         ->getLastQueryProfile()
+                         ->getQuery();
+        $this->assertEquals($expected, $lastQuery);
+    }
 }