Parcourir la source

[ZF-10704] Zend_Paginator

- Fix adapter db select if assigned object select with bind.

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@23854 44c647ce-9c0f-0410-b52a-842ac1e357ba
ramon il y a 14 ans
Parent
commit
be6fbc5809

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

@@ -203,7 +203,10 @@ class Zend_Paginator_Adapter_DbSelect implements Zend_Paginator_Adapter_Interfac
         if (!empty($unionParts)) {
             $expression = new Zend_Db_Expr($countPart . $countColumn);
 
-            $rowCount = $db->select()->from($rowCount, $expression);
+            $rowCount = $db
+                            ->select()
+                            ->bind($rowCount->getBind())
+                            ->from($rowCount, $expression);
         } else {
             $columnParts = $rowCount->getPart(Zend_Db_Select::COLUMNS);
             $groupParts  = $rowCount->getPart(Zend_Db_Select::GROUP);
@@ -217,7 +220,10 @@ class Zend_Paginator_Adapter_DbSelect implements Zend_Paginator_Adapter_Interfac
              */
             if (($isDistinct && count($columnParts) > 1) || count($groupParts) > 1 || !empty($havingParts)) {
                 $rowCount->reset(Zend_Db_Select::ORDER);
-                $rowCount = $db->select()->from($rowCount);
+                $rowCount = $db
+                               ->select()
+                               ->bind($rowCount->getBind())
+                               ->from($rowCount);
             } else if ($isDistinct) {
                 $part = $columnParts[0];
 

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

@@ -509,4 +509,32 @@ class Zend_Paginator_Adapter_DbSelectTest extends PHPUnit_Framework_TestCase
 
         $this->assertEquals(2, $adapter->count());
     }
+
+    /**
+     * @group ZF-10704
+     */
+    public function testObjectSelectWithBind()
+    {
+        $select = $this->_db->select();
+        $select->from('test', array('number'))
+               ->where('number = ?')
+               ->distinct(true)
+               ->bind(array(250));
+
+        $adapter = new Zend_Paginator_Adapter_DbSelect($select);
+        $this->assertEquals(1, $adapter->count());
+
+        $select->reset(Zend_Db_Select::DISTINCT);
+        $select2 = clone $select;
+        $select2->reset(Zend_Db_Select::WHERE)
+                ->where('number = 500');
+
+        $selectUnion = $this->_db
+                           ->select()
+                           ->bind(array(250));
+
+        $selectUnion->union(array($select, $select2));
+        $adapter = new Zend_Paginator_Adapter_DbSelect($selectUnion);
+        $this->assertEquals(2, $adapter->count());
+    }
 }