• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/entity_query.php
  • Класс: CEntityQuery
  • Вызов: CEntityQuery::buildQuery
protected function buildQuery($returnBuildParts = false)
{
	if ($this->query_build_parts === null)
	{
		foreach ($this->select as $key => $value)
		{
			$this->addToSelectChain($value, is_numeric($key) ? '' : $key);
		}

		$this->setFilterChains($this->filter);
		$this->divideFilter($this->filter);

		foreach ($this->group as $value)
		{
			$this->addToGroupChain($value);
		}

		foreach ($this->order as $key => $value)
		{
			$this->addToOrderChain($key);
		}

		$this->buildJoinMap();

		// ------------------

		$sqlSelect = $this->buildSelect();
		$sqlJoin = $this->buildJoin();
		$sqlWhere = $this->buildWhere();
		$sqlGroup = $this->buildGroup();
		$sqlHaving = $this->buildHaving();
		$sqlOrder = $this->buildOrder();

		$sqlFrom = $this->init_entity->GetDBTableName();
		$sqlFrom .= ' '.$this->DB->escL . CBaseEntity::camel2snake($this->init_entity->getName()) . $this->table_alias_postfix . $this->DB->escR;
		$sqlFrom .= ' '.$sqlJoin;

		$this->query_build_parts = array_filter(array(
			'SELECT' => $sqlSelect, 'FROM' => $sqlFrom,
			'WHERE' => $sqlWhere, 'GROUP BY' => $sqlGroup,
			'HAVING' => $sqlHaving, 'ORDER BY' => $sqlOrder
		));
	}

	if ($returnBuildParts)
	{
		return $this->query_build_parts;
	}

	$build_parts = $this->query_build_parts;

	foreach ($build_parts as $k => &$v)
	{
		if (strlen($v))
		{
			$v = $k . ' ' . $v;
		}
	}

	$query = join("n", $build_parts);

	list($query, ) = $this->replaceSelectAliases($query);

	if (!empty($this->options))
	{
		foreach ($this->options as $opt => $value)
		{
			$query = str_replace('%'.$opt.'%', $value, $query);
		}
	}

	if (empty($this->limit))
	{
		return $query;
	}
	elseif (array_key_exists('nPageTop', $this->limit))
	{
		$query = $this->DB->TopSql($query, intval($this->limit['nPageTop']));
		return $query;
	}
	else
	{
		// can't get "paginated" query through DB, return base query
		// yes, it is BUG
		return $query;
	}
}