Example #1
0
 /**
  * {@inheritdoc}
  */
 public function getIterator()
 {
     $offset = $this->query->getFirstResult();
     $length = $this->query->getMaxResults();
     if ($this->fetchJoinCollection) {
         $subQuery = $this->cloneQuery($this->query);
         $subQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Pagerfanta\\Adapter\\DoctrineORM\\LimitSubqueryWalker'))->setFirstResult($offset)->setMaxResults($length);
         $ids = array_map('current', $subQuery->getScalarResult());
         $whereInQuery = $this->cloneQuery($this->query);
         // don't do this for an empty id array
         if (count($ids) > 0) {
             $namespace = 'pg_';
             $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Pagerfanta\\Adapter\\DoctrineORM\\WhereInWalker'));
             $whereInQuery->setHint('id.count', count($ids));
             $whereInQuery->setHint('pg.ns', $namespace);
             $whereInQuery->setFirstResult(null)->setMaxResults(null);
             foreach ($ids as $i => $id) {
                 $i++;
                 $whereInQuery->setParameter("{$namespace}_{$i}", $id);
             }
         }
         return new \ArrayIterator($whereInQuery->getResult($this->query->getHydrationMode()));
     }
     $result = $this->cloneQuery($this->query)->setMaxResults($length)->setFirstResult($offset)->getResult($this->query->getHydrationMode());
     return new \ArrayIterator($result);
 }
Example #2
0
 public function __construct(DoctrineOrmPaginator $paginator)
 {
     $this->paginator = $paginator;
     $this->query = $paginator->getQuery();
     $this->firstResult = $this->query->getFirstResult();
     $this->maxResults = $this->query->getMaxResults();
     $this->totalItems = count($paginator);
 }
Example #3
0
 /**
  * {@inheritdoc}
  */
 public function getIterator()
 {
     $offset = $this->query->getFirstResult();
     $length = $this->query->getMaxResults();
     if ($this->fetchJoinCollection) {
         $subQuery = $this->cloneQuery($this->query);
         $subQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\\ORM\\Tools\\Pagination\\LimitSubqueryWalker'))->setFirstResult($offset)->setMaxResults($length);
         $ids = array_map('current', $subQuery->getScalarResult());
         $whereInQuery = $this->cloneQuery($this->query);
         // don't do this for an empty id array
         if (count($ids) > 0) {
             $namespace = WhereInWalker::PAGINATOR_ID_ALIAS;
             $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\\ORM\\Tools\\Pagination\\WhereInWalker'));
             $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, count($ids));
             $whereInQuery->setFirstResult(null)->setMaxResults(null);
             foreach ($ids as $i => $id) {
                 $i++;
                 $whereInQuery->setParameter("{$namespace}_{$i}", $id);
             }
         }
         $result = $whereInQuery->getResult($this->query->getHydrationMode());
     } else {
         $result = $this->cloneQuery($this->query)->setMaxResults($length)->setFirstResult($offset)->getResult($this->query->getHydrationMode());
     }
     return new \ArrayIterator($result);
 }
Example #4
0
 public function getResult()
 {
     $offset = $this->query->getFirstResult();
     $length = $this->query->getMaxResults();
     if ($this->fetchJoinCollection) {
         $subQuery = $this->cloneQuery($this->query);
         if ($this->useOutputWalker($subQuery)) {
             $subQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Doctrine\\ORM\\Tools\\Pagination\\LimitSubqueryOutputWalker');
         } else {
             $this->appendTreeWalker($subQuery, 'Doctrine\\ORM\\Tools\\Pagination\\LimitSubqueryWalker');
         }
         $subQuery->setFirstResult($offset)->setMaxResults($length);
         $ids = array_map('current', $subQuery->getScalarResult());
         $whereInQuery = $this->cloneQuery($this->query);
         // don't do this for an empty id array
         if (count($ids) == 0) {
             return new \ArrayIterator(array());
         }
         $this->appendTreeWalker($whereInQuery, 'Doctrine\\ORM\\Tools\\Pagination\\WhereInWalker');
         $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, count($ids));
         $whereInQuery->setFirstResult(null)->setMaxResults(null);
         $whereInQuery->setParameter(WhereInWalker::PAGINATOR_ID_ALIAS, $ids);
         $whereInQuery->setCacheable($this->query->isCacheable());
         $result = $whereInQuery->getResult($this->query->getHydrationMode());
     } else {
         $result = $this->cloneQuery($this->query)->setMaxResults($length)->setFirstResult($offset)->setCacheable($this->query->isCacheable())->getResult($this->query->getHydrationMode());
     }
     return $result;
 }
