Skip to content

Commit 55f6f69

Browse files
author
Pavel Romanov
committed
Added possibility to create cyclic templates
1 parent f59b933 commit 55f6f69

File tree

2 files changed

+43
-3
lines changed

2 files changed

+43
-3
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"url": "git://github.com/Shikyaro/multi-data-source.git"
77
},
88
"license": "MIT",
9-
"version": "0.0.1",
9+
"version": "0.0.2",
1010
"scripts": {
1111
"autofix": "eslint --fix ."
1212
},

query/QueryTemplater.js

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const escapeParams = require('./escapeParams.js');
12
/**
23
* @class
34
*/
@@ -9,6 +10,40 @@ class QueryTemplater {
910
this.queryCache = new Map();
1011
}
1112

13+
/**
14+
* @param {String} query query
15+
* @param {String} addon addon
16+
* @param {*} buildParam buildParam
17+
* @param {Boolean} value value
18+
* @param {String} sql sql
19+
* @returns {string | void | *} built query
20+
* @private
21+
*/
22+
_processCommonTemplate(query, addon, buildParam, value, sql) {
23+
return query.replace(`{{${addon}}}`, !!buildParam === value ? sql : '');
24+
}
25+
26+
/**
27+
* @param {String} query query
28+
* @param {String} addon addon
29+
* @param {*} buildParam buildParam
30+
* @param {String} delimiter delimiter
31+
* @param {String} sql sql
32+
* @returns {string | void | *} built query
33+
* @private
34+
*/
35+
_processCyclicTemplate(query, addon, buildParam, delimiter, sql) {
36+
const replacementString = buildParam.reduce((res, paramObject, id) => {
37+
if (typeof (paramObject) === 'object') {
38+
res += ` ${id ? delimiter : ''} ${escapeParams(sql, paramObject)}`; // eslint-disable-line no-param-reassign
39+
}
40+
41+
return res;
42+
}, '');
43+
44+
return query.replace(`{{${addon}}}`, replacementString);
45+
}
46+
1247
/**
1348
* @param {String} name queryName
1449
* @param {Object} buildParams queryTemplateParams
@@ -24,8 +59,13 @@ class QueryTemplater {
2459
} else {
2560
builtQuery = sql;
2661
for (const add of Object.keys(addons)) {
27-
const {arg: {name, value}, sql} = addons[add];
28-
builtQuery = builtQuery.replace(`{{${add}}}`, !!buildParams[name] === value ? sql : '');
62+
const {arg: {name, value}, sql, delimiter} = addons[add];
63+
const param = buildParams[name];
64+
if (Array.isArray(param)) {
65+
builtQuery = this._processCyclicTemplate(builtQuery, add, param, delimiter, sql);
66+
} else {
67+
builtQuery = this._processCommonTemplate(builtQuery, add, param, value, sql);
68+
}
2969
}
3070
this.queryCache.set(queryKey, builtQuery);
3171
}

0 commit comments

Comments
 (0)