diff options
author | Nisarg Jhaveri <nisargjhaveri@gmail.com> | 2015-06-19 17:49:57 +0300 |
---|---|---|
committer | Nisarg Jhaveri <nisargjhaveri@gmail.com> | 2015-06-19 17:49:57 +0300 |
commit | 2a08016eab6622ba2fd61f50a14fb75c9b9ec813 (patch) | |
tree | 2bb1954e7e6d001e190d61d686590be00a2bdb0d /js/console.js | |
parent | 0676cd2c3067fdd60b8cf014c0dc1aca8dda17bb (diff) |
Ability to sort queries in console SQL debugging
Signed-off-by: Nisarg Jhaveri <nisargjhaveri@gmail.com>
Diffstat (limited to 'js/console.js')
-rw-r--r-- | js/console.js | 108 |
1 files changed, 103 insertions, 5 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)); } |