Skip to content

Commit cb825ac

Browse files
committed
ConnectionPanel: added whole stack trace listing
1 parent a4329ba commit cb825ac

File tree

4 files changed

+49
-16
lines changed

4 files changed

+49
-16
lines changed

src/Bridges/DatabaseTracy/ConnectionPanel.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,24 +70,24 @@ private function logQuery(Connection $connection, $result): void
7070

7171
$this->count++;
7272

73-
$source = null;
7473
$trace = $result instanceof \PDOException
75-
? $result->getTrace()
74+
? array_map(fn($row) => array_diff_key($row, ['args' => null]), $result->getTrace())
7675
: debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
76+
7777
foreach ($trace as $row) {
7878
if (preg_match('~\.(php.?|phtml)$~', $row['file'] ?? '') && !$this->blueScreen->isCollapsed($row['file'])) {
79-
$source = [$row['file'], (int) $row['line']];
8079
break;
8180
}
81+
array_shift($trace);
8282
}
8383

8484
if ($result instanceof Nette\Database\ResultSet) {
8585
$this->totalTime += $result->getTime();
8686
if ($this->count < $this->maxQueries) {
87-
$this->queries[] = [$connection, $result->getQueryString(), $result->getParameters(), $source, $result->getTime(), $result->getRowCount(), null];
87+
$this->queries[] = [$connection, $result->getQueryString(), $result->getParameters(), $trace, $result->getTime(), $result->getRowCount(), null];
8888
}
8989
} elseif ($result instanceof \PDOException && $this->count < $this->maxQueries) {
90-
$this->queries[] = [$connection, $result->queryString, null, $source, null, null, $result->getMessage()];
90+
$this->queries[] = [$connection, $result->queryString, null, $trace, null, null, $result->getMessage()];
9191
}
9292
}
9393

src/Bridges/DatabaseTracy/dist/panel.phtml

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ declare(strict_types=1);
2424
<th style="width: 1%">Rows</th>
2525
</tr>
2626

27-
<?php foreach ($queries as [$connection, $sql, $params, $source, $time, $rows, $error, $command, $explain]): ?> <tr>
27+
<?php foreach ($queries as [$connection, $sql, $params, $trace, $time, $rows, $error, $command, $explain]): ?> <tr>
2828
<td style="background:rgba(255, 95, 23, <?= Tracy\Helpers::escapeHtml(sprintf('%0.3f', log($time * 1000 + 1, 10) * $performanceScale)) ?>
2929
)" data-order="<?= Tracy\Helpers::escapeHtml((float) $time) ?>
3030
">
@@ -36,6 +36,9 @@ declare(strict_types=1);
3636
<?php endif ?>
3737
<?php if ($explain): ?>
3838
<br><a class="tracy-toggle tracy-collapsed" data-tracy-ref="^tr .nette-DbConnectionPanel-explain">explain</a>
39+
<?php endif ?>
40+
<?php if ($trace): ?>
41+
<br><a class="tracy-toggle tracy-collapsed" data-tracy-ref="^tr .nette-DbConnectionPanel-trace">trace</a>
3942
<?php endif ?>
4043
</td>
4144

@@ -55,11 +58,19 @@ declare(strict_types=1);
5558
<?php endforeach ?> </tr>
5659
<?php endforeach ?> </table>
5760
<?php endif ?>
58-
<?php if ($source): ?>
59-
<?= substr_replace(Tracy\Helpers::editorLink($source[0], $source[1]), ' class="nette-DbConnectionPanel-source"', 2, 0) ?>
61+
<?php if ($trace): ?> <?= substr_replace(Tracy\Helpers::editorLink($trace[0]['file'], $trace[0]['line']), ' class="nette-DbConnectionPanel-source"', 2, 0) ?>
6062

61-
<?php endif ?>
62-
</td>
63+
<table class="tracy-collapsed nette-DbConnectionPanel-trace">
64+
<?php foreach ($trace as $row): ?> <tr>
65+
<td><?= isset($row['file']) ? Tracy\Helpers::editorLink($row['file'], $row['line']) : '' ?>
66+
</td>
67+
<td><?= Tracy\Helpers::escapeHtml($row['class'] ?? '') ?>
68+
<?= Tracy\Helpers::escapeHtml($row['type'] ?? '') ?>
69+
<?= Tracy\Helpers::escapeHtml($row['function']) ?>
70+
()</td>
71+
</tr>
72+
<?php endforeach ?> </table>
73+
<?php endif ?> </td>
6374

