aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/js/database/query_generator.js
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-01-09 10:55:03 +0100
committerCharles <sircharlesaze@gmail.com>2020-01-09 13:09:38 +0100
commit04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch)
tree5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/js/database/query_generator.js
parent7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff)
downloadft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/js/database/query_generator.js')
-rw-r--r--srcs/phpmyadmin/js/database/query_generator.js131
1 files changed, 131 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/js/database/query_generator.js b/srcs/phpmyadmin/js/database/query_generator.js
new file mode 100644
index 0000000..854686c
--- /dev/null
+++ b/srcs/phpmyadmin/js/database/query_generator.js
@@ -0,0 +1,131 @@
+/* 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
+ *
+ */
+
+/* global sprintf */ // js/vendor/sprintf.js
+
+function getFormatsText () {
+ return {
+ '=': ' = \'%s\'',
+ '>': ' > \'%s\'',
+ '>=': ' >= \'%s\'',
+ '<': ' < \'%s\'',
+ '<=': ' <= \'%s\'',
+ '!=': ' != \'%s\'',
+ 'LIKE': ' LIKE \'%s\'',
+ 'LIKE %...%': ' LIKE \'%%%s%%\'',
+ 'NOT LIKE': ' NOT LIKE \'%s\'',
+ 'BETWEEN': ' BETWEEN \'%s\'',
+ 'NOT BETWEEN': ' NOT BETWEEN \'%s\'',
+ 'IS NULL': ' \'%s\' IS NULL',
+ 'IS NOT NULL': ' \'%s\' IS NOT NULL',
+ 'REGEXP': ' REGEXP \'%s\'',
+ 'REGEXP ^...$': ' REGEXP \'^%s$\'',
+ 'NOT REGEXP': ' NOT REGEXP \'%s\''
+ };
+}
+
+function generateCondition (criteriaDiv, table) {
+ var query = '`' + Functions.escapeBacktick(table.val()) + '`.';
+ query += '`' + Functions.escapeBacktick(table.siblings('.columnNameSelect').first().val()) + '`';
+ if (criteriaDiv.find('.criteria_rhs').first().val() === 'text') {
+ var formatsText = getFormatsText();
+ query += sprintf(formatsText[criteriaDiv.find('.criteria_op').first().val()], Functions.escapeSingleQuote(criteriaDiv.find('.rhs_text_val').first().val()));
+ } else {
+ query += ' ' + criteriaDiv.find('.criteria_op').first().val();
+ query += ' `' + Functions.escapeBacktick(criteriaDiv.find('.tableNameSelect').first().val()) + '`.';
+ query += '`' + Functions.escapeBacktick(criteriaDiv.find('.columnNameSelect').first().val()) + '`';
+ }
+ return query;
+}
+
+// eslint-disable-next-line no-unused-vars
+function generateWhereBlock () {
+ var count = 0;
+ var query = '';
+ $('.tableNameSelect').each(function () {
+ var criteriaDiv = $(this).siblings('.slide-wrapper').first();
+ var useCriteria = $(this).siblings('.criteria_col').first();
+ if ($(this).val() !== '' && useCriteria.prop('checked')) {
+ if (count > 0) {
+ criteriaDiv.find('input.logical_op').each(function () {
+ if ($(this).prop('checked')) {
+ query += ' ' + $(this).val() + ' ';
+ }
+ });
+ }
+ query += generateCondition(criteriaDiv, $(this));
+ count++;
+ }
+ });
+ return query;
+}
+
+function generateJoin (newTable, tableAliases, fk) {
+ var query = '';
+ query += ' \n\tLEFT JOIN ' + '`' + Functions.escapeBacktick(newTable) + '`';
+ if (tableAliases[fk.TABLE_NAME][0] !== '') {
+ query += ' AS `' + Functions.escapeBacktick(tableAliases[newTable][0]) + '`';
+ query += ' ON `' + Functions.escapeBacktick(tableAliases[fk.TABLE_NAME][0]) + '`';
+ } else {
+ query += ' ON `' + Functions.escapeBacktick(fk.TABLE_NAME) + '`';
+ }
+ query += '.`' + fk.COLUMN_NAME + '`';
+ if (tableAliases[fk.REFERENCED_TABLE_NAME][0] !== '') {
+ query += ' = `' + Functions.escapeBacktick(tableAliases[fk.REFERENCED_TABLE_NAME][0]) + '`';
+ } else {
+ query += ' = `' + Functions.escapeBacktick(fk.REFERENCED_TABLE_NAME) + '`';
+ }
+ query += '.`' + fk.REFERENCED_COLUMN_NAME + '`';
+ return query;
+}
+
+function existReference (table, fk, usedTables) {
+ var isReferredBy = fk.TABLE_NAME === table && usedTables.includes(fk.REFERENCED_TABLE_NAME);
+ var isReferencedBy = fk.REFERENCED_TABLE_NAME === table && usedTables.includes(fk.TABLE_NAME);
+ return isReferredBy || isReferencedBy;
+}
+
+function tryJoinTable (table, tableAliases, usedTables, foreignKeys) {
+ for (var i = 0; i < foreignKeys.length; i++) {
+ var fk = foreignKeys[i];
+ if (existReference(table, fk, usedTables)) {
+ return generateJoin(table, tableAliases, fk);
+ }
+ }
+ return '';
+}
+
+function appendTable (table, tableAliases, usedTables, foreignKeys) {
+ var query = tryJoinTable (table, tableAliases, usedTables, foreignKeys);
+ if (query === '') {
+ if (usedTables.length > 0) {
+ query += '\n\t, ';
+ }
+ query += '`' + Functions.escapeBacktick(table) + '`';
+ if (tableAliases[table][0] !== '') {
+ query += ' AS `' + Functions.escapeBacktick(tableAliases[table][0]) + '`';
+ }
+ }
+ usedTables.push(table);
+ return query;
+}
+
+// eslint-disable-next-line no-unused-vars
+function generateFromBlock (tableAliases, foreignKeys) {
+ var usedTables = [];
+ var query = '';
+ for (var table in tableAliases) {
+ if (tableAliases.hasOwnProperty(table)) {
+ query += appendTable(table, tableAliases, usedTables, foreignKeys);
+ }
+ }
+ return query;
+}