• Модуль: 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;
}