Skip to content

Commit 3383fbb

Browse files
committed
initial commit
0 parents  commit 3383fbb

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

index.js

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
2+
var quote = function(data) {
3+
if (typeof data == 'string')
4+
return "'" + data + "'";
5+
return "'"+JSON.stringify(data)+"'"
6+
}
7+
8+
var convertWrapper = function (prefix, query) {
9+
return convert([prefix], query);
10+
}
11+
12+
var convert = function (prefix, query) {
13+
if (typeof query == 'object' && !Array.isArray(query)) {
14+
str = ''
15+
for (key in query) {
16+
if (str != '') {
17+
str += ' and ';
18+
}
19+
20+
if (key == '$or') {
21+
str += '('+query[key].map(function(subquery) {return convert(prefix, subquery) })
22+
.join(' OR ')+')';
23+
} else {
24+
//key = key.replace(/\\./g, '->');
25+
if (typeof query[key] == 'object') {
26+
str += convert(prefix+'->'+ "'"+key+"'", query[key]);
27+
} else {
28+
str += '('+convert(prefix+'->>'+ "'"+key+"'", query[key])+')';
29+
}
30+
}
31+
}
32+
return str
33+
} else {
34+
if (Array.isArray(query)) {
35+
return
36+
} else {
37+
return prefix + '=' + quote(query);
38+
}
39+
}
40+
}
41+
42+
module.exports = convertWrapper;

test.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const assert = require('assert');
2+
var convert = require('./index')
3+
4+
console.log(convert('data', {name: 'thomas'}));
5+
assert(convert('data', {name: 'thomas'}) == "(data->>'name'='thomas')")
6+
7+
console.log(convert('data', {$or: [{name: 'thomas'}, {name: 'hansen'}] }));
8+
9+
console.log(convert('data', {fullName: 'TH', $or: [{name: 'thomas'}, {name: 'hansen'}] }));
10+
console.log(convert('data', {test: {cat: {name: "oscar"}} }));
11+
console.log(convert('data', {'test.cat.name': "oscar"}));
12+
console.log(convert('data', {'roles': ['Admin']}));

0 commit comments

Comments
 (0)