Merge pull request #1741 from nisargjhaveri/debug_console
Group/Ungroup queries in console SQL debug
This commit is contained in:
commit
72833685b7
151
js/console.js
151
js/console.js
@ -1100,6 +1100,13 @@ var PMA_consoleBookmarks = {
|
||||
};
|
||||
|
||||
var PMA_consoleDebug = {
|
||||
_config: {
|
||||
groupQueries: false
|
||||
},
|
||||
_lastDebugInfo: {
|
||||
debugInfo: null,
|
||||
url: null
|
||||
},
|
||||
initialize: function() {
|
||||
// Try to get debug info after every AJAX request
|
||||
$( document ).ajaxSuccess(function(event, xhr, settings, data) {
|
||||
@ -1108,6 +1115,29 @@ var PMA_consoleDebug = {
|
||||
}
|
||||
});
|
||||
|
||||
// Initialize config
|
||||
this._initConfig();
|
||||
|
||||
if (this.configParam('groupQueries')) {
|
||||
$('#debug_console').addClass('grouped');
|
||||
} else {
|
||||
$('#debug_console').addClass('ungrouped');
|
||||
}
|
||||
|
||||
// Initialize actions in toolbar
|
||||
$('#debug_console .button.group_queries').click(function() {
|
||||
$('#debug_console').addClass('grouped');
|
||||
$('#debug_console').removeClass('ungrouped');
|
||||
PMA_consoleDebug.configParam('groupQueries', true);
|
||||
PMA_consoleDebug.refresh();
|
||||
});
|
||||
$('#debug_console .button.ungroup_queries').click(function() {
|
||||
$('#debug_console').addClass('ungrouped');
|
||||
$('#debug_console').removeClass('grouped');
|
||||
PMA_consoleDebug.configParam('groupQueries', false);
|
||||
PMA_consoleDebug.refresh();
|
||||
});
|
||||
|
||||
// Show SQL debug info for first page load
|
||||
if (typeof debugSQLInfo !== 'undefined' && debugSQLInfo !== 'null') {
|
||||
$('#pma_console .button.debug').removeClass('hide');
|
||||
@ -1117,6 +1147,19 @@ var PMA_consoleDebug = {
|
||||
}
|
||||
PMA_consoleDebug.showLog(debugSQLInfo);
|
||||
},
|
||||
_initConfig: function() {
|
||||
var config = JSON.parse($.cookie('pma_console_dbg_config'));
|
||||
if (config) {
|
||||
this._config = config;
|
||||
}
|
||||
},
|
||||
configParam: function(name, value) {
|
||||
if (typeof value === 'undefined') {
|
||||
return this._config[name];
|
||||
}
|
||||
this._config[name] = value;
|
||||
$.cookie('pma_console_dbg_config', JSON.stringify(this._config));
|
||||
},
|
||||
_formatFunctionCall: function(dbgStep) {
|
||||
var functionName = '';
|
||||
if ('class' in dbgStep) {
|
||||
@ -1126,8 +1169,7 @@ var PMA_consoleDebug = {
|
||||
functionName += dbgStep.function;
|
||||
if (dbgStep.args.length) {
|
||||
functionName += '(...)';
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
functionName += '()';
|
||||
}
|
||||
return functionName;
|
||||
@ -1181,8 +1223,7 @@ var PMA_consoleDebug = {
|
||||
.append(
|
||||
$('<span>').text(step)
|
||||
);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if (typeof step.args === 'string' && step.args) {
|
||||
step.args = [step.args];
|
||||
}
|
||||
@ -1219,14 +1260,80 @@ var PMA_consoleDebug = {
|
||||
}
|
||||
return $traceElem;
|
||||
},
|
||||
_formatQueryOrGroup: function(queryInfo) {
|
||||
var grouped, queryText, totalTime, count, i;
|
||||
if (Array.isArray(queryInfo)) {
|
||||
// It is grouped
|
||||
grouped = true;
|
||||
|
||||
queryText = queryInfo[0].query;
|
||||
|
||||
totalTime = 0;
|
||||
for (i in queryInfo) {
|
||||
totalTime += queryInfo[i].time;
|
||||
}
|
||||
|
||||
count = queryInfo.length;
|
||||
} else {
|
||||
queryText = queryInfo.query;
|
||||
totalTime = queryInfo.time;
|
||||
}
|
||||
|
||||
var $query = $('<div class="message collapsed hide_trace">')
|
||||
.append(
|
||||
$('#debug_console .templates .debug_query').clone()
|
||||
)
|
||||
.append(
|
||||
$('<div class="query">')
|
||||
.text(queryText)
|
||||
);
|
||||
if (grouped) {
|
||||
$query.find('.text.count').removeClass('hide');
|
||||
$query.find('.text.count span').text(count);
|
||||
}
|
||||
$query.find('.text.time span').text(totalTime);
|
||||
|
||||
if (grouped) {
|
||||
var $singleQuery;
|
||||
for (i in queryInfo) {
|
||||
$singleQuery = $('<div class="message welcome trace">')
|
||||
.text( (parseInt(i) + 1) + '.' )
|
||||
.append(
|
||||
$('<span class="time">').text(
|
||||
PMA_messages.strConsoleDebugTimeTaken +
|
||||
' ' + queryInfo[i].time + 's'
|
||||
)
|
||||
);
|
||||
this._appendQueryExtraInfo(queryInfo[i], $singleQuery);
|
||||
$query
|
||||
.append('<div class="message welcome trace">')
|
||||
.append($singleQuery);
|
||||
}
|
||||
} else {
|
||||
this._appendQueryExtraInfo(queryInfo, $query);
|
||||
}
|
||||
|
||||
return $query;
|
||||
},
|
||||
_appendQueryExtraInfo: function(query, $elem) {
|
||||
if ('error' in query) {
|
||||
$elem.append(
|
||||
$('<div>').html(query.error)
|
||||
);
|
||||
}
|
||||
$elem.append(this._formatBackTrace(query.trace));
|
||||
},
|
||||
showLog: function(debugInfo, url) {
|
||||
this._lastDebugInfo.debugInfo = debugInfo;
|
||||
this._lastDebugInfo.url = url;
|
||||
|
||||
$('#debug_console .debugLog').empty();
|
||||
$("#debug_console .debug>.welcome").empty();
|
||||
|
||||
var debugJson = false;
|
||||
if (typeof debugInfo === "object" && 'queries' in debugInfo) {
|
||||
debugJson = debugInfo;
|
||||
}
|
||||
else if (typeof debugInfo === "string") {
|
||||
} else if (typeof debugInfo === "string") {
|
||||
try {
|
||||
debugJson = JSON.parse(debugInfo);
|
||||
} catch (e) {
|
||||
@ -1249,7 +1356,7 @@ var PMA_consoleDebug = {
|
||||
|
||||
// Calculate total time and make unique query array
|
||||
var totalTime = 0;
|
||||
var i, query;
|
||||
var i;
|
||||
for (i = 0; i < totalExec; ++i) {
|
||||
totalTime += allQueries[i].time;
|
||||
if (!(allQueries[i].hash in uniqueQueries)) {
|
||||
@ -1281,29 +1388,21 @@ var PMA_consoleDebug = {
|
||||
);
|
||||
}
|
||||
|
||||
for (i = 0; i < totalExec; ++i) {
|
||||
query = $('<div class="message collapsed hide_trace">')
|
||||
.append(
|
||||
$('<div class="action_content">')
|
||||
.append(
|
||||
$('#debug_console .templates .debug_query').clone()
|
||||
)
|
||||
)
|
||||
.append(
|
||||
$('<div class="query">')
|
||||
.text(allQueries[i].query)
|
||||
);
|
||||
query.find('.text.time span').text(allQueries[i].time);
|
||||
if ('error' in allQueries[i]) {
|
||||
query.append(
|
||||
$('<div>').html(allQueries[i].error)
|
||||
);
|
||||
if (this.configParam('groupQueries')) {
|
||||
for (i in uniqueQueries) {
|
||||
$('#debug_console .debugLog').append(this._formatQueryOrGroup(uniqueQueries[i]));
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < totalExec; ++i) {
|
||||
$('#debug_console .debugLog').append(this._formatQueryOrGroup(allQueries[i]));
|
||||
}
|
||||
query.append(this._formatBackTrace(allQueries[i].trace));
|
||||
$('#debug_console .debugLog').append(query);
|
||||
}
|
||||
|
||||
PMA_consoleMessages._msgEventBinds($('#debug_console .message:not(.binded)'));
|
||||
},
|
||||
refresh: function() {
|
||||
var last = this._lastDebugInfo;
|
||||
PMA_consoleDebug.showLog(last.debugInfo, last.url);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -593,6 +593,7 @@ $js_messages['strConsoleDebugSummary'] = __('%s queries executed %s times in %s
|
||||
$js_messages['strConsoleDebugArgsSummary'] = __('%s argument(s) passed');
|
||||
$js_messages['strConsoleDebugShowArgs'] = __('Show arguments');
|
||||
$js_messages['strConsoleDebugHideArgs'] = __('Hide arguments');
|
||||
$js_messages['strConsoleDebugTimeTaken'] = __('Time taken:');
|
||||
$js_messages['strNoLocalStorage'] = __('Your web browser does not support local storage of settings or the quota limit has been reached, some features may not work properly for you. In Safari, such problem is commonly caused by "Private Mode Browsing".');
|
||||
|
||||
echo "var PMA_messages = new Array();\n";
|
||||
|
||||
@ -272,22 +272,29 @@ class PMA_Console
|
||||
|
||||
// Debug SQL card
|
||||
$output .= '<div class="card" id="debug_console">';
|
||||
$output .= '<div class="toolbar"><div class="switch_button">'
|
||||
. '<span>' . __('Debug SQL') . '</span>'
|
||||
. '</div></div>'; // Toolbar
|
||||
$output .= '<div class="toolbar">'
|
||||
. '<div class="switch_button">'
|
||||
. '<span>' . __('Debug SQL') . '</span>'
|
||||
. '</div>'
|
||||
. '<div class="button group_queries">'
|
||||
. '<span>' . __('Group queries') . '</span>'
|
||||
. '</div>'
|
||||
. '<div class="button ungroup_queries">'
|
||||
. '<span>' . __('Ungroup queries') . '</span>'
|
||||
. '</div>'
|
||||
. '</div>'; // Toolbar
|
||||
$output .= '<div class="content debug">';
|
||||
$output .= '<div class="message welcome"></div>';
|
||||
$output .= '<div class="debugLog"></div>';
|
||||
$output .= '</div>'; // Content
|
||||
$output .= '<div class="templates">'
|
||||
. '<div class="debug_query">'
|
||||
. '<div class="debug_query action_content">'
|
||||
. '<span class="action collapse">' . __('Collapse') . '</span> '
|
||||
. '<span class="action expand">' . __('Expand') . '</span> '
|
||||
. '<span class="action dbg_show_trace">' . __('Show trace') . '</span> '
|
||||
. '<span class="action dbg_hide_trace">' . __('Hide trace') . '</span> '
|
||||
. '<span class="text time">' . __('Time taken:')
|
||||
. ' <span></span>s'
|
||||
. '</span>'
|
||||
. '<span class="text count hide">' . __('Count:') . ' <span></span></span>'
|
||||
. '<span class="text time">' . __('Time taken:') . ' <span></span>s</span>'
|
||||
. '</div>'
|
||||
. '</div>'; // Template
|
||||
$output .= '</div>'; // Debug SQL card
|
||||
|
||||
@ -142,7 +142,6 @@ class PMA_DatabaseInterface
|
||||
= '<span style="color:red">'
|
||||
. htmlspecialchars($error_message) . '</span>';
|
||||
}
|
||||
$dbgInfo['count'] = 1;
|
||||
$dbgInfo['query'] = htmlspecialchars($query);
|
||||
$dbgInfo['time'] = $time;
|
||||
// Get and slightly format backtrace
|
||||
|
||||
@ -2928,9 +2928,21 @@ html.ie7 #pma_console .query_input {
|
||||
margin: 0;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
#pma_console .button.debug.hide {
|
||||
#pma_console .button.hide,
|
||||
#pma_console .message span.text.hide {
|
||||
display: none;
|
||||
}
|
||||
#debug_console.grouped .ungroup_queries,
|
||||
#debug_console.ungrouped .group_queries {
|
||||
display: inline-block;
|
||||
}
|
||||
#debug_console.ungrouped .ungroup_queries,
|
||||
#debug_console.grouped .group_queries {
|
||||
display: none;
|
||||
}
|
||||
#debug_console .count {
|
||||
margin-right: 8px;
|
||||
}
|
||||
#debug_console .show_trace .trace,
|
||||
#debug_console .show_args .args {
|
||||
display: block;
|
||||
@ -2945,6 +2957,7 @@ html.ie7 #pma_console .query_input {
|
||||
}
|
||||
|
||||
#debug_console .traceStep:after,
|
||||
#debug_console .trace.welcome:after,
|
||||
#debug_console .debug>.welcome:after {
|
||||
content: "";
|
||||
display: table;
|
||||
@ -2953,6 +2966,9 @@ html.ie7 #pma_console .query_input {
|
||||
#debug_console .debug_summary {
|
||||
float: left;
|
||||
}
|
||||
#debug_console .trace.welcome .time {
|
||||
float: right;
|
||||
}
|
||||
#debug_console .traceStep .file,
|
||||
#debug_console .script_name {
|
||||
float: right;
|
||||
|
||||
@ -3250,9 +3250,21 @@ html.ie7 #pma_console .query_input {
|
||||
margin: 0;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
#pma_console .button.debug.hide {
|
||||
#pma_console .button.hide,
|
||||
#pma_console .message span.text.hide {
|
||||
display: none;
|
||||
}
|
||||
#debug_console.grouped .ungroup_queries,
|
||||
#debug_console.ungrouped .group_queries {
|
||||
display: inline-block;
|
||||
}
|
||||
#debug_console.ungrouped .ungroup_queries,
|
||||
#debug_console.grouped .group_queries {
|
||||
display: none;
|
||||
}
|
||||
#debug_console .count {
|
||||
margin-right: 8px;
|
||||
}
|
||||
#debug_console .show_trace .trace,
|
||||
#debug_console .show_args .args {
|
||||
display: block;
|
||||
@ -3267,6 +3279,7 @@ html.ie7 #pma_console .query_input {
|
||||
}
|
||||
|
||||
#debug_console .traceStep:after,
|
||||
#debug_console .trace.welcome:after,
|
||||
#debug_console .debug>.welcome:after {
|
||||
content: "";
|
||||
display: table;
|
||||
@ -3275,6 +3288,9 @@ html.ie7 #pma_console .query_input {
|
||||
#debug_console .debug_summary {
|
||||
float: left;
|
||||
}
|
||||
#debug_console .trace.welcome .time {
|
||||
float: right;
|
||||
}
|
||||
#debug_console .traceStep .file,
|
||||
#debug_console .script_name {
|
||||
float: right;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user