94 $context = \Bitrix\Main\Context::getCurrent();
96 $sqlHelper = $this->connection->getSqlHelper();
100 if (!is_array($arSelect))
104 if (
count($arSelect) < 1)
109 if (!is_array($arOrder))
115 foreach ($arOrder as $strColumn => $strDirection)
117 $strDirection = mb_strtoupper($strDirection) ===
'ASC' ?
'ASC' :
'DESC';
118 if (array_key_exists($strColumn,
$arFields))
120 $arSelect[] = $strColumn;
123 $arQueryOrder[$strColumn] = $sqlHelper->quote(
'TMP_' . $strColumn) .
' ' . $strDirection;
127 $arQueryOrder[$strColumn] = $sqlHelper->quote($strColumn) .
' ' . $strDirection;
133 foreach ($arSelect as $strColumn)
135 if (array_key_exists($strColumn,
$arFields))
139 $arQuerySelect[
'TMP_' . $strColumn] =
't.' . $sqlHelper->quote($strColumn) .
' TMP_' . $strColumn;
140 $arQuerySelect[$strColumn] = $sqlHelper->formatDate(
$culture->getFormatDate(),
't.' . $sqlHelper->quote($strColumn)) .
' ' . $sqlHelper->quote($strColumn);
141 $arQuerySelect[
'FULL_' . $strColumn] = $sqlHelper->formatDate(
$culture->getFormatDatetime(),
't.' . $sqlHelper->quote($strColumn)) .
' FULL_' . $strColumn;
142 $arQuerySelect[
'SHORT_' . $strColumn] = $sqlHelper->formatDate(
$culture->getFormatDate(),
't.' . $sqlHelper->quote($strColumn)) .
' SHORT_' . $strColumn;
146 $arQuerySelect[$strColumn] =
't.' . $sqlHelper->quote($strColumn);
151 foreach (
$arFields as $FIELD_NAME => $FIELD_TYPE)
154 'TABLE_ALIAS' =>
't',
155 'FIELD_NAME' =>
't.' . $sqlHelper->quote($FIELD_NAME),
156 'FIELD_TYPE' => $FIELD_TYPE,
164 if (
count($arQuerySelect) < 1)
166 $arQuerySelect = [
'*' =>
't.*'];
169 $strSelect =
'SELECT ' . implode(
', ', $arQuerySelect) .
"\n";
171 $strSql =
'FROM ' . $sqlHelper->quote($this->TABLE_NAME) .
" t\n";
172 $strQueryWhere = $obQueryWhere->GetQuery(
$arFilter);
175 $strSql .=
'WHERE ' . $strQueryWhere .
"\n";
177 $strOrder = $arQueryOrder ?
'ORDER BY ' . implode(
', ', $arQueryOrder) :
'';
179 if (!is_array($arNavParams))
181 $dbr = $this->connection->query($strSelect . $strSql . $strOrder);
183 elseif (isset($arNavParams[
'bOnlyCount']) && $arNavParams[
'bOnlyCount'] ===
true)
185 $res_cnt = $this->connection->query(
"SELECT count('x') CNT " . $strSql);
186 $ar_cnt = $res_cnt->fetch();
188 return $ar_cnt[
'CNT'];
190 elseif ($arNavParams[
'nTopCount'] > 0)
192 $strSql = $sqlHelper->getTopSql($strSelect . $strSql . $strOrder, $arNavParams[
'nTopCount'], $arNavParams[
'nOffset']);
193 $dbr = $this->connection->query($strSql);
197 $dbr = $this->connection->query($strSelect . $strSql . $strOrder);
200 $dbr->is_filtered = ($strQueryWhere !==
'');