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