5 public static function GetList($arOrder,
$arFilter, $bGroup, $arNavStartParams, $arSelect)
9 if (!is_array($arSelect))
13 if (
count($arSelect) < 1)
20 if (!is_array($arOrder))
24 if (
count($arOrder) < 1)
33 foreach ($arOrder as $strColumn => $strDirection)
35 $strColumn = mb_strtoupper($strColumn);
36 if (preg_match(
'/^(MIN|MAX|AVG|SUM)_(.*)$/', $strColumn, $arMatch))
38 $strGroupFunc = $arMatch[1];
39 $strColumn = $arMatch[2];
46 $strDirection = mb_strtoupper($strDirection) ===
'ASC' ?
'ASC' :
'DESC';
53 case 'COMPONENT_NAME':
54 if ($strGroupFunc ===
'')
56 $arSelect[] = $strColumn;
57 $arQueryOrder[$strColumn] = $strColumn .
' ' . $strDirection;
64 case 'COMPONENT_TIME':
67 if ($strGroupFunc ===
'')
71 $arSelect[] = $strColumn;
72 $arQueryOrder[$strColumn] = $strColumn .
' ' . $strDirection;
79 $arSelect[] = $strColumn;
80 $arQueryOrder[$strGroupFunc .
'_' . $strColumn] = $strGroupFunc .
'_' . $strColumn .
' ' . $strDirection;
87 $arSelect[] = $strColumn;
88 $arQueryOrder[$strColumn] = $strColumn .
' ' . $strDirection;
96 foreach ($arSelect as $strColumn)
98 $strColumn = mb_strtoupper($strColumn);
99 if (preg_match(
'/^(MIN|MAX|AVG|SUM)_(.*)$/', $strColumn, $arMatch))
101 $strGroupFunc = $arMatch[1];
102 $strColumn = $arMatch[2];
115 case 'COMPONENT_NAME':
116 if ($strGroupFunc ===
'')
120 $arQueryGroup[$strColumn] =
'c.' . $strColumn;
122 $arQuerySelect[$strColumn] =
'c.' . $strColumn;
126 case 'CACHE_COUNT_R':
127 case 'CACHE_COUNT_W':
128 case 'CACHE_COUNT_C':
129 case 'COMPONENT_TIME':
132 if ($strGroupFunc ===
'')
136 $arQuerySelect[$strColumn] =
'c.' . $strColumn;
143 $arQuerySelect[$strGroupFunc .
'_' . $strColumn] = $strGroupFunc .
'(c.' . $strColumn .
') ' . $strGroupFunc .
'_' . $strColumn;
148 if ($strGroupFunc ===
'')
152 $arQuerySelect[$strColumn] =
'(c.CACHE_COUNT_R + c.CACHE_COUNT_W + c.CACHE_COUNT_C) CACHE_COUNT';
159 $arQuerySelect[$strGroupFunc .
'_' . $strColumn] = $strGroupFunc .
'(c.CACHE_COUNT_R + c.CACHE_COUNT_W + c.CACHE_COUNT_C) ' . $strGroupFunc .
'_' . $strColumn;
164 if ($strGroupFunc ===
'' && $bGroup)
166 $arQuerySelect[$strColumn] =
'COUNT(c.ID) ' . $strColumn;
173 static $arWhereFields = [
175 'TABLE_ALIAS' =>
'c',
176 'FIELD_NAME' =>
'c.HIT_ID',
177 'FIELD_TYPE' =>
'int',
181 'COMPONENT_NAME' => [
182 'TABLE_ALIAS' =>
'c',
183 'FIELD_NAME' =>
'c.COMPONENT_NAME',
184 'FIELD_TYPE' =>
'string',
188 'TABLE_ALIAS' =>
'c',
189 'FIELD_NAME' =>
'c.ID',
190 'FIELD_TYPE' =>
'int',
194 'TABLE_ALIAS' =>
'c',
195 'FIELD_NAME' =>
'c.CACHE_TYPE',
196 'FIELD_TYPE' =>
'string',
200 'TABLE_ALIAS' =>
'c',
201 'FIELD_NAME' =>
'c.CACHE_SIZE',
202 'FIELD_TYPE' =>
'int',
206 'TABLE_ALIAS' =>
'c',
207 'FIELD_NAME' =>
'c.QUERIES',
208 'FIELD_TYPE' =>
'int',
211 'HIT_SCRIPT_NAME' => [
212 'TABLE_ALIAS' =>
'h',
213 'FIELD_NAME' =>
'h.SCRIPT_NAME',
214 'FIELD_TYPE' =>
'string',
215 'JOIN' =>
'INNER JOIN b_perf_hit h on h.ID = c.HIT_ID',
218 'TABLE_ALIAS' =>
'h',
219 'FIELD_NAME' =>
'h.IS_ADMIN',
220 'FIELD_TYPE' =>
'string',
221 'JOIN' =>
'INNER JOIN b_perf_hit h on h.ID = c.HIT_ID',
223 'HIT_CACHE_TYPE' => [
224 'TABLE_ALIAS' =>
'h',
225 'FIELD_NAME' =>
'h.CACHE_TYPE',
226 'FIELD_TYPE' =>
'string',
227 'JOIN' =>
'INNER JOIN b_perf_hit h on h.ID = c.HIT_ID',
229 'HIT_MENU_RECALC' => [
230 'TABLE_ALIAS' =>
'h',
231 'FIELD_NAME' =>
'h.MENU_RECALC',
232 'FIELD_TYPE' =>
'int',
233 'JOIN' =>
'INNER JOIN b_perf_hit h on h.ID = c.HIT_ID',
236 $obQueryWhere->
SetFields($arWhereFields);
238 if (
count($arQuerySelect) < 1)
240 $arQuerySelect = [
'ID' =>
'c.ID'];
243 $strQueryWhere = $obQueryWhere->GetQuery(
$arFilter);
247 &&
count($arQueryGroup) > 0
251 $strHaving =
'HAVING COUNT(*) > ' . intval(
$arFilter[
'COUNT']);
254 if (is_array($arNavStartParams) && isset($arNavStartParams[
'nTopCount']) && $arNavStartParams[
'nTopCount'] > 0)
256 $strSql =
$DB->TopSQL(
'
257 SELECT ' . implode(
', ', $arQuerySelect) .
'
258 FROM b_perf_component c
259 ' . $obQueryWhere->GetJoins() .
'
260 ' . ($strQueryWhere ?
'WHERE ' . $strQueryWhere :
'') .
'
261 ' . ($bGroup ?
'GROUP BY ' . implode(
', ', $arQueryGroup) :
'') .
'
263 ' . (
count($arQueryOrder) ?
'ORDER BY ' . implode(
', ', $arQueryOrder) :
'') .
'
264 ', $arNavStartParams[
'nTopCount']);
267 elseif (is_array($arNavStartParams))
270 SELECT count('x') CNT
272 SELECT 1 FROM b_perf_component c
273 " . $obQueryWhere->GetJoins() .
'
274 ' . ($strQueryWhere ?
'WHERE ' . $strQueryWhere :
'') .
'
275 ' . ($bGroup ?
'GROUP BY ' . implode(
', ', $arQueryGroup) :
'') .
'
279 $res_cnt =
$DB->Query($strSql);
280 $ar_cnt = $res_cnt->Fetch();
283 SELECT ' . implode(
', ', $arQuerySelect) .
'
284 FROM b_perf_component c
285 ' . $obQueryWhere->GetJoins() .
'
286 ' . ($strQueryWhere ?
'WHERE ' . $strQueryWhere :
'') .
'
287 ' . ($bGroup ?
'GROUP BY ' . implode(
', ', $arQueryGroup) :
'') .
'
289 ' . (
count($arQueryOrder) ?
'ORDER BY ' . implode(
', ', $arQueryOrder) :
'') .
'
291 $res =
new CDBResult();
292 $res->NavQuery($strSql, $ar_cnt[
'CNT'], $arNavStartParams);
297 SELECT ' . implode(
', ', $arQuerySelect) .
'
298 FROM b_perf_component c
299 ' . $obQueryWhere->GetJoins() .
'
300 ' . ($strQueryWhere ?
'WHERE ' . $strQueryWhere :
'') .
'
301 ' . ($bGroup ?
'GROUP BY ' . implode(
', ', $arQueryGroup) :
'') .
'
303 ' . (
count($arQueryOrder) ?
'ORDER BY ' . implode(
', ', $arQueryOrder) :
'') .
'