Skip to content

Commit

Permalink
Fix "explain" feature in the debug plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
Fedik committed Sep 6, 2020
1 parent dc8d9de commit 9797ee1
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -217,13 +217,18 @@
if (tableExplain) {
tableExplain.appendTo(li)
for (i in stmt.explain) {
var entry = stmt.explain[i]
tableExplain.append('<tr>'
+ '<td>' + entry.id + '</td><td>' + entry.select_type + '</td><td>' + entry.table + '</td>'
+ '<td>' + entry.type + '</td><td>' + entry.possible_keys + '</td><td>' + entry.key + '</td>'
+ '<td>' + entry.key_len + '</td><td>' + entry.ref + '</td><td>' + entry.rows + '</td>'
+ '<td>' + entry.Extra + '</td>'
+ '</tr>')
var entry = stmt.explain[i];

if (entry.error) {
tableExplain.append('<tr><td colspan="10">' + entry.error + '</td></tr>');
} else {
tableExplain.append('<tr>'
+ '<td>' + entry.id + '</td><td>' + entry.select_type + '</td><td>' + entry.table + '</td>'
+ '<td>' + entry.type + '</td><td>' + entry.possible_keys + '</td><td>' + entry.key + '</td>'
+ '<td>' + entry.key_len + '</td><td>' + entry.ref + '</td><td>' + entry.rows + '</td>'
+ '<td>' + entry.Extra + '</td>'
+ '</tr>');
}
}
}

Expand Down
12 changes: 7 additions & 5 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 15 additions & 4 deletions plugins/system/debug/debug.php
Original file line number Diff line number Diff line change
Expand Up @@ -508,7 +508,8 @@ public function onAfterDisconnect(ConnectionEvent $event)

if ($this->params->get('query_explains') && in_array($db->getServerType(), ['mysql', 'postgresql'], true))
{
$logs = $this->queryMonitor->getLogs();
$logs = $this->queryMonitor->getLogs();
$boundParams = $this->queryMonitor->getBoundParams();

foreach ($logs as $k => $query)
{
Expand All @@ -524,12 +525,22 @@ public function onAfterDisconnect(ConnectionEvent $event)
{
try
{
$db->setQuery('EXPLAIN ' . ($dbVersion56 ? 'EXTENDED ' : '') . $query);
$this->explains[$k] = $db->loadAssocList();
$queryInstance = $db->getQuery(true);
$queryInstance->setQuery('EXPLAIN ' . ($dbVersion56 ? 'EXTENDED ' : '') . $query);

if ($boundParams[$k])
{
foreach ($boundParams[$k] as $key => $obj)
{
$queryInstance->bind($key, $obj->value, $obj->dataType, $obj->length, $obj->driverOptions);
}
}

$this->explains[$k] = $db->setQuery($queryInstance)->loadAssocList();
}
catch (Exception $e)
{
$this->explains[$k] = [['Error' => $e->getMessage()]];
$this->explains[$k] = [['error' => $e->getMessage()]];
}
}
}
Expand Down

0 comments on commit 9797ee1

Please sign in to comment.