-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
44 lines (37 loc) · 1.31 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var qs = require('querystring'),
sqlparser = require('node-sqlparser');
var excludeFields = ['accessType', 'bom'];
// Converts AST to SQL
exports.stringify = require('./stringify');
// Converts SQL to AST
exports.parse = function(params) {
// If a string was passed, parse the querystring into an object
if(typeof params === 'string') {
params = qs.parse(params);
}
// Append simple filters to WHERE clause
var where = [];
if(params.$where) where.push(params.$where);
for(key in params) {
if(key.charAt(0) !== '$' && excludeFields.indexOf(key) === -1) {
where.push(whereEqual(key, params[key]));
}
}
params.$where = where.join(' AND ');
// Construct SQL string to be parsed
var sql = 'SELECT ' + (params.$select || '*');
if(params.$where) sql += ' WHERE ' + params.$where;
if(params.$group) sql += ' GROUP BY ' + params.$group;
if(params.$order) sql += ' ORDER BY ' + params.$order;
if(params.$limit) {
sql += ' LIMIT ';
if(params.$offset) sql += params.$offset + ', ';
sql += params.$limit;
}
return sqlparser.parse(sql);
};
function whereEqual (key, value) {
var sanitizedValue = value.replace(/^['"]|['"]$/g, '') // remove surrounding quotes
.replace(/\'/g, "\\'") // escape inner quotes
return key + " = '" + sanitizedValue + "'";
}