Пример #1
0
 /**
  * Calculates total count of query records
  * Notes: this method do not make any modifications of the given query
  *
  * @param Query|SqlQuery $query
  *
  * @return integer
  */
 public function getCount($query)
 {
     if ($this->useWalker($query)) {
         if (!$query->contains('DISTINCT')) {
             $query->setHint(CountWalker::HINT_DISTINCT, false);
         }
         $paginator = new Paginator($query);
         $paginator->setUseOutputWalkers(false);
         $result = $paginator->count();
     } else {
         if ($query instanceof Query) {
             $parserResult = QueryUtils::parseQuery($query);
             $parameterMappings = $parserResult->getParameterMappings();
             list($params, $types) = QueryUtils::processParameterMappings($query, $parameterMappings);
             $statement = $query->getEntityManager()->getConnection()->executeQuery('SELECT COUNT(*) FROM (' . $query->getSQL() . ') AS e', $params, $types);
         } elseif ($query instanceof SqlQuery) {
             $countQuery = clone $query->getQueryBuilder();
             $statement = $countQuery->resetQueryParts()->select('COUNT(*)')->from('(' . $query->getSQL() . ')', 'e')->execute();
         } else {
             throw new \InvalidArgumentException(sprintf('Expected instance of Doctrine\\ORM\\Query or Oro\\Bundle\\EntityBundle\\ORM\\SqlQuery, "%s" given', is_object($query) ? get_class($query) : gettype($query)));
         }
         $result = $statement->fetchColumn();
     }
     return $result ? (int) $result : 0;
 }
Пример #2
0
 /**
  * @param Query $query
  *
  * @return string
  *
  * @throws QueryException
  */
 public static function getExecutableSql(Query $query)
 {
     $parserResult = static::parseQuery($query);
     $sql = $parserResult->getSqlExecutor()->getSqlStatements();
     list($params, $types) = QueryUtils::processParameterMappings($query, $parserResult->getParameterMappings());
     list($sql, $params, $types) = SQLParserUtils::expandListParameters($sql, $params, $types);
     $paramPos = SQLParserUtils::getPlaceholderPositions($sql);
     for ($i = count($paramPos) - 1; $i >= 0; $i--) {
         $sql = substr_replace($sql, $query->getEntityManager()->getConnection()->quote($params[$i], $types[$i]), $paramPos[$i], 1);
     }
     return $sql;
 }
Пример #3
0
 /**
  * Calculates total count of query records
  * Notes: this method do not make any modifications of the given query
  *
  * @param Query|SqlQuery $query
  *
  * @return integer
  */
 public function getCount($query)
 {
     if ($this->useWalker($query)) {
         if (!$query->contains('DISTINCT')) {
             $query->setHint(CountWalker::HINT_DISTINCT, false);
         }
         // fix of doctrine count walker bug
         // TODO revert changes when doctrine version >= 2.5 in scope of BAP-5577
         /* @var $countQuery Query */
         $countQuery = clone $query;
         $countQuery->setParameters(clone $query->getParameters());
         foreach ($query->getHints() as $name => $value) {
             $countQuery->setHint($name, $value);
         }
         if (!$countQuery->hasHint(CountWalker::HINT_DISTINCT)) {
             $countQuery->setHint(CountWalker::HINT_DISTINCT, true);
         }
         $this->appendTreeWalker($countQuery, 'Oro\\Bundle\\BatchBundle\\ORM\\Query\\Walker\\CountWalker');
         $countQuery->setFirstResult(null)->setMaxResults(null);
         try {
             $data = $countQuery->getScalarResult();
             $data = array_map('current', $data);
             $result = array_sum($data);
         } catch (NoResultException $e) {
             $result = 0;
         }
     } else {
         if ($query instanceof Query) {
             $parserResult = QueryUtils::parseQuery($query);
             $parameterMappings = $parserResult->getParameterMappings();
             list($params, $types) = QueryUtils::processParameterMappings($query, $parameterMappings);
             $statement = $query->getEntityManager()->getConnection()->executeQuery('SELECT COUNT(*) FROM (' . $query->getSQL() . ') AS e', $params, $types);
         } elseif ($query instanceof SqlQuery) {
             $countQuery = clone $query->getQueryBuilder();
             $statement = $countQuery->resetQueryParts()->select('COUNT(*)')->from('(' . $query->getSQL() . ')', 'e')->execute();
         } else {
             throw new \InvalidArgumentException(sprintf('Expected instance of Doctrine\\ORM\\Query or Oro\\Bundle\\EntityBundle\\ORM\\SqlQuery, "%s" given', is_object($query) ? get_class($query) : gettype($query)));
         }
         $result = $statement->fetchColumn();
     }
     return $result ? (int) $result : 0;
 }
Пример #4
0
 /**
  * @param string  $entityClass
  * @param integer $entityId
  * @param array   $filter
  *
  * @return ActivityList[]
  */
 public function getListCount($entityClass, $entityId, $filter)
 {
     $qb = $this->getBaseQB($entityClass, $entityId);
     $this->activityListFilterHelper->addFiltersToQuery($qb, $filter);
     $this->activityListAclHelper->applyAclCriteria($qb, $this->chainProvider->getProviders());
     $qb->resetDQLPart('orderBy');
     $query = $qb->getQuery();
     $parserResult = QueryUtils::parseQuery($query);
     $parameterMappings = $parserResult->getParameterMappings();
     list($params, $types) = QueryUtils::processParameterMappings($query, $parameterMappings);
     $statement = $query->getEntityManager()->getConnection()->executeQuery('SELECT COUNT(*) FROM (' . $query->getSQL() . ') AS e', $params, $types);
     $result = $statement->fetchColumn();
     return $result;
 }
Пример #5
0
 /**
  * @param string  $entityClass
  * @param integer $entityId
  * @param array   $filter
  *
  * @return ActivityList[]
  */
 public function getListCount($entityClass, $entityId, $filter)
 {
     $qb = $this->prepareQB($entityClass, $entityId, $filter);
     $qb->resetDQLPart('orderBy');
     $query = $qb->getQuery();
     $parserResult = QueryUtils::parseQuery($query);
     $parameterMappings = $parserResult->getParameterMappings();
     list($params, $types) = QueryUtils::processParameterMappings($query, $parameterMappings);
     $statement = $query->getEntityManager()->getConnection()->executeQuery('SELECT COUNT(*) FROM (' . $query->getSQL() . ') AS e', $params, $types);
     $result = $statement->fetchColumn();
     return $result;
 }