1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
hit.php
См. документацию.
1<?php
2
4{
5 public static function GetList($arOrder, $arFilter, $bGroup, $arNavStartParams, $arSelect)
6 {
7 global $DB;
8
9 if (!is_array($arSelect))
10 {
11 $arSelect = [];
12 }
13 if (count($arSelect) < 1)
14 {
15 $arSelect = [
16 'ID',
17 ];
18 }
19
20 if (!is_array($arOrder))
21 {
22 $arOrder = [];
23 }
24 if (count($arOrder) < 1)
25 {
26 $arOrder = [
27 'ID' => 'DESC',
28 ];
29 }
30
31 $arQueryOrder = [];
32 foreach ($arOrder as $strColumn => $strDirection)
33 {
34 $strColumn = mb_strtoupper($strColumn);
35 if (preg_match('/^(MIN|MAX|AVG|SUM)_(.*)$/', $strColumn, $arMatch))
36 {
37 $strGroupFunc = $arMatch[1];
38 $strColumn = $arMatch[2];
39 }
40 else
41 {
42 $strGroupFunc = '';
43 }
44
45 $strDirection = mb_strtoupper($strDirection) === 'ASC' ? 'ASC' : 'DESC';
46 switch ($strColumn)
47 {
48 case 'ID':
49 case 'IS_ADMIN':
50 case 'REQUEST_METHOD':
51 case 'SERVER_NAME':
52 case 'SERVER_PORT':
53 case 'SCRIPT_NAME':
54 case 'REQUEST_URI':
55 if ($strGroupFunc === '')
56 {
57 $arSelect[] = $strColumn;
58 $arQueryOrder[$strColumn] = $strColumn . ' ' . $strDirection;
59 }
60 break;
61 case 'INCLUDED_FILES':
62 case 'MEMORY_PEAK_USAGE':
63 case 'CACHE_SIZE':
64 case 'CACHE_COUNT':
65 case 'CACHE_COUNT_R':
66 case 'CACHE_COUNT_W':
67 case 'CACHE_COUNT_C':
68 case 'QUERIES':
69 case 'QUERIES_TIME':
70 case 'PAGE_TIME':
71 case 'PROLOG_TIME':
72 case 'PROLOG_BEFORE_TIME':
73 case 'AGENTS_TIME':
74 case 'PROLOG_AFTER_TIME':
75 case 'WORK_AREA_TIME':
76 case 'EPILOG_TIME':
77 case 'EPILOG_BEFORE_TIME':
78 case 'EVENTS_TIME':
79 case 'EPILOG_AFTER_TIME':
80 case 'COMPONENTS':
81 case 'COMPONENTS_TIME':
82 if ($strGroupFunc === '')
83 {
84 if (!$bGroup)
85 {
86 $arSelect[] = $strColumn;
87 $arQueryOrder[$strColumn] = $strColumn . ' ' . $strDirection;
88 }
89 }
90 else
91 {
92 if ($bGroup)
93 {
94 $arSelect[] = $strGroupFunc . '_' . $strColumn;
95 $arQueryOrder[$strGroupFunc . '_' . $strColumn] = $strGroupFunc . '_' . $strColumn . ' ' . $strDirection;
96 }
97 }
98 break;
99 case 'DATE_HIT':
100 if ($strGroupFunc === '' && !$bGroup)
101 {
102 $arSelect[] = $strColumn;
103 $arQueryOrder[$strColumn] = 'TMP_DH ' . $strDirection;
104 }
105 break;
106 case 'COUNT':
107 if ($strGroupFunc === '' && $bGroup)
108 {
109 $arSelect[] = $strColumn;
110 $arQueryOrder[$strColumn] = $strColumn . ' ' . $strDirection;
111 }
112 break;
113 }
114 }
115
116 $arQueryGroup = [];
117 $arQuerySelect = [];
118 foreach ($arSelect as $strColumn)
119 {
120 $strColumn = mb_strtoupper($strColumn);
121 if (preg_match('/^(MIN|MAX|AVG|SUM)_(.*)$/', $strColumn, $arMatch))
122 {
123 $strGroupFunc = $arMatch[1];
124 $strColumn = $arMatch[2];
125 }
126 else
127 {
128 $strGroupFunc = '';
129 }
130
131 switch ($strColumn)
132 {
133 case 'ID':
134 case 'IS_ADMIN':
135 case 'REQUEST_METHOD':
136 case 'SERVER_NAME':
137 case 'SERVER_PORT':
138 case 'SCRIPT_NAME':
139 case 'REQUEST_URI':
140 case 'SQL_LOG':
141 if ($strGroupFunc === '')
142 {
143 if ($bGroup)
144 {
145 $arQueryGroup[$strColumn] = 'h.' . $strColumn;
146 }
147 $arQuerySelect[$strColumn] = 'h.' . $strColumn;
148 }
149 break;
150 case 'INCLUDED_FILES':
151 case 'MEMORY_PEAK_USAGE':
152 case 'CACHE_SIZE':
153 case 'CACHE_COUNT_R':
154 case 'CACHE_COUNT_W':
155 case 'CACHE_COUNT_C':
156 case 'QUERIES':
157 case 'QUERIES_TIME':
158 case 'PAGE_TIME':
159 case 'PROLOG_TIME':
160 case 'PROLOG_BEFORE_TIME':
161 case 'AGENTS_TIME':
162 case 'PROLOG_AFTER_TIME':
163 case 'WORK_AREA_TIME':
164 case 'EPILOG_TIME':
165 case 'EPILOG_BEFORE_TIME':
166 case 'EVENTS_TIME':
167 case 'EPILOG_AFTER_TIME':
168 case 'COMPONENTS':
169 case 'COMPONENTS_TIME':
170 if ($strGroupFunc === '')
171 {
172 if (!$bGroup)
173 {
174 $arQuerySelect[$strColumn] = 'h.' . $strColumn;
175 }
176 }
177 else
178 {
179 if ($bGroup)
180 {
181 $arQuerySelect[$strGroupFunc . '_' . $strColumn] = $strGroupFunc . '(h.' . $strColumn . ') ' . $strGroupFunc . '_' . $strColumn;
182 }
183 }
184 break;
185 case 'CACHE_COUNT':
186 if ($strGroupFunc === '')
187 {
188 if (!$bGroup)
189 {
190 $arQuerySelect[$strColumn] = '(h.CACHE_COUNT_R + h.CACHE_COUNT_W + h.CACHE_COUNT_C) CACHE_COUNT';
191 }
192 }
193 else
194 {
195 if ($bGroup)
196 {
197 $arQuerySelect[$strGroupFunc . '_' . $strColumn] = $strGroupFunc . '(h.CACHE_COUNT_R + h.CACHE_COUNT_W + h.CACHE_COUNT_C) ' . $strGroupFunc . '_' . $strColumn;
198 }
199 }
200 break;
201 case 'DATE_HIT':
202 if ($strGroupFunc === '' && !$bGroup)
203 {
204 $arQuerySelect['TMP_DH'] = 'h.' . $strColumn . ' TMP_DH';
205 $arQuerySelect[$strColumn] = $DB->DateToCharFunction('h.' . $strColumn, 'SHORT') . ' ' . $strColumn;
206 $arQuerySelect['FULL_' . $strColumn] = $DB->DateToCharFunction('h.' . $strColumn, 'FULL') . ' FULL_' . $strColumn;
207 }
208 break;
209 case 'COUNT':
210 if ($strGroupFunc === '' && $bGroup)
211 {
212 $arQuerySelect[$strColumn] = 'COUNT(h.ID) ' . $strColumn;
213 }
214 break;
215 }
216 }
217
218 static $arWhereFields = [
219 'SCRIPT_NAME' => [
220 'TABLE_ALIAS' => 'h',
221 'FIELD_NAME' => 'h.SCRIPT_NAME',
222 'FIELD_TYPE' => 'string', //int, double, file, enum, int, string, date, datetime
223 'JOIN' => false,
224 //"LEFT_JOIN" => "lt",
225 ],
226 'IS_ADMIN' => [
227 'TABLE_ALIAS' => 'h',
228 'FIELD_NAME' => 'h.IS_ADMIN',
229 'FIELD_TYPE' => 'string',
230 'JOIN' => false,
231 ],
232 'REQUEST_METHOD' => [
233 'TABLE_ALIAS' => 'h',
234 'FIELD_NAME' => 'h.REQUEST_METHOD',
235 'FIELD_TYPE' => 'string',
236 'JOIN' => false,
237 ],
238 'ID' => [
239 'TABLE_ALIAS' => 'h',
240 'FIELD_NAME' => 'ID',
241 'FIELD_TYPE' => 'int',
242 'JOIN' => false,
243 ],
244 'CACHE_TYPE' => [
245 'TABLE_ALIAS' => 'h',
246 'FIELD_NAME' => 'h.CACHE_TYPE',
247 'FIELD_TYPE' => 'string',
248 'JOIN' => false,
249 ],
250 'MENU_RECALC' => [
251 'TABLE_ALIAS' => 'h',
252 'FIELD_NAME' => 'h.MENU_RECALC',
253 'FIELD_TYPE' => 'int',
254 'JOIN' => false,
255 ],
256 ];
257
258 $obQueryWhere = new CSQLWhere;
259 $obQueryWhere->SetFields($arWhereFields);
260
261 if (count($arQuerySelect) < 1)
262 {
263 $arQuerySelect = ['ID' => 'h.ID'];
264 }
265
266 $strQueryWhere = $obQueryWhere->GetQuery($arFilter);
267 $strHaving = '';
268 if ($bGroup && count($arQueryGroup) > 0)
269 {
270 $obQueryHaving = new CSQLWhere;
271 $obQueryHaving->SetFields([
272 'COUNT' => [
273 'TABLE_ALIAS' => '',
274 'FIELD_NAME' => 'COUNT(h.ID)',
275 'FIELD_TYPE' => 'int',
276 'JOIN' => false,
277 ],
278 ]);
279 $strHaving = $obQueryHaving->GetQuery($arFilter);
280 if ($strHaving)
281 {
282 $strHaving = 'HAVING ' . $strHaving . ' ';
283 }
284 }
285
286 if (is_array($arNavStartParams) && isset($arNavStartParams['nTopCount']) && $arNavStartParams['nTopCount'] > 0)
287 {
288 $strSql = $DB->TopSQL('
289 SELECT ' . implode(', ', $arQuerySelect) . '
290 FROM b_perf_hit h
291 ' . $obQueryWhere->GetJoins() . '
292 ' . ($strQueryWhere ? 'WHERE ' . $strQueryWhere : '') . '
293 ' . ($bGroup && count($arQueryGroup) > 0 ? 'GROUP BY ' . implode(', ', $arQueryGroup) : '') . '
294 ' . $strHaving . '
295 ' . (count($arQueryOrder) ? 'ORDER BY ' . implode(', ', $arQueryOrder) : '') . '
296 ', $arNavStartParams['nTopCount']);
297 $res = $DB->Query($strSql);
298 }
299 elseif (is_array($arNavStartParams))
300 {
301 $strSql = "
302 SELECT count('x') CNT
303 FROM b_perf_hit h
304 " . $obQueryWhere->GetJoins() . '
305 ' . ($strQueryWhere ? 'WHERE ' . $strQueryWhere : '') . '
306 ' . ($bGroup && count($arQueryGroup) > 0 ? 'GROUP BY ' . implode(', ', $arQueryGroup) : '') . '
307 ' . $strHaving . '
308 ';
309 $res_cnt = $DB->Query($strSql);
310
311 if ($bGroup)
312 {
313 $c = 0;
314 while ($ar_cnt = $res_cnt->Fetch())
315 {
316 $c++;
317 }
318 }
319 else
320 {
321 $ar_cnt = $res_cnt->Fetch();
322 $c = $ar_cnt['CNT'];
323 }
324
325 $strSql = '
326 SELECT ' . implode(', ', $arQuerySelect) . '
327 FROM b_perf_hit h
328 ' . $obQueryWhere->GetJoins() . '
329 ' . ($strQueryWhere ? 'WHERE ' . $strQueryWhere : '') . '
330 ' . ($bGroup && count($arQueryGroup) > 0 ? 'GROUP BY ' . implode(', ', $arQueryGroup) : '') . '
331 ' . $strHaving . '
332 ' . (count($arQueryOrder) ? 'ORDER BY ' . implode(', ', $arQueryOrder) : '') . '
333 ';
334 $res = new CDBResult();
335 $res->NavQuery($strSql, $c, $arNavStartParams);
336 }
337 else
338 {
339 $strSql = '
340 SELECT ' . implode(', ', $arQuerySelect) . '
341 FROM b_perf_hit h
342 ' . $obQueryWhere->GetJoins() . '
343 ' . ($strQueryWhere ? 'WHERE ' . $strQueryWhere : '') . '
344 ' . ($bGroup && count($arQueryGroup) > 0 ? 'GROUP BY ' . implode(', ', $arQueryGroup) : '') . '
345 ' . $strHaving . '
346 ' . (count($arQueryOrder) ? 'ORDER BY ' . implode(', ', $arQueryOrder) : '') . '
347 ';
348 $res = $DB->Query($strSql);
349 }
350
351 return $res;
352 }
353
354 public static function Clear()
355 {
356 global $DB;
357 return $DB->Query('TRUNCATE TABLE b_perf_hit');
358 }
359}
SetFields($arFields)
Определения sqlwhere.php:239
Определения hit.php:4
static Clear()
Определения hit.php:354
static GetList($arOrder, $arFilter, $bGroup, $arNavStartParams, $arSelect)
Определения hit.php:5
Определения sqlwhere.php:1359
$res
Определения filter_act.php:7
global $DB
Определения cron_frame.php:29
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$arFilter
Определения user_search.php:106