File: //usr/share/opensearch-dashboards/node_modules/sql-summary/index.js
'use strict'
var whitespace = /[\s;]+/g
var borderChars = /([;()])/g
module.exports = function (sql) {
if (!sql) return ''
var tokens = tokenize(sql)
return stipTokens(tokens).join(' ')
}
function stipTokens (tokens) {
var verb = tokens[0].toUpperCase()
return [verb]
.concat(afterVerb(tokens))
.filter(function (token) { return !!token })
}
function afterVerb (tokens) {
switch (tokens[0].toUpperCase()) {
case 'SELECT': return afterToken('FROM', tokens)
case 'INSERT': return afterToken('INTO', tokens)
case 'UPDATE': return tokens[1]
case 'DELETE': return afterToken('FROM', tokens)
case 'CREATE': return afterToken(['DATABASE', 'TABLE', 'INDEX'], tokens)
case 'DROP': return afterToken(['DATABASE', 'TABLE'], tokens)
case 'ALTER': return afterToken('TABLE', tokens)
case 'DESC': return tokens[1]
case 'TRUNCATE': return afterToken('TABLE', tokens)
case 'USE': return tokens[1]
}
}
function afterToken (find, tokens) {
var index
if (!Array.isArray(find)) find = [find]
find = find.map(function (find) { return find.toUpperCase() })
for (var n = 0, l = tokens.length - 1; n < l; n++) {
index = find.indexOf(tokens[n].toUpperCase())
if (index !== -1) return [find[index], tokens[n + 1]]
}
}
function tokenize (sql) {
return normalize(sql).split(' ')
}
function normalize (sql) {
return sql.replace(borderChars, ' $1 ').replace(whitespace, ' ').trim()
}