/** * {@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); }
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); }
/** * {@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); }
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; }
/** * 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); }
/** * @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; }
/** * @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()); }