Conditions | 5 |
Paths | 2 |
Total Lines | 39 |
Code Lines | 31 |
Lines | 0 |
Ratio | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
1 | <?php |
||
7 | public function entries(): array |
||
8 | { |
||
9 | global $wpdb; |
||
10 | $entries = []; |
||
11 | $index = 0; |
||
12 | $search = [ |
||
13 | 'FROM', 'GROUP BY', 'INNER JOIN', 'LEFT JOIN', 'LIMIT', |
||
14 | 'ON DUPLICATE KEY UPDATE', 'ORDER BY', 'OFFSET', ' SET', 'WHERE', |
||
15 | ]; |
||
16 | $replace = array_map(function ($value) { |
||
17 | return PHP_EOL.$value; |
||
18 | }, $search); |
||
19 | foreach ($wpdb->queries as $query) { |
||
20 | $sql = preg_replace('/\s\s+/', ' ', trim($query[0])); |
||
21 | $sql = str_replace(PHP_EOL, ' ', $sql); |
||
22 | $sql = str_replace(['( ', ' )', ' ,'], ['(', ')', ','], $sql); |
||
23 | $sql = str_replace($search, $replace, $sql); |
||
24 | $parts = explode(PHP_EOL, $sql); |
||
25 | $sql = array_reduce($parts, function ($carry, $part) { |
||
26 | if (str_starts_with($part, 'SELECT') && strlen($part) > 100) { |
||
27 | $part = preg_replace('/\s*(,)\s*/', ','.PHP_EOL.' ', $part); |
||
28 | } |
||
29 | if (str_starts_with($part, 'WHERE')) { |
||
30 | $part = str_replace('AND', PHP_EOL.' AND', $part); |
||
31 | } |
||
32 | return $carry.$part.PHP_EOL; |
||
33 | }); |
||
34 | $trace = explode(', ', $query[2]); |
||
35 | $nanoseconds = (int) round($query[1] * 1e9); |
||
36 | $entries[] = [ |
||
37 | 'index' => $index++, |
||
38 | 'sql' => $sql, |
||
39 | 'time' => $nanoseconds, |
||
40 | 'time_formatted' => $this->formatTime($nanoseconds), |
||
41 | 'trace' => array_reverse($trace, true), |
||
42 | ]; |
||
43 | } |
||
44 | uasort($entries, [$this, 'sortByTime']); |
||
45 | return $entries; |
||
46 | } |
||
78 |