Skip to content

Commit d60bbbd

Browse files
committed
Explain tables in the gui
1 parent db5743f commit d60bbbd

File tree

4 files changed

+117
-1
lines changed

4 files changed

+117
-1
lines changed

descTable.php

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?php
2+
3+
require_once('init.php');
4+
5+
$return = array();
6+
7+
$label = $_REQUEST['label'];
8+
$database = $_REQUEST['db'];
9+
$table = $_REQUEST['table'];
10+
11+
$return['label'] = $label;
12+
$return['database'] = $database;
13+
$return['table'] = $table;
14+
$return['column'] = $col;
15+
16+
$return['title'] = "{$database}.${table}";
17+
18+
$host = $explainhosts[$label];
19+
Database::connect(null, $host['user'], $host['password'], null, null, 'pdo', array('dsn' => $host['dsn']), $label);
20+
Database::find($label)->query('USE '.Database::escapeField($database));
21+
22+
list($tmp, $return['create']) = Database::find($label)->query_row('SHOW CREATE TABLE '.Database::escapeField($table));
23+
24+
$return['create'] = SqlParser::html($return['create']);
25+
26+
27+
$desc = Database::find($label)->query_list_assoc('DESC '.Database::escapeField($table));
28+
29+
$return['desc'] = '<table><thead><tr>';
30+
foreach (array_keys($desc[0]) as $key)
31+
$return['desc'] .= '<th>'.$key.'</th>';
32+
$return['desc'] .= '</tr></thead><tbody>';
33+
foreach ($desc as $row) {
34+
$return['desc'] .= '<tr>';
35+
foreach ($row as $key => $val)
36+
$return['desc'] .= '<td>'.ifnull($val, 'NULL').'</td>';
37+
$return['desc'] .= '</tr>';
38+
}
39+
$return['desc'] .= '</tbody></table>';
40+
unset($desc);
41+
42+
$indexes = Database::find($label)->query_list_assoc('SHOW INDEXES FROM '.Database::escapeField($table));
43+
44+
$return['indexes'] = '<table><thead><tr>';
45+
foreach (array_keys($indexes[0]) as $key)
46+
$return['indexes'] .= '<th>'.$key.'</th>';
47+
$return['indexes'] .= '</tr></thead><tbody>';
48+
foreach ($indexes as $row) {
49+
$return['indexes'] .= '<tr>';
50+
foreach ($row as $key => $val)
51+
$return['indexes'] .= '<td>'.ifnull($val, 'NULL').'</td>';
52+
$return['indexes'] .= '</tr>';
53+
}
54+
$return['indexes'] .= '</tbody></table>';
55+
unset($indexes);
56+
57+
header('Cache-Control: no-cache, must-revalidate');
58+
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
59+
header('Content-type: application/json');
60+
echo json_encode($return);

init.php

+4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
<?php
22

3+
// No html errors. They break ajax
4+
ini_set('html_errors', 0);
5+
36
// Set default settings here. Can be overridden in config.php.
47
$settings = array();
58
$settings['sqlColor'] = true;
69
$settings['title'] = null;
710
$settings['sampleLimit'] = 1;
811

912
require_once('config.php');
13+
require_once('util.php');
1014
require_once('libs/Database/Database.php');
1115
Database::connect(null, $reviewhost['user'], $reviewhost['password'], null, null, 'pdo', array('dsn' => $reviewhost['dsn']), 'review');
1216

js/explain.js

+42-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ $(function() {
2525
ret = $('#explainPlan').dataTable().fnAddData([
2626
data.Explain[i].id,
2727
data.Explain[i].select_type,
28-
data.Explain[i].table,
28+
$(data.Explain[i].table),
2929
data.Explain[i].type,
3030
data.Explain[i].possible_keys,
3131
data.Explain[i].key,
@@ -47,6 +47,47 @@ function lookupDatabase(label, database) {
4747
}
4848

4949
function lookupTable(label, database, table) {
50+
$.ajax({
51+
url: 'descTable.php',
52+
data : {
53+
checksum: checksum,
54+
label: label,
55+
db: database,
56+
table: table
57+
},
58+
59+
success: function(data) {
60+
var dlog = $('<div class="dialog">');
61+
62+
var str = '<div class="tabs">';
63+
str += '<ul><li><a href="#dialogDescCreate">Create</a></li>';
64+
str += '<li><a href="#dialogDescDesc">Desc</a></li>';
65+
str += '<li><a href="#dialogDescIndexes">Indexes</a></li></ul>';
66+
67+
str += '<div id="dialogDescCreate">';
68+
str += data.create;
69+
str += '</div>';
70+
71+
str += '<div id="dialogDescDesc" style="font-size: 80%;">';
72+
str += data.desc;
73+
str += '</div>';
74+
75+
str += '<div id="dialogDescIndexes" style="font-size: 80%;">';
76+
str += data.indexes;
77+
str += '</div>';
78+
79+
80+
str += '</div>';
81+
$(dlog).html(str);
82+
83+
$(dlog).dialog({
84+
title: data.title,
85+
minWidth: 400
86+
});
87+
$("div.dialog div.tabs").tabs();
88+
}
89+
});
90+
5091
return;
5192
}
5293

util.php

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
function ifnull($var, $val) {
4+
if (is_null($var))
5+
return $val;
6+
return $var;
7+
}
8+
9+
function linkTable($label, $database, $table) {
10+
return '<a class="table" onclick="lookupTable(\''.$label.'\', \''.$database.'\', \''.$table.'\');">`'.$table.'`</a>';
11+
}

0 commit comments

Comments
 (0)