Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
7b5a25fafc
@ -59,6 +59,7 @@ phpMyAdmin - ChangeLog
|
||||
+ rfe #1541 Disable foreign key checks for some operations
|
||||
- bug #4957 "With selected" links doesn't work in table browse
|
||||
- bug #4795 Query builder: missing joint for the intermediary table
|
||||
+ rfe #1551 Integrate SQL debugging into console
|
||||
|
||||
4.4.11.0 (not yet released)
|
||||
|
||||
|
||||
108
js/console.js
108
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));
|
||||
}
|
||||
|
||||
@ -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>'
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user