Source of file DbSelect.php
Size: 3,255 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Paginator/Adapter/DbSelect.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Paginator\Adapter; use Zend\Db\Adapter\Adapter; use Zend\Db\Sql\Sql; use Zend\Db\Sql\Expression; use Zend\Db\Sql\Select; use Zend\Db\ResultSet\ResultSet; use Zend\Db\ResultSet\ResultSetInterface; class DbSelect implements AdapterInterface { /** * @var Sql */ protected $sql = null; /** * Database query * * @var Select */ protected $select = null; /** * @var ResultSet */ protected $resultSetPrototype = null; /** * Total item count * * @var int */ protected $rowCount = null; /** * Constructor. * * @param Select $select The select query * @param Adapter|Sql $adapterOrSqlObject DB adapter or Sql object * @param null|ResultSetInterface $resultSetPrototype * @throws Exception\InvalidArgumentException */ public function __construct(Select $select, $adapterOrSqlObject, ResultSetInterface $resultSetPrototype = null) { $this->select = $select; if ($adapterOrSqlObject instanceof Adapter) { $adapterOrSqlObject = new Sql($adapterOrSqlObject); } if (!$adapterOrSqlObject instanceof Sql) { throw new Exception\InvalidArgumentException( '$adapterOrSqlObject must be an instance of Zend\Db\Adapter\Adapter or Zend\Db\Sql\Sql' ); } $this->sql = $adapterOrSqlObject; $this->resultSetPrototype = ($resultSetPrototype) ?: new ResultSet; } /** * Returns an array of items for a page. * * @param int $offset Page offset * @param int $itemCountPerPage Number of items per page * @return array */ public function getItems($offset, $itemCountPerPage) { $select = clone $this->select; $select->offset($offset); $select->limit($itemCountPerPage); $statement = $this->sql->prepareStatementForSqlObject($select); $result = $statement->execute(); $resultSet = clone $this->resultSetPrototype; $resultSet->initialize($result); return $resultSet; } /** * Returns the total number of rows in the result set. * * @return int */ public function count() { if ($this->rowCount !== null) { return $this->rowCount; } $select = clone $this->select; $select->reset(Select::LIMIT); $select->reset(Select::OFFSET); $select->reset(Select::ORDER); $countSelect = new Select; $countSelect->columns(array('c' => new Expression('COUNT(1)'))); $countSelect->from(array('original_select' => $select)); $statement = $this->sql->prepareStatementForSqlObject($countSelect); $result = $statement->execute(); $row = $result->current(); $this->rowCount = $row['c']; return $this->rowCount; } } |