Example #5
0
 /**
  * Class constructor.
  *
  * @param \Doctrine\ORM\Query
  *
  * @throws \RuntimeException
  */
 public function __construct(Query $query)
 {
     if ($query->getFirstResult() !== null || $query->getMaxResults() !== null) {
         throw new \RuntimeException('Cannot build a QueryCollection from a Query ' . 'with firstResult or maxResults set.');
     }
     $this->query = $this->cloneQuery($query);
 }
 /**
  * Constructor.
  *
  * Stores various parameters that are otherwise unavailable
  * because Doctrine\ORM\Query\SqlWalker keeps everything private without
  * accessors.
  *
  * @param \Doctrine\ORM\Query              $query
  * @param \Doctrine\ORM\Query\ParserResult $parserResult
  * @param array                            $queryComponents
  */
 public function __construct($query, $parserResult, array $queryComponents)
 {
     $this->platform = $query->getEntityManager()->getConnection()->getDatabasePlatform();
     $this->rsm = $parserResult->getResultSetMapping();
     $this->queryComponents = $queryComponents;
     // Reset limit and offset
     $this->firstResult = $query->getFirstResult();
     $this->maxResults = $query->getMaxResults();
     $query->setFirstResult(null)->setMaxResults(null);
     parent::__construct($query, $parserResult, $queryComponents);
 }
Example #7
0
 /**
  * @param int|null
  * @return \ArrayIterator
  */
 public function getIterator($hydrationMode = NULL)
 {
     if ($this->iterator !== NULL) {
         return $this->iterator;
     }
     if ($hydrationMode !== NULL) {
         $this->query->setHydrationMode($hydrationMode);
     }
     $this->frozen = TRUE;
     if ($this->fetchJoinCollection && ($this->query->getMaxResults() > 0 || $this->query->getFirstResult() > 0)) {
         $this->iterator = $this->createPaginatedQuery($this->query)->getIterator();
     } else {
         $this->iterator = new \ArrayIterator($this->query->getResult(NULL));
     }
     if ($this->repository && $this->queryObject) {
         $this->queryObject->queryFetched($this->repository, $this->iterator);
     }
     return $this->iterator;
 }
Example #8
0
 /**
  * @param int $hydrationMode
  * @throws QueryException
  * @return \ArrayIterator
  */
 public function getIterator($hydrationMode = ORM\AbstractQuery::HYDRATE_OBJECT)
 {
     if ($this->iterator !== NULL) {
         return $this->iterator;
     }
     $this->query->setHydrationMode($hydrationMode);
     try {
         $this->frozen = TRUE;
         if ($this->fetchJoinCollection && ($this->query->getMaxResults() > 0 || $this->query->getFirstResult() > 0)) {
             $this->iterator = $this->createPaginatedQuery($this->query)->getIterator();
         } else {
             $this->iterator = new \ArrayIterator($this->query->getResult(NULL));
         }
         if ($this->queryObject !== NULL && $this->repository !== NULL) {
             $this->queryObject->postFetch($this->repository, $this->iterator);
         }
         return $this->iterator;
     } catch (ORMException $e) {
         throw new QueryException($e, $this->query, $e->getMessage());
     }
 }
 /**
  * @return Query
  * @throws \LogicException If source of a query is not valid
  */
 protected function getQuery()
 {
     if (null === $this->query) {
         if ($this->source instanceof Query) {
             $this->query = $this->cloneQuery($this->source);
         } elseif ($this->source instanceof QueryBuilder) {
             $this->query = $this->source->getQuery();
         } else {
             throw new \LogicException('Unexpected source');
         }
         unset($this->source);
         // initialize cloned query
         $this->maxResults = $this->query->getMaxResults();
         if (!$this->maxResults || $this->requestedBufferSize < $this->maxResults) {
             $this->query->setMaxResults($this->requestedBufferSize);
         }
         if (null !== $this->requestedHydrationMode) {
             $this->query->setHydrationMode($this->requestedHydrationMode);
         }
         $this->firstResult = (int) $this->query->getFirstResult();
     }
     return $this->query;
 }
 /**
  * @param Query $query
  *
  * @return string
  */
 public function getQueryCacheKey(Query $query)
 {
     $hints = $query->getHints();
     ksort($hints);
     return md5($query->getDql() . var_export($query->getParameters(), true) . var_export($hints, true) . '&firstResult=' . $query->getFirstResult() . '&maxResult=' . $query->getMaxResults() . '&hydrationMode=' . $query->getHydrationMode());
 }