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