Skip to content

Instantly share code, notes, and snippets.

@jaheba
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jaheba/8957181 to your computer and use it in GitHub Desktop.
Save jaheba/8957181 to your computer and use it in GitHub Desktop.
var quoted = [
'"(?:[^"\\\\]|\\\\.)*"',
"'(?:[^'\\\\]|\\\\.)*'",
"`(?:[^`\\\\]|\\\\.)*`"
],
keywords = ['SELECT', 'FROM', 'DELETE FROM', 'INSERT INTO', 'UPDATE', 'JOIN',
'LEFT JOIN', 'INNER JOIN', 'ORDER BY', 'GROUP BY', 'HAVING', 'WHERE',
'LIMIT', 'VALUES', 'SET'],
values = [
'\\*',
'\\.',
'\\w+'
],
space = [
'\\s+'
],
operators = [
',',
'\\(',
'\\)',
'\\+',
'-',
'!=',
'<>',
'=',
'/',
'<',
'<=',
'>',
'>=',
';'
];
var tokenize = (function(){
_regex = function(){
var list = [quoted, keywords, space, values, operators, ['(.+)']]
var l2 = [];
for (var i=0; i<list.length; i++){
l2.push(
(list[i]).join('|')
)
}
console.debug(RegExp(l2.join('|'), 'gmi'))
return RegExp(l2.join('|'), 'gmi')
}();
return function(sql_string){
_regex.lastIndex = 0;
var tokens = [], match;
while(match = _regex.exec(sql_string)){
if(match[1]){
console.error("syntax error, invalid token ", match[1]);
return;
} else{
tokens.push(match[0]);
}
}
return tokens;
// sql_string.match(_regex)
// return _regex.exec(sql_string);
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment