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; } }