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