/**
  * {@inheritdoc}
  */
 public function getSlice($offset, $length)
 {
     $query = clone $this->query;
     $query->setParameters($this->query->getParameters());
     $query->setFirstResult($offset)->setMaxResults($length);
     return $query->getQuery()->getResult();
 }
Example #2
0
 /**
  * @param int $offset
  * @return \Porpaginas\Page
  */
 public function take($offset, $limit)
 {
     if ($this->result !== null) {
         return new ArrayPage(array_slice($this->result, $offset, $limit), $offset, $limit, count($this->result));
     }
     $query = clone $this->query;
     $query->setParameters($this->query->getParameters());
     foreach ($this->query->getHints() as $name => $value) {
         $query->setHint($name, $value);
     }
     $query->setFirstResult($offset)->setMaxResults($limit);
     return new ORMQueryPage(new Paginator($query, $this->fetchCollection));
 }
 /**
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  * @SuppressWarnings(PHPMD.NPathComplexity)
  *
  * Copy of Doctrine\ORM\Query::processParameterMappings
  *
  * @param Query $query
  * @return array
  * @throws QueryException
  */
 public function processParameterMappings(Query $query)
 {
     $parser = new Parser($query);
     $parseResult = $parser->parse();
     $paramMappings = $parseResult->getParameterMappings();
     $resultSetMapping = $parseResult->getResultSetMapping();
     $paramCount = count($query->getParameters());
     $mappingCount = count($paramMappings);
     if ($paramCount > $mappingCount) {
         throw QueryException::tooManyParameters($mappingCount, $paramCount);
     } elseif ($paramCount < $mappingCount) {
         throw QueryException::tooFewParameters($mappingCount, $paramCount);
     }
     $sqlParams = [];
     $types = [];
     foreach ($query->getParameters() as $parameter) {
         $key = $parameter->getName();
         $value = $parameter->getValue();
         $rsm = $resultSetMapping;
         if (!isset($paramMappings[$key])) {
             throw QueryException::unknownParameter($key);
         }
         if (isset($rsm->metadataParameterMapping[$key]) && $value instanceof ClassMetadata) {
             $value = $value->getMetadataValue($rsm->metadataParameterMapping[$key]);
         }
         $value = $query->processParameterValue($value);
         $type = $parameter->getValue() === $value ? $parameter->getType() : Query\ParameterTypeInferer::inferType($value);
         foreach ($paramMappings[$key] as $position) {
             $types[$position] = $type;
         }
         $sqlPositions = $paramMappings[$key];
         // optimized multi value sql positions away for now,
         // they are not allowed in DQL anyways.
         $value = [$value];
         $countValue = count($value);
         for ($i = 0, $l = count($sqlPositions); $i < $l; $i++) {
             $sqlParams[$sqlPositions[$i]] = $value[$i % $countValue];
         }
     }
     if (count($sqlParams) !== count($types)) {
         throw QueryException::parameterTypeMismatch();
     }
     if ($sqlParams) {
         ksort($sqlParams);
         $sqlParams = array_values($sqlParams);
         ksort($types);
         $types = array_values($types);
     }
     return [$sqlParams, $types];
 }
 /**
  * @param Query                              $query
  * @param array                              $paramMappings
  * @return array
  * @throws \Doctrine\ORM\Query\QueryException
  */
 protected function processParameterMappings(Query $query, $paramMappings)
 {
     $sqlParams = array();
     $types = array();
     /** @var Parameter $parameter */
     foreach ($query->getParameters() as $parameter) {
         $key = $parameter->getName();
         if (!isset($paramMappings[$key])) {
             throw QueryException::unknownParameter($key);
         }
         $value = $query->processParameterValue($parameter->getValue());
         $type = $parameter->getValue() === $value ? $parameter->getType() : Query\ParameterTypeInferer::inferType($value);
         foreach ($paramMappings[$key] as $position) {
             $types[$position] = $type;
         }
         $sqlPositions = $paramMappings[$key];
         $value = array($value);
         $countValue = count($value);
         for ($i = 0, $l = count($sqlPositions); $i < $l; $i++) {
             $sqlParams[$sqlPositions[$i]] = $value[$i % $countValue];
         }
     }
     if (count($sqlParams) != count($types)) {
         throw QueryException::parameterTypeMissmatch();
     }
     if ($sqlParams) {
         ksort($sqlParams);
         $sqlParams = array_values($sqlParams);
         ksort($types);
         $types = array_values($types);
     }
     return array($sqlParams, $types);
 }
