aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/js/database/multi_table_query.js
diff options
context:
space:
mode:
Diffstat (limited to 'srcs/phpmyadmin/js/database/multi_table_query.js')
-rw-r--r--srcs/phpmyadmin/js/database/multi_table_query.js222
1 files changed, 222 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/js/database/multi_table_query.js b/srcs/phpmyadmin/js/database/multi_table_query.js
new file mode 100644
index 0000000..34b793c
--- /dev/null
+++ b/srcs/phpmyadmin/js/database/multi_table_query.js
@@ -0,0 +1,222 @@
+/* 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/database/query_generator.js
+ *
+ */
+
+/* global generateFromBlock, generateWhereBlock */ // js/database/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('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;
+ Functions.initSlider();
+ 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: 'db_multi_table_query.php',
+ 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 ' + 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[0][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',
+ 'token': CommonParams.get('token')
+ };
+ $.ajax({
+ type: 'POST',
+ url: 'db_multi_table_query.php',
+ 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);
+ $('#page_content').find('a').first().trigger('click');
+ }
+ });
+ });
+
+ $('#add_column_button').on('click', function () {
+ columnCount++;
+ var $newColumnDom = $($('#new_column_layout').html()).clone();
+ $newColumnDom.find('div').first().find('div').first().attr('id', columnCount.toString());
+ $newColumnDom.find('a').first().remove();
+ $newColumnDom.find('.pma_auto_slider').first().unwrap();
+ $newColumnDom.find('.pma_auto_slider').first().attr('title', 'criteria');
+ $('#add_column_button').parent().before($newColumnDom);
+ Functions.initSlider();
+ 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($('#' + $.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) {
+ var $checkbox = $(this).siblings('.criteria_col').first();
+ $checkbox.prop('checked', !$checkbox.prop('checked'));
+ }
+ var $criteriaColCount = $('.criteria_col:checked').length;
+ if ($criteriaColCount > 1) {
+ $(this).siblings('.slide-wrapper').first().find('.logical_operator').first().css('display','table-row');
+ }
+ });
+ });
+
+ $('.criteria_col').each(function () {
+ $(this).on('change', function () {
+ var $anchor = $(this).siblings('a.ajax').first();
+ $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');
+ }
+ });
+ });
+ }
+});