Update website
This commit is contained in:
parent
4413528994
commit
1d90fbf296
6865 changed files with 1091082 additions and 0 deletions
207
admin/phpMyAdmin/js/dist/database/multi_table_query.js
vendored
Normal file
207
admin/phpMyAdmin/js/dist/database/multi_table_query.js
vendored
Normal file
|
@ -0,0 +1,207 @@
|
|||
/**
|
||||
* @fileoverview function used in QBE for DB
|
||||
* @name Database Operations
|
||||
*
|
||||
* @requires jQuery
|
||||
* @requires jQueryUI
|
||||
* @requires js/functions.js
|
||||
* @requires js/database/query_generator.js
|
||||
*
|
||||
*/
|
||||
|
||||
/* global generateFromBlock, generateWhereBlock */ // js/database/query_generator.js
|
||||
|
||||
/**
|
||||
* js file for handling AJAX and other events in /database/multi-table-query
|
||||
*/
|
||||
|
||||
/**
|
||||
* Unbind all event handlers before tearing down a page
|
||||
*/
|
||||
AJAX.registerTeardown('database/multi_table_query.js', function () {
|
||||
$('.tableNameSelect').each(function () {
|
||||
$(this).off('change');
|
||||
});
|
||||
$('#update_query_button').off('click');
|
||||
$('#add_column_button').off('click');
|
||||
});
|
||||
AJAX.registerOnload('database/multi_table_query.js', function () {
|
||||
var editor = Functions.getSqlEditor($('#MultiSqlquery'), {}, 'both');
|
||||
$('.CodeMirror-line').css('text-align', 'left');
|
||||
editor.setSize(-1, 50);
|
||||
var columnCount = 3;
|
||||
addNewColumnCallbacks();
|
||||
$('#update_query_button').on('click', function () {
|
||||
var columns = [];
|
||||
var tableAliases = {};
|
||||
$('.tableNameSelect').each(function () {
|
||||
var $show = $(this).siblings('.show_col').first();
|
||||
if ($(this).val() !== '' && $show.prop('checked')) {
|
||||
var tableAlias = $(this).siblings('.table_alias').first().val();
|
||||
var columnAlias = $(this).siblings('.col_alias').first().val();
|
||||
if (tableAlias !== '') {
|
||||
columns.push([tableAlias, $(this).siblings('.columnNameSelect').first().val()]);
|
||||
} else {
|
||||
columns.push([$(this).val(), $(this).siblings('.columnNameSelect').first().val()]);
|
||||
}
|
||||
columns[columns.length - 1].push(columnAlias);
|
||||
if ($(this).val() in tableAliases) {
|
||||
if (!tableAliases[$(this).val()].includes(tableAlias)) {
|
||||
tableAliases[$(this).val()].push(tableAlias);
|
||||
}
|
||||
} else {
|
||||
tableAliases[$(this).val()] = [tableAlias];
|
||||
}
|
||||
}
|
||||
});
|
||||
if (Object.keys(tableAliases).length === 0) {
|
||||
Functions.ajaxShowMessage('Nothing selected', false, 'error');
|
||||
return;
|
||||
}
|
||||
var foreignKeys;
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
async: false,
|
||||
url: 'index.php?route=/database/multi-table-query/tables',
|
||||
data: {
|
||||
'server': sessionStorage.server,
|
||||
'db': $('#db_name').val(),
|
||||
'tables': Object.keys(tableAliases),
|
||||
'ajax_request': '1',
|
||||
'token': CommonParams.get('token')
|
||||
},
|
||||
success: function (response) {
|
||||
foreignKeys = response.foreignKeyConstrains;
|
||||
}
|
||||
});
|
||||
var query = 'SELECT ' + '`' + Functions.escapeBacktick(columns[0][0]) + '`.';
|
||||
if (columns[0][1] === '*') {
|
||||
query += '*';
|
||||
} else {
|
||||
query += '`' + Functions.escapeBacktick(columns[0][1]) + '`';
|
||||
}
|
||||
if (columns[0][2] !== '') {
|
||||
query += ' AS `' + Functions.escapeBacktick(columns[0][2]) + '`';
|
||||
}
|
||||
for (var i = 1; i < columns.length; i++) {
|
||||
query += ', `' + Functions.escapeBacktick(columns[i][0]) + '`.';
|
||||
if (columns[i][1] === '*') {
|
||||
query += '*';
|
||||
} else {
|
||||
query += '`' + Functions.escapeBacktick(columns[i][1]) + '`';
|
||||
}
|
||||
if (columns[i][2] !== '') {
|
||||
query += ' AS `' + Functions.escapeBacktick(columns[i][2]) + '`';
|
||||
}
|
||||
}
|
||||
query += '\nFROM ';
|
||||
query += generateFromBlock(tableAliases, foreignKeys);
|
||||
var $criteriaColCount = $('.criteria_col:checked').length;
|
||||
if ($criteriaColCount > 0) {
|
||||
query += '\nWHERE ';
|
||||
query += generateWhereBlock();
|
||||
}
|
||||
query += ';';
|
||||
editor.getDoc().setValue(query);
|
||||
});
|
||||
$('#submit_query').on('click', function () {
|
||||
var query = editor.getDoc().getValue();
|
||||
// Verifying that the query is not empty
|
||||
if (query === '') {
|
||||
Functions.ajaxShowMessage(Messages.strEmptyQuery, false, 'error');
|
||||
return;
|
||||
}
|
||||
var data = {
|
||||
'db': $('#db_name').val(),
|
||||
'sql_query': query,
|
||||
'ajax_request': '1',
|
||||
'server': CommonParams.get('server'),
|
||||
'token': CommonParams.get('token')
|
||||
};
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: 'index.php?route=/database/multi-table-query/query',
|
||||
data: data,
|
||||
success: function (data) {
|
||||
var $resultsDom = $(data.message);
|
||||
$resultsDom.find('.ajax:not(.pageselector)').each(function () {
|
||||
$(this).on('click', function (event) {
|
||||
event.preventDefault();
|
||||
});
|
||||
});
|
||||
$resultsDom.find('.autosubmit, .pageselector, .showAllRows, .filter_rows').each(function () {
|
||||
$(this).on('change click select focus', function (event) {
|
||||
event.preventDefault();
|
||||
});
|
||||
});
|
||||
$('#sql_results').html($resultsDom);
|
||||
$('#slide-handle').trigger('click'); // Collapse search criteria area
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#add_column_button').on('click', function () {
|
||||
columnCount++;
|
||||
var $newColumnDom = $($('#new_column_layout').html()).clone();
|
||||
$newColumnDom.find('.jsCriteriaButton').first().attr('data-bs-target', '#criteriaOptionsExtra' + columnCount.toString());
|
||||
$newColumnDom.find('.jsCriteriaButton').first().attr('aria-controls', 'criteriaOptionsExtra' + columnCount.toString());
|
||||
$newColumnDom.find('.jsCriteriaOptions').first().attr('id', 'criteriaOptionsExtra' + columnCount.toString());
|
||||
$('#add_column_button').parent().before($newColumnDom);
|
||||
addNewColumnCallbacks();
|
||||
});
|
||||
function addNewColumnCallbacks() {
|
||||
$('.tableNameSelect').each(function () {
|
||||
$(this).on('change', function () {
|
||||
var $sibs = $(this).siblings('.columnNameSelect');
|
||||
if ($sibs.length === 0) {
|
||||
$sibs = $(this).parent().parent().find('.columnNameSelect');
|
||||
}
|
||||
$sibs.first().html($('#' + $(this).find(':selected').data('hash')).html());
|
||||
});
|
||||
});
|
||||
$('.jsRemoveColumn').each(function () {
|
||||
$(this).on('click', function () {
|
||||
$(this).parent().remove();
|
||||
});
|
||||
});
|
||||
$('.jsCriteriaButton').each(function () {
|
||||
$(this).on('click', function (event, from) {
|
||||
if (from === null) {
|
||||
var $checkbox = $(this).siblings('.criteria_col').first();
|
||||
$checkbox.prop('checked', !$checkbox.prop('checked'));
|
||||
}
|
||||
var $criteriaColCount = $('.criteria_col:checked').length;
|
||||
if ($criteriaColCount > 1) {
|
||||
$(this).siblings('.jsCriteriaOptions').first().find('.logical_operator').first().css('display', 'table-row');
|
||||
}
|
||||
});
|
||||
});
|
||||
$('.criteria_col').each(function () {
|
||||
$(this).on('change', function () {
|
||||
var $anchor = $(this).siblings('.jsCriteriaButton').first();
|
||||
if ($(this).is(':checked') && !$anchor.hasClass('collapsed')) {
|
||||
// Do not collapse on checkbox tick as it does not make sense
|
||||
// The user has it open and wants to tick the box
|
||||
return;
|
||||
}
|
||||
$anchor.trigger('click', ['Trigger']);
|
||||
});
|
||||
});
|
||||
$('.criteria_rhs').each(function () {
|
||||
$(this).on('change', function () {
|
||||
var $rhsCol = $(this).parent().parent().siblings('.rhs_table').first();
|
||||
var $rhsText = $(this).parent().parent().siblings('.rhs_text').first();
|
||||
if ($(this).val() === 'text') {
|
||||
$rhsCol.css('display', 'none');
|
||||
$rhsText.css('display', 'table-row');
|
||||
} else if ($(this).val() === 'anotherColumn') {
|
||||
$rhsText.css('display', 'none');
|
||||
$rhsCol.css('display', 'table-row');
|
||||
} else {
|
||||
$rhsText.css('display', 'none');
|
||||
$rhsCol.css('display', 'none');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue