Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Delisle <marc@infomarc.info>2015-06-18 18:49:36 +0300
committerMarc Delisle <marc@infomarc.info>2015-06-18 18:49:36 +0300
commit72833685b7291bc178ffec5397ae627dbabcd2dd (patch)
treecd5e8885bb4847bfb9039492faec4160cc7abadc
parent8636f7ef29be60bd0149db30a769041d5f68f6fe (diff)
parentd608832a9dd539f7c78d28e5f7c6dd8f55510c91 (diff)
Merge pull request #1741 from nisargjhaveri/debug_console
Group/Ungroup queries in console SQL debug
-rw-r--r--js/console.js151
-rw-r--r--js/messages.php1
-rw-r--r--libraries/Console.class.php21
-rw-r--r--libraries/DatabaseInterface.class.php1
-rw-r--r--themes/original/css/common.css.php18
-rw-r--r--themes/pmahomme/css/common.css.php18
6 files changed, 174 insertions, 36 deletions
diff --git a/js/console.js b/js/console.js
index 3ca4f6431d..d32e7c1039 100644
--- a/js/console.js
+++ b/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);
}
};
diff --git a/js/messages.php b/js/messages.php
index a8617d75c9..dea5190b6a 100644
--- a/js/messages.php
+++ b/js/messages.php
@@ -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";
diff --git a/libraries/Console.class.php b/libraries/Console.class.php
index c7c58e8857..18c69f1556 100644
--- a/libraries/Console.class.php
+++ b/libraries/Console.class.php
@@ -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
diff --git a/libraries/DatabaseInterface.class.php b/libraries/DatabaseInterface.class.php
index 2db709a690..c585ebccde 100644
--- a/libraries/DatabaseInterface.class.php
+++ b/libraries/DatabaseInterface.class.php
@@ -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
diff --git a/themes/original/css/common.css.php b/themes/original/css/common.css.php
index 88be6f331e..4fb44873bf 100644
--- a/themes/original/css/common.css.php
+++ b/themes/original/css/common.css.php
@@ -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;
diff --git a/themes/pmahomme/css/common.css.php b/themes/pmahomme/css/common.css.php
index 2da9fd2d68..a21f66c7b4 100644
--- a/themes/pmahomme/css/common.css.php
+++ b/themes/pmahomme/css/common.css.php
@@ -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;