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:
authorNisarg Jhaveri <nisargjhaveri@gmail.com>2015-06-19 17:49:57 +0300
committerNisarg Jhaveri <nisargjhaveri@gmail.com>2015-06-19 17:49:57 +0300
commit2a08016eab6622ba2fd61f50a14fb75c9b9ec813 (patch)
tree2bb1954e7e6d001e190d61d686590be00a2bdb0d
parent0676cd2c3067fdd60b8cf014c0dc1aca8dda17bb (diff)
Ability to sort queries in console SQL debugging
Signed-off-by: Nisarg Jhaveri <nisargjhaveri@gmail.com>
-rw-r--r--js/console.js108
-rw-r--r--libraries/Console.class.php21
-rw-r--r--themes/original/css/common.css.php14
-rw-r--r--themes/pmahomme/css/common.css.php14
4 files changed, 146 insertions, 11 deletions
diff --git a/js/console.js b/js/console.js
index ec32f252df..079823316c 100644
--- a/js/console.js
+++ b/js/console.js
@@ -1101,7 +1101,9 @@ var PMA_consoleBookmarks = {
var PMA_consoleDebug = {
_config: {
- groupQueries: false
+ groupQueries: false,
+ orderBy: 'exec', // Possible 'exec' => Execution order, 'time' => Time taken, 'count'
+ order: 'asc' // Possible 'asc', 'desc'
},
_lastDebugInfo: {
debugInfo: null,
@@ -1122,7 +1124,14 @@ var PMA_consoleDebug = {
$('#debug_console').addClass('grouped');
} else {
$('#debug_console').addClass('ungrouped');
+ if (PMA_consoleDebug.configParam('orderBy') == 'count') {
+ $('#debug_console .button.order_by.sort_exec').addClass('active');
+ }
}
+ var orderBy = this.configParam('orderBy');
+ var order = this.configParam('order');
+ $('#debug_console .button.order_by.sort_' + orderBy).addClass('active');
+ $('#debug_console .button.order.order_' + order).addClass('active');
// Initialize actions in toolbar
$('#debug_console .button.group_queries').click(function() {
@@ -1130,12 +1139,42 @@ var PMA_consoleDebug = {
$('#debug_console').removeClass('ungrouped');
PMA_consoleDebug.configParam('groupQueries', true);
PMA_consoleDebug.refresh();
+ if (PMA_consoleDebug.configParam('orderBy') == 'count') {
+ $('#debug_console .button.order_by.sort_exec').removeClass('active');
+ }
});
$('#debug_console .button.ungroup_queries').click(function() {
$('#debug_console').addClass('ungrouped');
$('#debug_console').removeClass('grouped');
PMA_consoleDebug.configParam('groupQueries', false);
PMA_consoleDebug.refresh();
+ if (PMA_consoleDebug.configParam('orderBy') == 'count') {
+ $('#debug_console .button.order_by.sort_exec').addClass('active');
+ }
+ });
+ $('#debug_console .button.order_by').click(function() {
+ var $this = $(this);
+ $('#debug_console .button.order_by').removeClass('active');
+ $this.addClass('active');
+ if ($this.hasClass('sort_time')) {
+ PMA_consoleDebug.configParam('orderBy', 'time');
+ } else if ($this.hasClass('sort_exec')) {
+ PMA_consoleDebug.configParam('orderBy', 'exec');
+ } else if ($this.hasClass('sort_count')) {
+ PMA_consoleDebug.configParam('orderBy', 'count');
+ }
+ PMA_consoleDebug.refresh();
+ });
+ $('#debug_console .button.order').click(function() {
+ var $this = $(this);
+ $('#debug_console .button.order').removeClass('active');
+ $this.addClass('active');
+ if ($this.hasClass('order_asc')) {
+ PMA_consoleDebug.configParam('order', 'asc');
+ } else if ($this.hasClass('order_desc')) {
+ PMA_consoleDebug.configParam('order', 'desc');
+ }
+ PMA_consoleDebug.refresh();
});
// Show SQL debug info for first page load
@@ -1150,7 +1189,11 @@ var PMA_consoleDebug = {
_initConfig: function() {
var config = JSON.parse($.cookie('pma_console_dbg_config'));
if (config) {
- this._config = config;
+ for (var name in config) {
+ if (config.hasOwnProperty(name)) {
+ this._config[name] = config[name];
+ }
+ }
}
},
configParam: function(name, value) {
@@ -1159,6 +1202,7 @@ var PMA_consoleDebug = {
}
this._config[name] = value;
$.cookie('pma_console_dbg_config', JSON.stringify(this._config));
+ return value;
},
_formatFunctionCall: function(dbgStep) {
var functionName = '';
@@ -1333,7 +1377,15 @@ var PMA_consoleDebug = {
var debugJson = false;
if (typeof debugInfo === "object" && 'queries' in debugInfo) {
- debugJson = debugInfo;
+ // Copy it to debugJson, so that it doesn't get changed
+ if (!('queries' in debugInfo)) {
+ debugJson = false;
+ } else {
+ debugJson = {queries: []};
+ for (var i in debugInfo.queries) {
+ debugJson.queries[i] = debugInfo.queries[i];
+ }
+ }
} else if (typeof debugInfo === "string") {
try {
debugJson = JSON.parse(debugInfo);
@@ -1365,13 +1417,15 @@ var PMA_consoleDebug = {
}
uniqueQueries[allQueries[i].hash].push(allQueries[i]);
}
- // Count total unique queries
- var totalUnique = 0;
+ // Count total unique queries, convert uniqueQueries to Array
+ var totalUnique = 0, uniqueArray = [];
for (var hash in uniqueQueries) {
if (uniqueQueries.hasOwnProperty(hash)) {
++totalUnique;
+ uniqueArray.push(uniqueQueries[hash]);
}
}
+ uniqueQueries = uniqueArray;
// Show summary
$("#debug_console .debug>.welcome").append(
$('<span class="debug_summary">').text(
@@ -1389,11 +1443,55 @@ var PMA_consoleDebug = {
);
}
+ // For sorting queries
+ function sortByTime(a, b) {
+ var order = ((PMA_consoleDebug.configParam('order') == 'asc') ? 1 : -1);
+ if (Array.isArray(a) && Array.isArray(b)) {
+ // It is grouped
+ var timeA = 0, timeB = 0;
+ for (i in a) {
+ timeA += a[i].time;
+ }
+ for (i in b) {
+ timeB += b[i].time;
+ }
+ return (timeA - timeB) * order;
+ } else {
+ return (a.time - b.time) * order;
+ }
+ }
+
+ function sortByCount(a, b) {
+ var order = ((PMA_consoleDebug.configParam('order') == 'asc') ? 1 : -1);
+ return (a.length - b.length) * order;
+ }
+
+ var orderBy = this.configParam('orderBy');
+ var order = PMA_consoleDebug.configParam('order');
+
if (this.configParam('groupQueries')) {
+ // Sort queries
+ if (orderBy == 'time') {
+ uniqueQueries.sort(sortByTime);
+ } else if (orderBy == 'count') {
+ uniqueQueries.sort(sortByCount);
+ } else if (orderBy == 'exec' && order == 'desc') {
+ uniqueQueries.reverse();
+ }
for (i in uniqueQueries) {
+ if (orderBy == 'time') {
+ uniqueQueries[i].sort(sortByTime);
+ } else if (orderBy == 'exec' && order == 'desc') {
+ uniqueQueries[i].reverse();
+ }
$('#debug_console .debugLog').append(this._formatQueryOrGroup(uniqueQueries[i], totalTime));
}
} else {
+ if (orderBy == 'time') {
+ allQueries.sort(sortByTime);
+ } else if (order == 'desc') {
+ allQueries.reverse();
+ }
for (i = 0; i < totalExec; ++i) {
$('#debug_console .debugLog').append(this._formatQueryOrGroup(allQueries[i], totalTime));
}
diff --git a/libraries/Console.class.php b/libraries/Console.class.php
index ccd3bb0828..c7dac46bcc 100644
--- a/libraries/Console.class.php
+++ b/libraries/Console.class.php
@@ -273,9 +273,30 @@ class PMA_Console
// Debug SQL card
$output .= '<div class="card" id="debug_console">';
$output .= '<div class="toolbar">'
+ . '<div class="button order order_asc">'
+ . '<span>' . __('ASC') . '</span>'
+ . '</div>'
+ . '<div class="button order order_desc">'
+ . '<span>' . __('DESC') . '</span>'
+ . '</div>'
+ . '<div class="text">'
+ . '<span>' . __('Order:') . '</span>'
+ . '</div>'
. '<div class="switch_button">'
. '<span>' . __('Debug SQL') . '</span>'
. '</div>'
+ . '<div class="button order_by sort_count">'
+ . '<span>' . __('Count') . '</span>'
+ . '</div>'
+ . '<div class="button order_by sort_exec">'
+ . '<span>' . __('Execution order') . '</span>'
+ . '</div>'
+ . '<div class="button order_by sort_time">'
+ . '<span>' . __('Time taken') . '</span>'
+ . '</div>'
+ . '<div class="text">'
+ . '<span>' . __('Order by:') . '</span>'
+ . '</div>'
. '<div class="button group_queries">'
. '<span>' . __('Group queries') . '</span>'
. '</div>'
diff --git a/themes/original/css/common.css.php b/themes/original/css/common.css.php
index 4fb44873bf..c49416a595 100644
--- a/themes/original/css/common.css.php
+++ b/themes/original/css/common.css.php
@@ -2701,6 +2701,7 @@ table.show_create td {
#pma_console .message span.text,
#pma_console .message span.action,
#pma_console .toolbar .button,
+#pma_console .toolbar .text,
#pma_console .switch_button {
padding: 0 3px;
display: inline-block;
@@ -2712,13 +2713,19 @@ table.show_create td {
}
#pma_console .message span.action:hover,
#pma_console .toolbar .button:hover,
-#pma_console .switch_button:hover {
+#pma_console .switch_button:hover,
+#pma_console .toolbar .button.active {
background: #ddd;
}
-#pma_console .toolbar .button {
+#pma_console .toolbar .text {
+ font-weight: bold;
+}
+#pma_console .toolbar .button,
+#pma_console .toolbar .text {
margin-<?php echo $right; ?>: .4em;
}
-#pma_console .toolbar .button {
+#pma_console .toolbar .button,
+#pma_console .toolbar .text {
float: <?php echo $right; ?>;
}
#pma_console .content {
@@ -2937,6 +2944,7 @@ html.ie7 #pma_console .query_input {
display: inline-block;
}
#debug_console.ungrouped .ungroup_queries,
+#debug_console.ungrouped .sort_count,
#debug_console.grouped .group_queries {
display: none;
}
diff --git a/themes/pmahomme/css/common.css.php b/themes/pmahomme/css/common.css.php
index a21f66c7b4..501c589db2 100644
--- a/themes/pmahomme/css/common.css.php
+++ b/themes/pmahomme/css/common.css.php
@@ -3023,6 +3023,7 @@ table.show_create td {
#pma_console .message span.text,
#pma_console .message span.action,
#pma_console .toolbar .button,
+#pma_console .toolbar .text,
#pma_console .switch_button {
padding: 0 3px;
display: inline-block;
@@ -3034,13 +3035,19 @@ table.show_create td {
}
#pma_console .message span.action:hover,
#pma_console .toolbar .button:hover,
-#pma_console .switch_button:hover {
+#pma_console .switch_button:hover,
+#pma_console .toolbar .button.active {
background: #ddd;
}
-#pma_console .toolbar .button {
+#pma_console .toolbar .text {
+ font-weight: bold;
+}
+#pma_console .toolbar .button,
+#pma_console .toolbar .text {
margin-<?php echo $right; ?>: .4em;
}
-#pma_console .toolbar .button {
+#pma_console .toolbar .button,
+#pma_console .toolbar .text {
float: <?php echo $right; ?>;
}
#pma_console .content {
@@ -3259,6 +3266,7 @@ html.ie7 #pma_console .query_input {
display: inline-block;
}
#debug_console.ungrouped .ungroup_queries,
+#debug_console.ungrouped .sort_count,
#debug_console.grouped .group_queries {
display: none;
}