Initial commit
This commit is contained in:
74
lib/assets/javascripts/builder/helpers/sql-utils.js
Executable file
74
lib/assets/javascripts/builder/helpers/sql-utils.js
Executable file
@@ -0,0 +1,74 @@
|
||||
/**
|
||||
* Checks properties from a SQL
|
||||
*/
|
||||
|
||||
var TableNameUtils = require('./table-name-utils');
|
||||
|
||||
module.exports = {
|
||||
isSameQuery: function (originalQuery, customQuery) {
|
||||
if (originalQuery == null || customQuery == null) { // eslint-disable-line
|
||||
throw new Error('Needed parameters not provided');
|
||||
}
|
||||
|
||||
var parseQuery = function (query) {
|
||||
return query
|
||||
.toLowerCase()
|
||||
.replace(/\"/g, '') // Remove quoted things like "pepe".tableName
|
||||
.replace(/;/g, '');
|
||||
};
|
||||
|
||||
return parseQuery(originalQuery) === parseQuery(customQuery);
|
||||
},
|
||||
|
||||
// return true if the sql query alters table schema in some way
|
||||
altersSchema: function (sql) {
|
||||
if (!sql) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Remove all line breaks in order to prevent
|
||||
// search pattern problems
|
||||
sql = this._removeLineBreaks(sql.trim());
|
||||
|
||||
return sql.search(/alter\s+[\w\."]+\s+/i) !== -1 ||
|
||||
sql.search(/drop\s+[\w\.\"]+/i) !== -1 ||
|
||||
sql.search(/^vacuum\s+[\w\.\"]+/i) !== -1 ||
|
||||
sql.search(/^create\s+[\w\.\"]+/i) !== -1 ||
|
||||
sql.search(/^reindex\s+[\w\.\"]+/i) !== -1 ||
|
||||
sql.search(/^grant\s+[\w\.\"]+/i) !== -1 ||
|
||||
sql.search(/^revoke\s+[\w\.\"]+/i) !== -1 ||
|
||||
sql.search(/^cluster\s+[\w\.\"]+/i) !== -1 ||
|
||||
sql.search(/^comment\s+on\s+[\w\.\"]+/i) !== -1 ||
|
||||
sql.search(/^explain\s+[\w\.\"]+/i) !== -1;
|
||||
},
|
||||
|
||||
// return true if the sql query alters table data
|
||||
altersData: function (sql) {
|
||||
if (!sql) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Remove all line breaks in order to prevent
|
||||
// search pattern problems
|
||||
sql = this._removeLineBreaks(sql.trim());
|
||||
|
||||
return this.altersSchema(sql) ||
|
||||
sql.search(/^refresh\s+materialized\s+view\s+[\w\.\"]+/i) !== -1 ||
|
||||
sql.search(/^truncate\s+[\w\.\"]+/i) !== -1 ||
|
||||
sql.search(/insert\s+into/i) !== -1 ||
|
||||
sql.search(/update\s+[\w\.\-"]+\s+.*set/i) !== -1 ||
|
||||
sql.search(/delete\s+from/i) !== -1;
|
||||
},
|
||||
|
||||
_removeLineBreaks: function (sql) {
|
||||
return sql.replace(/\r?\n|\r/g, ' ');
|
||||
},
|
||||
|
||||
getDefaultSQL: function (tableName, userName, inOrganization) {
|
||||
return this.getDefaultSQLFromTableName(TableNameUtils.getQualifiedTableName(tableName, userName, inOrganization));
|
||||
},
|
||||
|
||||
getDefaultSQLFromTableName: function (tableName) {
|
||||
return 'SELECT * FROM ' + tableName;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user