1 |
dpavlin |
2 |
<?php |
2 |
|
|
// vim: ts=4 foldcolumn=4 foldmethod=marker |
3 |
|
|
|
4 |
|
|
ini_set("include_path", |
5 |
|
|
join(PATH_SEPARATOR, |
6 |
|
|
array(realpath(join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), '..'))), |
7 |
|
|
realpath(join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), '..', 'library', 'PEAR'))), |
8 |
|
|
realpath(join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), '..', 'library', 'Smarty'))), |
9 |
|
|
realpath(join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), '..', 'library', 'magpierss'))), |
10 |
|
|
realpath(join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), '..', 'library', 'RF'))), |
11 |
|
|
ini_get("include_path")))); |
12 |
|
|
|
13 |
|
|
require_once('config.php'); |
14 |
|
|
require_once('Utility.functions.php'); |
15 |
|
|
require_once("DB.php"); |
16 |
|
|
|
17 |
|
|
$dbh = & DB::connect(get_configured_dsn(), |
18 |
|
|
array('debug' => REF_DB_DEBUG_LEVEL, 'portability' => DB_PORTABILITY_NONE)); |
19 |
|
|
|
20 |
|
|
if(DB::isError($dbh)) |
21 |
|
|
die(sprintf('<p><b>%s.</b></p><pre>%s</pre>', htmlspecialchars($dbh->getMessage()), htmlspecialchars($dbh->getDebugInfo()))); |
22 |
|
|
|
23 |
|
|
$dbh->setFetchMode(DB_FETCHMODE_OBJECT); |
24 |
|
|
|
25 |
|
|
$q = "SELECT id, query, duration, context |
26 |
|
|
FROM query_log |
27 |
|
|
WHERE id = ".$dbh->quoteSmart($_GET['query'])." |
28 |
|
|
LIMIT 1"; |
29 |
|
|
|
30 |
|
|
$res = $dbh->query($q); |
31 |
|
|
|
32 |
|
|
if(DB::isError($res)) |
33 |
|
|
die(sprintf('<p><b>%s.</b></p><pre>%s</pre>', htmlspecialchars($res->getMessage()), htmlspecialchars($res->getDebugInfo()))); |
34 |
|
|
|
35 |
|
|
$query = $res->fetchRow(); |
36 |
|
|
|
37 |
|
|
$res = $dbh->query('EXPLAIN '.preg_replace('/\brb_/Ui', '', $query->query)); |
38 |
|
|
|
39 |
|
|
$explanations = array(); |
40 |
|
|
|
41 |
|
|
while($explanation = $res->fetchRow()) |
42 |
|
|
$explanations[] = $explanation; |
43 |
|
|
|
44 |
|
|
?> |
45 |
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" |
46 |
|
|
"http://www.w3.org/TR/html4/loose.dtd"> |
47 |
|
|
<html> |
48 |
|
|
<head> |
49 |
|
|
<title>Query Log: Explain Query</title> |
50 |
|
|
<link rel="stylesheet" href="style.css" type="text/css"> |
51 |
|
|
</head> |
52 |
|
|
<body> |
53 |
|
|
<p><a href="context.php?context=<?= urlencode($query->context) ?>">more in this context</a></p> |
54 |
|
|
<h1>Query <?= $query->id ?></h1> |
55 |
|
|
<h2><?= number_format($query->duration) ?> msec</h2> |
56 |
|
|
<table border="0"> |
57 |
|
|
<tr> |
58 |
|
|
<th>Select</th> |
59 |
|
|
<th>Table</th> |
60 |
|
|
<th>Type</th> |
61 |
|
|
<th>Keys</th> |
62 |
|
|
<th>Key</th> |
63 |
|
|
<th>Len.</th> |
64 |
|
|
<th>Ref.</th> |
65 |
|
|
<th>Rows</th> |
66 |
|
|
<th>Extra</th> |
67 |
|
|
</tr> |
68 |
|
|
<? foreach($explanations as $explanation): ?> |
69 |
|
|
<tr> |
70 |
|
|
<td class="value"><?= htmlspecialchars($explanation->select_type) ?></td> |
71 |
|
|
<td class="value"><?= htmlspecialchars($explanation->table) ?></td> |
72 |
|
|
<td class="value"><?= htmlspecialchars($explanation->type) ?></td> |
73 |
|
|
<td class="value"><?= htmlspecialchars(implode(', ', explode(',', $explanation->possible_keys))) ?></td> |
74 |
|
|
<td class="value"><?= htmlspecialchars($explanation->key) ?></td> |
75 |
|
|
<td class="value"><?= htmlspecialchars($explanation->key_len) ?></td> |
76 |
|
|
<td class="value"><?= htmlspecialchars(implode(', ', explode(',', $explanation->ref))) ?></td> |
77 |
|
|
<td class="value"><?= htmlspecialchars($explanation->rows) ?></td> |
78 |
|
|
<td class="value"><?= htmlspecialchars($explanation->extra) ?></td> |
79 |
|
|
</tr> |
80 |
|
|
<? endforeach ?> |
81 |
|
|
</table> |
82 |
|
|
<h2>Query</h2> |
83 |
|
|
<pre><?= htmlspecialchars($query->query) ?></pre> |
84 |
|
|
</body> |
85 |
|
|
</html> |