Example #5
0
 /**
  * @param  Query $query
  * @return Query
  */
 protected static function cloneQuery(Query $query)
 {
     /* @var $countQuery Query */
     $countQuery = clone $query;
     $params = $query->getParameters();
     $countQuery->setParameters($params);
     return $countQuery;
 }
Example #6
0
 /**
  * @param Query $query
  * @return Query
  */
 protected static function cloneQuery(Query $query)
 {
     /* @var $countQuery Query */
     $countQuery = clone $query;
     $params = $query->getParameters();
     foreach ($params as $key => $param) {
         $countQuery->setParameter($key, $param);
     }
     return $countQuery;
 }
 /**
  * Clones a query.
  *
  * @param Query $query The query.
  *
  * @return Query The cloned query.
  */
 private function cloneQuery(Query $query)
 {
     /* @var $cloneQuery Query */
     $cloneQuery = clone $query;
     $cloneQuery->setParameters(clone $query->getParameters());
     foreach ($query->getHints() as $name => $value) {
         $cloneQuery->setHint($name, $value);
     }
     return $cloneQuery;
 }
 /**
  * Clone specified query with parameters.
  *
  * @param Query $query
  *
  * @return Query
  */
 protected function cloneQuery(Query $query)
 {
     $aclAppliedQuery = clone $query;
     $params = $query->getParameters();
     /* @var $param Parameter */
     foreach ($params as $param) {
         $aclAppliedQuery->setParameter($param->getName(), $param->getValue(), $param->getType());
     }
     return $aclAppliedQuery;
 }
Example #9
0
 /**
  * Clones the given $query and copies all used
  * parameters and hints
  *
  * @param Query $query
  * @return Query
  */
 public static function cloneQuery(Query $query)
 {
     $clonedQuery = clone $query;
     $clonedQuery->setParameters($query->getParameters());
     // attach hints
     foreach ($query->getHints() as $name => $hint) {
         $clonedQuery->setHint($name, $hint);
     }
     return $clonedQuery;
 }
 /**
  * @param \Doctrine\ORM\Query $query          The Doctrine Query
  * @param array               $fields         Fields to export
  * @param string              $dateTimeFormat
  */
 public function __construct(Query $query, array $fields, $dateTimeFormat = 'r')
 {
     $this->query = clone $query;
     $this->query->setParameters($query->getParameters());
     foreach ($query->getHints() as $name => $value) {
         $this->query->setHint($name, $value);
     }
     $this->propertyAccessor = PropertyAccess::createPropertyAccessor();
     $this->propertyPaths = array();
     foreach ($fields as $name => $field) {
         if (is_string($name) && is_string($field)) {
             $this->propertyPaths[$name] = new PropertyPath($field);
         } else {
             $this->propertyPaths[$field] = new PropertyPath($field);
         }
     }
     $this->dateTimeFormat = $dateTimeFormat;
 }
