1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
cache.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 $arQueryGroup = [];
21 $arQuerySelect = [];
22 foreach ($arSelect as $strColumn)
23 {
24 $strColumn = mb_strtoupper($strColumn);
25 if (preg_match('/^(MIN|MAX|AVG|SUM)_(.*)$/', $strColumn, $arMatch))
26 {
27 $strGroupFunc = $arMatch[1];
28 $strColumn = $arMatch[2];
29 }
30 else
31 {
32 $strGroupFunc = '';
33 }
34
35 switch ($strColumn)
36 {
37 case 'ID':
38 case 'HIT_ID':
39 case 'COMPONENT_ID':
40 case 'NN':
41 case 'OP_MODE':
42 case 'MODULE_NAME':
43 case 'COMPONENT_NAME':
44 case 'BASE_DIR':
45 case 'INIT_DIR':
46 case 'FILE_NAME':
47 case 'FILE_PATH':
48 if ($strGroupFunc === '')
49 {
50 if ($bGroup)
51 {
52 $arQueryGroup[$strColumn] = 'c.' . $strColumn;
53 }
54 $arQuerySelect[$strColumn] = 'c.' . $strColumn;
55 }
56 break;
57 case 'HIT_RATIO':
58 if ($strGroupFunc === '' && $bGroup)
59 {
60 $sql = "case when sum((case when c.OP_MODE='W' then 1 else 0 end)+(case when c.OP_MODE='R' then 1 else 0 end)) > 0 then sum(case when c.OP_MODE='R' then 1 else 0 end)/sum((case when c.OP_MODE='W' then 1 else 0 end)+(case when c.OP_MODE='R' then 1 else 0 end)) else null end";
61 $arQuerySelect[$strColumn] = $sql . ' ' . $strColumn;
62 }
63 break;
64 case 'CACHE_PATH':
65 if ($strGroupFunc === '')
66 {
67 if ($bGroup)
68 {
69 $arQueryGroup[$strColumn] = $DB->Concat('c.BASE_DIR', 'c.INIT_DIR', 'c.FILE_NAME');
70 }
71 $arQuerySelect[$strColumn] = $DB->Concat('c.BASE_DIR', "','", 'c.INIT_DIR', "','", 'c.FILE_NAME') . ' ' . $strColumn;
72 }
73 break;
74 case 'CACHE_SIZE':
75 if ($strGroupFunc === '')
76 {
77 if (!$bGroup)
78 {
79 $arQuerySelect[$strColumn] = 'c.' . $strColumn;
80 }
81 }
82 else
83 {
84 if ($bGroup)
85 {
86 $arQuerySelect[$strGroupFunc . '_' . $strColumn] = $strGroupFunc . '(c.' . $strColumn . ') ' . $strGroupFunc . '_' . $strColumn;
87 }
88 }
89 break;
90 case 'COUNT':
91 if ($strGroupFunc === '' && $bGroup)
92 {
93 $arQuerySelect[$strColumn] = 'COUNT(c.ID) ' . $strColumn;
94 }
95 break;
96 case 'COUNT_R':
97 if ($strGroupFunc === '' && $bGroup)
98 {
99 $arQuerySelect[$strColumn] = "SUM(case when c.OP_MODE='R' then 1 else 0 end) " . $strColumn;
100 }
101 break;
102 case 'COUNT_W':
103 if ($strGroupFunc === '' && $bGroup)
104 {
105 $arQuerySelect[$strColumn] = "SUM(case when c.OP_MODE='W' then 1 else 0 end) " . $strColumn;
106 }
107 break;
108 case 'COUNT_C':
109 if ($strGroupFunc === '' && $bGroup)
110 {
111 $arQuerySelect[$strColumn] = "SUM(case when c.OP_MODE='C' then 1 else 0 end) " . $strColumn;
112 }
113 break;
114 }
115 }
116
117 if (!is_array($arOrder))
118 {
119 $arOrder = [];
120 }
121
122 $arQueryOrder = [];
123 foreach ($arOrder as $strColumn => $strDirection)
124 {
125 $strColumn = mb_strtoupper($strColumn);
126 if (!array_key_exists($strColumn, $arQuerySelect))
127 {
128 continue;
129 }
130
131 if (preg_match('/^(MIN|MAX|AVG|SUM)_(.*)$/', $strColumn, $arMatch))
132 {
133 $strGroupFunc = $arMatch[1];
134 $strColumn = $arMatch[2];
135 }
136 else
137 {
138 $strGroupFunc = '';
139 }
140
141 $strDirection = mb_strtoupper($strDirection) === 'ASC' ? 'ASC' : 'DESC';
142 switch ($strColumn)
143 {
144 case 'ID':
145 case 'HIT_ID':
146 case 'COMPONENT_ID':
147 case 'NN':
148 case 'OP_MODE':
149 case 'MODULE_NAME':
150 case 'COMPONENT_NAME':
151 case 'BASE_DIR':
152 case 'FILE_NAME':
153 if ($strGroupFunc === '')
154 {
155 $arSelect[] = $strColumn;
156 $arQueryOrder[$strColumn] = $strColumn . ' ' . $strDirection;
157 }
158 break;
159 case 'COUNT':
160 case 'COUNT_R':
161 case 'COUNT_W':
162 case 'COUNT_C':
163 case 'HIT_RATIO':
164 if ($strGroupFunc === '' && $bGroup)
165 {
166 $arSelect[] = $strColumn;
167 $arQueryOrder[$strColumn] = $strColumn . ' ' . $strDirection;
168 }
169 break;
170 case 'FILE_PATH':
171 if (
172 !isset($arQueryOrder['BASE_DIR'])
173 && !isset($arQueryOrder['INIT_DIR'])
174 && !isset($arQueryOrder['FILE_NAME'])
175 && $strGroupFunc === ''
176 )
177 {
178 $arSelect[] = 'BASE_DIR';
179 $arQueryOrder['BASE_DIR'] = 'BASE_DIR ' . $strDirection;
180 $arSelect[] = 'INIT_DIR';
181 $arQueryOrder['INIT_DIR'] = 'INIT_DIR ' . $strDirection;
182 $arSelect[] = 'FILE_NAME';
183 $arQueryOrder['FILE_NAME'] = 'FILE_NAME ' . $strDirection;
184 }
185 break;
186 case 'INIT_DIR':
187 if (
188 !isset($arQueryOrder['BASE_DIR'])
189 && !isset($arQueryOrder['INIT_DIR'])
190 && $strGroupFunc === ''
191 )
192 {
193 $arSelect[] = 'BASE_DIR';
194 $arQueryOrder['BASE_DIR'] = 'BASE_DIR ' . $strDirection;
195 $arSelect[] = 'INIT_DIR';
196 $arQueryOrder['INIT_DIR'] = 'INIT_DIR ' . $strDirection;
197 }
198 break;
199 case 'CACHE_SIZE':
200 if ($strGroupFunc === '')
201 {
202 if (!$bGroup)
203 {
204 $arSelect[] = $strColumn;
205 $arQueryOrder[$strColumn] = $strColumn . ' ' . $strDirection;
206 }
207 }
208 else
209 {
210 if ($bGroup)
211 {
212 $arSelect[] = $strColumn;
213 $arQueryOrder[$strGroupFunc . '_' . $strColumn] = $strGroupFunc . '_' . $strColumn . ' ' . $strDirection;
214 }
215 }
216 break;
217 }
218 }
219
220 $obQueryWhere = new CSQLWhere;
221 static $arWhereFields = [
222 'ID' => [
223 'TABLE_ALIAS' => 'c',
224 'FIELD_NAME' => 'c.ID',
225 'FIELD_TYPE' => 'int',
226 'JOIN' => false,
227 ],
228 'HIT_ID' => [
229 'TABLE_ALIAS' => 'c',
230 'FIELD_NAME' => 'c.HIT_ID',
231 'FIELD_TYPE' => 'int',
232 'JOIN' => false,
233 ],
234 'COMPONENT_ID' => [
235 'TABLE_ALIAS' => 'c',
236 'FIELD_NAME' => 'c.COMPONENT_ID',
237 'FIELD_TYPE' => 'int',
238 'JOIN' => false,
239 ],
240 'OP_MODE' => [
241 'TABLE_ALIAS' => 'c',
242 'FIELD_NAME' => 'c.OP_MODE',
243 'FIELD_TYPE' => 'string',
244 'JOIN' => false,
245 ],
246 'MODULE_NAME' => [
247 'TABLE_ALIAS' => 'c',
248 'FIELD_NAME' => 'c.MODULE_NAME',
249 'FIELD_TYPE' => 'string',
250 'JOIN' => false,
251 ],
252 'COMPONENT_NAME' => [
253 'TABLE_ALIAS' => 'c',
254 'FIELD_NAME' => 'c.COMPONENT_NAME',
255 'FIELD_TYPE' => 'string',
256 'JOIN' => false,
257 ],
258 'BASE_DIR' => [
259 'TABLE_ALIAS' => 'c',
260 'FIELD_NAME' => 'c.BASE_DIR',
261 'FIELD_TYPE' => 'string',
262 'JOIN' => false,
263 ],
264 'INIT_DIR' => [
265 'TABLE_ALIAS' => 'c',
266 'FIELD_NAME' => 'c.INIT_DIR',
267 'FIELD_TYPE' => 'string',
268 'JOIN' => false,
269 ],
270 'FILE_NAME' => [
271 'TABLE_ALIAS' => 'c',
272 'FIELD_NAME' => 'c.FILE_NAME',
273 'FIELD_TYPE' => 'string',
274 'JOIN' => false,
275 ],
276 ];
277 $obQueryWhere->SetFields($arWhereFields);
278
279 if (count($arQuerySelect) < 1)
280 {
281 $arQuerySelect = ['ID' => 'c.ID'];
282 }
283
284 $strQueryWhere = $obQueryWhere->GetQuery($arFilter);
285 $strHaving = '';
286 if (
287 $bGroup
288 && count($arQueryGroup) > 0
289 && array_key_exists('>COUNT', $arFilter)
290 )
291 {
292 $strHaving = 'HAVING COUNT(*) > ' . intval($arFilter['COUNT']);
293 }
294
295 if (is_array($arNavStartParams) && isset($arNavStartParams['nTopCount']) && $arNavStartParams['nTopCount'] > 0)
296 {
297 $strSql = $DB->TopSQL('
298 SELECT ' . implode(', ', $arQuerySelect) . '
299 FROM b_perf_cache c
300 ' . $obQueryWhere->GetJoins() . '
301 ' . ($strQueryWhere ? 'WHERE ' . $strQueryWhere : '') . '
302 ' . ($bGroup ? 'GROUP BY ' . implode(', ', $arQueryGroup) : '') . '
303 ' . $strHaving . '
304 ' . (count($arQueryOrder) ? 'ORDER BY ' . implode(', ', $arQueryOrder) : '') . '
305 ', $arNavStartParams['nTopCount']);
306 $res = $DB->Query($strSql);
307 }
308 elseif (is_array($arNavStartParams))
309 {
310 $strSql = "
311 SELECT count('x') CNT
312 FROM b_perf_cache c
313 " . $obQueryWhere->GetJoins() . '
314 ' . ($strQueryWhere ? 'WHERE ' . $strQueryWhere : '') . '
315 ' . ($bGroup ? 'GROUP BY ' . implode(', ', $arQueryGroup) : '') . '
316 ' . $strHaving . '
317 ';
318 $res_cnt = $DB->Query($strSql);
319 $ar_cnt = $res_cnt->Fetch();
320
321 $strSql = '
322 SELECT ' . implode(', ', $arQuerySelect) . '
323 FROM b_perf_cache c
324 ' . $obQueryWhere->GetJoins() . '
325 ' . ($strQueryWhere ? 'WHERE ' . $strQueryWhere : '') . '
326 ' . ($bGroup ? 'GROUP BY ' . implode(', ', $arQueryGroup) : '') . '
327 ' . $strHaving . '
328 ' . (count($arQueryOrder) ? 'ORDER BY ' . implode(', ', $arQueryOrder) : '') . '
329 ';
330 $res = new CDBResult();
331 $res->NavQuery($strSql, $ar_cnt['CNT'], $arNavStartParams);
332 }
333 else
334 {
335 $strSql = '
336 SELECT ' . implode(', ', $arQuerySelect) . '
337 FROM b_perf_cache c
338 ' . $obQueryWhere->GetJoins() . '
339 ' . ($strQueryWhere ? 'WHERE ' . $strQueryWhere : '') . '
340 ' . ($bGroup ? 'GROUP BY ' . implode(', ', $arQueryGroup) : '') . '
341 ' . (count($arQueryOrder) ? 'ORDER BY ' . implode(', ', $arQueryOrder) : '') . '
342 ';
343 $res = $DB->Query($strSql);
344 }
345
346 return $res;
347 }
348
349 public static function Clear()
350 {
351 global $DB;
352 return $DB->Query('TRUNCATE TABLE b_perf_cache');
353 }
354}
SetFields($arFields)
Определения sqlwhere.php:239
Определения cache.php:4
static Clear()
Определения cache.php:349
static GetList($arOrder, $arFilter, $bGroup, $arNavStartParams, $arSelect)
Определения cache.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