123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- /* vim: set expandtab sw=4 ts=4 sts=4: */
- /**
- * @fileoverview function used in QBE for DB
- * @name Database Operations
- *
- * @requires jQuery
- * @requires jQueryUI
- * @requires js/functions.js
- * @requires js/db_query_generator.js
- *
- */
- /**
- * js file for handling AJAX and other events in db_multi_table_query.php
- */
- /**
- * Unbind all event handlers before tearing down a page
- */
- AJAX.registerTeardown('db_multi_table_query.js', function () {
- $('.tableNameSelect').each(function () {
- $(this).off('change');
- });
- $('#update_query_button').off('click');
- $('#add_column_button').off('click');
- });
- AJAX.registerOnload('db_multi_table_query.js', function () {
- var editor = PMA_getSQLEditor($('#MultiSqlquery'), {}, 'both');
- $('.CodeMirror-line').css('text-align', 'left');
- editor.setSize(-1, 50);
- var column_count = 3;
- PMA_init_slider();
- addNewColumnCallbacks();
- $('#update_query_button').on('click', function () {
- var columns = [];
- var tableAliases = {};
- $('.tableNameSelect').each(function () {
- $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) {
- PMA_ajaxShowMessage('Nothing selected', false, 'error');
- return;
- }
- var foreignKeys;
- $.ajax({
- type: 'GET',
- async: false,
- url: 'db_multi_table_query.php',
- data: {
- 'server': sessionStorage.server,
- 'db': $('#db_name').val(),
- 'tables': Object.keys(tableAliases),
- 'ajax_request': '1',
- 'token': PMA_commonParams.get('token')
- },
- success: function (response) {
- foreignKeys = response.foreignKeyConstrains;
- }
- });
- query = 'SELECT ' + '`' + escapeBacktick(columns[0][0]) + '`.';
- if (columns[0][1] === '*') {
- query += '*';
- } else {
- query += '`' + escapeBacktick(columns[0][1]) + '`';
- }
- if (columns[0][2] !== '') {
- query += ' AS ' + columns[0][2];
- }
- for (var i = 1; i < columns.length; i++) {
- query += ', `' + escapeBacktick(columns[i][0]) + '`.';
- if (columns[i][1] === '*') {
- query += '*';
- } else {
- query += '`' + escapeBacktick(columns[i][1]) + '`';
- }
- if (columns[i][2] !== '') {
- query += ' AS `' + escapeBacktick(columns[0][2]) + '`';
- }
- }
- query += '\nFROM ';
- query += generateFromBlock(tableAliases, foreignKeys);
- $criteria_col_count = $('.criteria_col:checked').length;
- if ($criteria_col_count > 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 === '') {
- PMA_ajaxShowMessage(PMA_messages.strEmptyQuery, false, 'error');
- return;
- }
- var data = {
- 'db': $('#db_name').val(),
- 'sql_query': query,
- 'ajax_request': '1',
- 'token': PMA_commonParams.get('token')
- };
- $.ajax({
- type: 'POST',
- url: 'db_multi_table_query.php',
- data: data,
- success: function (data) {
- $results_dom = $(data.message);
- $results_dom.find('.ajax:not(.pageselector)').each(function () {
- $(this).on('click', function (event) {
- event.preventDefault();
- });
- });
- $results_dom.find('.autosubmit, .pageselector, .showAllRows, .filter_rows').each(function () {
- $(this).on('change click select focus', function (event) {
- event.preventDefault();
- });
- });
- $('#sql_results').html($results_dom);
- $('#page_content').find('a').first().click();
- }
- });
- });
- $('#add_column_button').on('click', function () {
- column_count++;
- $new_column_dom = $($('#new_column_layout').html()).clone();
- $new_column_dom.find('div').first().find('div').first().attr('id', column_count.toString());
- $new_column_dom.find('a').first().remove();
- $new_column_dom.find('.pma_auto_slider').first().unwrap();
- $new_column_dom.find('.pma_auto_slider').first().attr('title', 'criteria');
- $('#add_column_button').parent().before($new_column_dom);
- PMA_init_slider();
- addNewColumnCallbacks();
- });
- function addNewColumnCallbacks () {
- $('.tableNameSelect').each(function () {
- $(this).on('change', function () {
- $sibs = $(this).siblings('.columnNameSelect');
- if ($sibs.length === 0) {
- $sibs = $(this).parent().parent().find('.columnNameSelect');
- }
- $sibs.first().html($('#' + $.md5($(this).val())).html());
- });
- });
- $('.removeColumn').each(function () {
- $(this).on('click', function () {
- $(this).parent().remove();
- });
- });
- $('a.ajax').each(function () {
- $(this).on('click', function (event, from) {
- if (from === null) {
- $checkbox = $(this).siblings('.criteria_col').first();
- $checkbox.prop('checked', !$checkbox.prop('checked'));
- }
- $criteria_col_count = $('.criteria_col:checked').length;
- if ($criteria_col_count > 1) {
- $(this).siblings('.slide-wrapper').first().find('.logical_operator').first().css('display','table-row');
- }
- });
- });
- $('.criteria_col').each(function () {
- $(this).on('change', function () {
- $anchor = $(this).siblings('a.ajax').first();
- $anchor.trigger('click', ['Trigger']);
- });
- });
- $('.criteria_rhs').each(function () {
- $(this).on('change', function () {
- $rhs_col = $(this).parent().parent().siblings('.rhs_table').first();
- $rhs_text = $(this).parent().parent().siblings('.rhs_text').first();
- if ($(this).val() === 'text') {
- $rhs_col.css('display', 'none');
- $rhs_text.css('display', 'table-row');
- } else if ($(this).val() === 'anotherColumn') {
- $rhs_text.css('display', 'none');
- $rhs_col.css('display', 'table-row');
- } else {
- $rhs_text.css('display', 'none');
- $rhs_col.css('display', 'none');
- }
- });
- });
- }
- });
|