1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
component.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 'HIT_ID' => 'DESC',
28 'NN' => 'ASC',
29 ];
30 }
31
32 $arQueryOrder = [];
33 foreach ($arOrder as $strColumn => $strDirection)
34 {
35 $strColumn = mb_strtoupper($strColumn);
36 if (preg_match('/^(MIN|MAX|AVG|SUM)_(.*)$/', $strColumn, $arMatch))
37 {
38 $strGroupFunc = $arMatch[1];
39 $strColumn = $arMatch[2];
40 }
41 else
42 {
43 $strGroupFunc = '';
44 }
45
46 $strDirection = mb_strtoupper($strDirection) === 'ASC' ? 'ASC' : 'DESC';
47 switch ($strColumn)
48 {
49 case 'ID':
50 case 'HIT_ID':
51 case 'NN':
52 case 'CACHE_TYPE':
53 case 'COMPONENT_NAME':
54 if ($strGroupFunc === '')
55 {
56 $arSelect[] = $strColumn;
57 $arQueryOrder[$strColumn] = $strColumn . ' ' . $strDirection;
58 }
59 break;
60 case 'CACHE_SIZE':
61 case 'CACHE_COUNT_R':
62 case 'CACHE_COUNT_W':
63 case 'CACHE_COUNT_C':
64 case 'COMPONENT_TIME':
65 case 'QUERIES':
66 case 'QUERIES_TIME':
67 if ($strGroupFunc === '')
68 {
69 if (!$bGroup)
70 {
71 $arSelect[] = $strColumn;
72 $arQueryOrder[$strColumn] = $strColumn . ' ' . $strDirection;
73 }
74 }
75 else
76 {
77 if ($bGroup)
78 {
79 $arSelect[] = $strColumn;
80 $arQueryOrder[$strGroupFunc . '_' . $strColumn] = $strGroupFunc . '_' . $strColumn . ' ' . $strDirection;
81 }
82 }
83 break;
84 case 'COUNT':
85 if ($bGroup)
86 {
87 $arSelect[] = $strColumn;
88 $arQueryOrder[$strColumn] = $strColumn . ' ' . $strDirection;
89 }
90 break;
91 }
92 }
93
94 $arQueryGroup = [];
95 $arQuerySelect = [];
96 foreach ($arSelect as $strColumn)
97 {
98 $strColumn = mb_strtoupper($strColumn);
99 if (preg_match('/^(MIN|MAX|AVG|SUM)_(.*)$/', $strColumn, $arMatch))
100 {
101 $strGroupFunc = $arMatch[1];
102 $strColumn = $arMatch[2];
103 }
104 else
105 {
106 $strGroupFunc = '';
107 }
108
109 switch ($strColumn)
110 {
111 case 'ID':
112 case 'HIT_ID':
113 case 'NN':
114 case 'CACHE_TYPE':
115 case 'COMPONENT_NAME':
116 if ($strGroupFunc === '')
117 {
118 if ($bGroup)
119 {
120 $arQueryGroup[$strColumn] = 'c.' . $strColumn;
121 }
122 $arQuerySelect[$strColumn] = 'c.' . $strColumn;
123 }
124 break;
125 case 'CACHE_SIZE':
126 case 'CACHE_COUNT_R':
127 case 'CACHE_COUNT_W':
128 case 'CACHE_COUNT_C':
129 case 'COMPONENT_TIME':
130 case 'QUERIES':
131 case 'QUERIES_TIME':
132 if ($strGroupFunc === '')
133 {
134 if (!$bGroup)
135 {
136 $arQuerySelect[$strColumn] = 'c.' . $strColumn;
137 }
138 }
139 else
140 {
141 if ($bGroup)
142 {
143 $arQuerySelect[$strGroupFunc . '_' . $strColumn] = $strGroupFunc . '(c.' . $strColumn . ') ' . $strGroupFunc . '_' . $strColumn;
144 }
145 }
146 break;
147 case 'CACHE_COUNT':
148 if ($strGroupFunc === '')
149 {
150 if (!$bGroup)
151 {
152 $arQuerySelect[$strColumn] = '(c.CACHE_COUNT_R + c.CACHE_COUNT_W + c.CACHE_COUNT_C) CACHE_COUNT';
153 }
154 }
155 else
156 {
157 if ($bGroup)
158 {
159 $arQuerySelect[$strGroupFunc . '_' . $strColumn] = $strGroupFunc . '(c.CACHE_COUNT_R + c.CACHE_COUNT_W + c.CACHE_COUNT_C) ' . $strGroupFunc . '_' . $strColumn;
160 }
161 }
162 break;
163 case 'COUNT':
164 if ($strGroupFunc === '' && $bGroup)
165 {
166 $arQuerySelect[$strColumn] = 'COUNT(c.ID) ' . $strColumn;
167 }
168 break;
169 }
170 }
171
172 $obQueryWhere = new CSQLWhere;
173 static $arWhereFields = [
174 'HIT_ID' => [
175 'TABLE_ALIAS' => 'c',
176 'FIELD_NAME' => 'c.HIT_ID',
177 'FIELD_TYPE' => 'int', //int, double, file, enum, int, string, date, datetime
178 'JOIN' => false,
179 //"LEFT_JOIN" => "lt",
180 ],
181 'COMPONENT_NAME' => [
182 'TABLE_ALIAS' => 'c',
183 'FIELD_NAME' => 'c.COMPONENT_NAME',
184 'FIELD_TYPE' => 'string',
185 'JOIN' => false,
186 ],
187 'ID' => [
188 'TABLE_ALIAS' => 'c',
189 'FIELD_NAME' => 'c.ID',
190 'FIELD_TYPE' => 'int',
191 'JOIN' => false,
192 ],
193 'CACHE_TYPE' => [
194 'TABLE_ALIAS' => 'c',
195 'FIELD_NAME' => 'c.CACHE_TYPE',
196 'FIELD_TYPE' => 'string',
197 'JOIN' => false,
198 ],
199 'CACHE_SIZE' => [
200 'TABLE_ALIAS' => 'c',
201 'FIELD_NAME' => 'c.CACHE_SIZE',
202 'FIELD_TYPE' => 'int',
203 'JOIN' => false,
204 ],
205 'QUERIES' => [
206 'TABLE_ALIAS' => 'c',
207 'FIELD_NAME' => 'c.QUERIES',
208 'FIELD_TYPE' => 'int',
209 'JOIN' => false,
210 ],
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',
216 ],
217 'HIT_IS_ADMIN' => [
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',
222 ],
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',
228 ],
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',
234 ],
235 ];
236 $obQueryWhere->SetFields($arWhereFields);
237
238 if (count($arQuerySelect) < 1)
239 {
240 $arQuerySelect = ['ID' => 'c.ID'];
241 }
242
243 $strQueryWhere = $obQueryWhere->GetQuery($arFilter);
244 $strHaving = '';
245 if (
246 $bGroup
247 && count($arQueryGroup) > 0
248 && array_key_exists('>COUNT', $arFilter)
249 )
250 {
251 $strHaving = 'HAVING COUNT(*) > ' . intval($arFilter['COUNT']);
252 }
253
254 if (is_array($arNavStartParams) && isset($arNavStartParams['nTopCount']) && $arNavStartParams['nTopCount'] > 0)
255 {
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) : '') . '
262 ' . $strHaving . '
263 ' . (count($arQueryOrder) ? 'ORDER BY ' . implode(', ', $arQueryOrder) : '') . '
264 ', $arNavStartParams['nTopCount']);
265 $res = $DB->Query($strSql);
266 }
267 elseif (is_array($arNavStartParams))
268 {
269 $strSql = "
270 SELECT count('x') CNT
271 FROM (
272 SELECT 1 FROM b_perf_component c
273 " . $obQueryWhere->GetJoins() . '
274 ' . ($strQueryWhere ? 'WHERE ' . $strQueryWhere : '') . '
275 ' . ($bGroup ? 'GROUP BY ' . implode(', ', $arQueryGroup) : '') . '
276 ' . $strHaving . '
277 ) t
278 ';
279 $res_cnt = $DB->Query($strSql);
280 $ar_cnt = $res_cnt->Fetch();
281
282 $strSql = '
283 SELECT ' . implode(', ', $arQuerySelect) . '
284 FROM b_perf_component c
285 ' . $obQueryWhere->GetJoins() . '
286 ' . ($strQueryWhere ? 'WHERE ' . $strQueryWhere : '') . '
287 ' . ($bGroup ? 'GROUP BY ' . implode(', ', $arQueryGroup) : '') . '
288 ' . $strHaving . '
289 ' . (count($arQueryOrder) ? 'ORDER BY ' . implode(', ', $arQueryOrder) : '') . '
290 ';
291 $res = new CDBResult();
292 $res->NavQuery($strSql, $ar_cnt['CNT'], $arNavStartParams);
293 }
294 else
295 {
296 $strSql = '
297 SELECT ' . implode(', ', $arQuerySelect) . '
298 FROM b_perf_component c
299 ' . $obQueryWhere->GetJoins() . '
300 ' . ($strQueryWhere ? 'WHERE ' . $strQueryWhere : '') . '
301 ' . ($bGroup ? 'GROUP BY ' . implode(', ', $arQueryGroup) : '') . '
302 ' . $strHaving . '
303 ' . (count($arQueryOrder) ? 'ORDER BY ' . implode(', ', $arQueryOrder) : '') . '
304 ';
305 $res = $DB->Query($strSql);
306 }
307
308 return $res;
309 }
310
311 public static function Clear()
312 {
313 global $DB;
314 return $DB->Query('TRUNCATE TABLE b_perf_component');
315 }
316}
SetFields($arFields)
Определения sqlwhere.php:239
static Clear()
Определения component.php:311
static GetList($arOrder, $arFilter, $bGroup, $arNavStartParams, $arSelect)
Определения component.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