- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/entity_query.php
- Класс: CEntityQuery
- Вызов: CEntityQuery::query
protected function query($build_parts)
{
foreach ($build_parts as $k => &$v)
{
if (strlen($v))
{
$v = $k . ' ' . $v;
}
}
$query = join("n", $build_parts);
list($query, $replaced_aliases) = $this->replaceSelectAliases($query);
if (!empty($this->options))
{
foreach ($this->options as $opt => $value)
{
$query = str_replace('%'.$opt.'%', $value, $query);
}
}
if (empty($this->limit))
{
$result = $this->DB->query($query);
$result->arReplacedAliases = $replaced_aliases;
}
elseif (array_key_exists('nPageTop', $this->limit))
{
$query = $this->DB->TopSql($query, intval($this->limit['nPageTop']));
$result = $this->DB->query($query);
$result->arReplacedAliases = $replaced_aliases;
}
else
{
// count rows
$cnt_body_elements = $build_parts;
// rewrite select
if (empty($sqlGroup))
{
$cnt_body_elements['SELECT'] = "SELECT COUNT('x') AS ".$this->DB->escL.'TMP_ROWS_CNT'.$this->DB->escR;
}
else
{
$cnt_body_elements['SELECT'] = "SELECT 'x'";
}
// clear order
unset($cnt_body_elements['ORDER BY']);
$cnt_query = join("n", $cnt_body_elements);
$result = $this->DB->query($cnt_query);
if (empty($sqlGroup))
{
$result = $result->Fetch();
$cnt = $result["TMP_ROWS_CNT"];
}
else
{
$cnt = $result->SelectedRowsCount();
}
// main query
$result = new CDBResult();
$result->arReplacedAliases = $replaced_aliases;
$result->NavQuery($query, $cnt, $this->limit);
}
$this->last_query = $query;
return $result;
}