6475
<td><?= Tracy\Helpers::escapeHtml($rows) ?>
6576
</td>

src/Bridges/DatabaseTracy/panel.latte

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<th style="width: 1%">Rows</th>
1818
</tr>
1919

20-
{foreach $queries as [$connection, $sql, $params, $source, $time, $rows, $error, $command, $explain]}
20+
{foreach $queries as [$connection, $sql, $params, $trace, $time, $rows, $error, $command, $explain]}
2121
<tr>
2222
<td style="background:rgba(255, 95, 23, {sprintf('%0.3f', log($time * 1000 + 1, 10) * $performanceScale)})" data-order="{=(float) $time}">
2323
{if $error}
@@ -26,6 +26,7 @@
2626
{/if}
2727

2828
{if $explain}<br><a class="tracy-toggle tracy-collapsed" data-tracy-ref="^tr .nette-DbConnectionPanel-explain">explain</a>{/if}
29+
{if $trace}<br><a class="tracy-toggle tracy-collapsed" data-tracy-ref="^tr .nette-DbConnectionPanel-trace">trace</a>{/if}
2930
</td>
3031

3132
<td class="nette-DbConnectionPanel-sql nette-DbConnectionPanel-sql-{$command}">
@@ -48,7 +49,17 @@
4849
</table>
4950
{/if}
5051

51-
{if $source}{substr_replace(Tracy\Helpers::editorLink($source[0], $source[1]), ' class="nette-DbConnectionPanel-source"', 2, 0)}{/if}
52+
{if $trace}
53+
{substr_replace(Tracy\Helpers::editorLink($trace[0][file], $trace[0][line]), ' class="nette-DbConnectionPanel-source"', 2, 0)}
54+
<table class="tracy-collapsed nette-DbConnectionPanel-trace">
55+
{foreach $trace as $row}
56+
<tr>
57+
<td>{isset($row[file]) ? Tracy\Helpers::editorLink($row[file], $row[line]) : ''}</td>
58+
<td>{$row[class] ?? ''}{$row[type] ?? ''}{$row[function]}()</td>
59+
</tr>
60+
{/foreach}
61+
</table>
62+
{/if}
5263
</td>
5364

5465
<td>{$rows}</td>

tests/Database.Tracy/panel.html

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,14 @@ <h1 title="sqlite::memory:">Queries: 4, time: %a% ms, foo</h1>
1010
<pre class="dump">::beginTransaction</pre>
1111

1212

13-
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
13+
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
14+
<table class="tracy-collapsed nette-DbConnectionPanel-trace">
15+
<tr>
16+
<td><a href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a></td>
17+
<td>Nette\Utils\Arrays::invoke()</td>
18+
</tr>
19+
%A%
20+
</table>
1421
</td>
1522

1623
<td></td>
@@ -23,7 +30,8 @@ <h1 title="sqlite::memory:">Queries: 4, time: %a% ms, foo</h1>
2330

2431

2532
<table class="tracy-collapsed nette-DbConnectionPanel-explain">%A%</table>
26-
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
33+
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
34+
<table class="tracy-collapsed nette-DbConnectionPanel-trace">%A%</table>
2735
</td>
2836

2937
<td>0</td>
@@ -35,21 +43,24 @@ <h1 title="sqlite::memory:">Queries: 4, time: %a% ms, foo</h1>
3543
<pre class="dump">::commit</pre>
3644

3745

38-
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
46+
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
47+
<table class="tracy-collapsed nette-DbConnectionPanel-trace">%A%</table>
3948
</td>
4049

4150
<td></td>
4251
</tr>
4352
<tr>
4453
<td %a%>
4554
<span title="SQLSTATE[HY000]: General error: 1 incomplete input">ERROR</span>
55+
<br><a class="tracy-toggle tracy-collapsed" data-tracy-ref="^tr .nette-DbConnectionPanel-trace">trace</a>
4656
</td>
4757

4858
<td class="nette-DbConnectionPanel-sql nette-DbConnectionPanel-sql-">
4959
<pre class="dump"><strong style="color:blue">SELECT</strong></pre>
5060

5161

52-
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%SqliteDriver.php:%d%" class="tracy-editor">%a%<b>SqliteDriver.php</b>:%d%</a>
62+
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%SqliteDriver.php:%d%" class="tracy-editor">%a%<b>SqliteDriver.php</b>:%d%</a>
63+
<table class="tracy-collapsed nette-DbConnectionPanel-trace">%A%</table>
5364
</td>
5465

5566
<td></td>

0 commit comments

Comments
 (0)