Example #11
0
 /**
  * @param Query $query
  * @param array $ids
  * @param string $namespace
  * @return Query
  */
 public static function createWhereInQuery(Query $query, array $ids, $namespace = 'pgid')
 {
     // don't do this for an empty id array
     if (count($ids) > 0) {
         $whereInQuery = clone $query;
         $whereInQuery->setParameters($query->getParameters());
         $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('DoctrineExtensions\\Paginate\\WhereInWalker'));
         $whereInQuery->setHint('id.count', count($ids));
         $whereInQuery->setHint('pg.ns', $namespace);
         $whereInQuery->setFirstResult(null)->setMaxResults(null);
         foreach ($ids as $i => $id) {
             $i = $i + 1;
             $whereInQuery->setParameter("{$namespace}_{$i}", $id);
         }
         return $whereInQuery;
     } else {
         return $query;
     }
 }
 /**
  * @param \Doctrine\ORM\Query $query          The Doctrine Query
  * @param array               $fields         Fields to export
  * @param string              $dateTimeFormat
  */
 public function __construct(Query $query, array $fields, $dateTimeFormat = 'r')
 {
     $this->query = clone $query;
     $this->query->setParameters($query->getParameters());
     foreach ($query->getHints() as $name => $value) {
         $this->query->setHint($name, $value);
     }
     // Note : will be deprecated in Symfony 3.0, conserved for 2.2 compatibility
     // Use createPropertyAccessor() for 3.0
     // @see Symfony\Component\PropertyAccess\PropertyAccess
     $this->propertyAccessor = PropertyAccess::getPropertyAccessor();
     $this->propertyPaths = array();
     foreach ($fields as $name => $field) {
         if (is_string($name) && is_string($field)) {
             $this->propertyPaths[$name] = new PropertyPath($field);
         } else {
             $this->propertyPaths[$field] = new PropertyPath($field);
         }
     }
     $this->dateTimeFormat = $dateTimeFormat;
 }
 /**
  * Clones a query.
  *
  * @param Query $query The query.
  *
  * @return Query The cloned query.
  */
 private function cloneQuery(Query $query)
 {
     /* @var $cloneQuery Query */
     $cloneQuery = clone $query;
     $cloneQuery->setParameters($query->getParameters());
     return $cloneQuery;
 }
 protected function getHash(Query $query) : string
 {
     $sql = $query->getSQL();
     $params = $query->getParameters();
     return sha1($sql . serialize($params));
 }
 /**
  * Makes full clone of the given query, including its parameters and hints
  *
  * @param Query $query
  * @return Query
  */
 protected function cloneQuery(Query $query)
 {
     $result = clone $query;
     // clone parameters
     $result->setParameters(clone $query->getParameters());
     // clone hints
     foreach ($query->getHints() as $name => $value) {
         $result->setHint($name, $value);
     }
     return $result;
 }
 /**
  * return query in cache
  *
  * @param Query   $query
  * @param integer $time
  * @param string  $MODE	    [MODE_GET, MODE_PUT , MODE_NORMAL , MODE_REFRESH]	
  * @param boolean $setCacheable
  * @param string  $namespace
  * @param string  $input_hash
  * 
  * @return Query
  * @access public
  * @author Etienne de Longeaux <*****@*****.**>
  */
 public function cacheQuery(Query $query, $time = 3600, $MODE = 3, $setCacheable = true, $namespace = '', $input_hash = '')
 {
     if (!$query) {
         throw new \Gedmo\Exception\InvalidArgumentException('Invalide query instance');
     }
     // create single file from all input
     if (empty($input_hash)) {
         $input_hash = $namespace . sha1(serialize($query->getParameters()) . $query->getSQL());
     }
     $query->useResultCache(true, $time, (string) $input_hash);
     $query->useQueryCache(true);
     if (method_exists($query, 'setCacheMode')) {
         $query->setCacheMode($MODE);
     }
     if (method_exists($query, 'setCacheable')) {
         $query->setCacheable($setCacheable);
     }
     return $query;
 }
Example #17
0
 /**
  * Helper function returns total count of the passed query builder
  *
  * @param \Doctrine\ORM\Query $dataQuery
  * @return int|null
  */
 private function getStatisticListTotalCount(\Doctrine\ORM\Query $dataQuery)
 {
     //userCurrencyFactor has not to be part of the count parameters
     $originalParameters = $dataQuery->getParameters();
     $countParameters = new \Doctrine\Common\Collections\ArrayCollection();
     /** @var \Doctrine\ORM\Query\Parameter $parameter */
     foreach ($originalParameters as $parameter) {
         if ($parameter->getName() === 'userCurrencyFactor') {
             continue;
         }
         $countParameters->add($parameter);
     }
     $dataQuery->setParameters($countParameters);
     $totalCount = Shopware()->Models()->getQueryCount($dataQuery);
     $dataQuery->setParameters($originalParameters);
     return $totalCount;
 }
 /**
  * @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());
 }
Example #19
0
 /**
  * Clones a Query object.
  *
  * @param \Doctrine\ORM\Query $query The query to clone.
  *
  * @return \Doctrine\ORM\Query The cloned query.
  */
 private function cloneQuery(Query $query)
 {
     $queryClone = clone $query;
     $queryClone->setParameters($query->getParameters());
     foreach ($query->getHints() as $key => $value) {
         $queryClone->setHint($key, $value);
     }
     return $queryClone;
 }
Example #20
0
 /**
  * Clones $query. Also clones parameters for Doctrine\ORM\Query case.
  *
  * @param Query|QueryBuilder $query
  *
  * @return Query|QueryBuilder
  */
 protected function cloneQuery($query)
 {
     $cloned = clone $query;
     if ($query instanceof Query) {
         $cloned->setParameters(clone $query->getParameters());
     }
     return $cloned;
 }
 /**
  * Clone Query
  *
  * @param Query $query Query
  *
  * @return Query
  */
 protected function cloneQuery(Query $query)
 {
     $aclAppliedQuery = clone $query;
     $aclAppliedQuery->setParameters($query->getParameters());
     return $aclAppliedQuery;
 }