@@ -63,7 +63,7 @@ class QueryGenerator {
6363 }
6464
6565 static selectParamsGetter ( propertiesInfo , limit ) {
66- let scriptText = '(function getParametersSelect(doc, docInfo) {\n' ;
66+ let scriptText = '(function getParametersSelect(doc, docInfo, mappingInfo ) {\n' ;
6767 scriptText += ' return [' ;
6868
6969 scriptText += QueryGenerator . _valueGetterExpression ( propertiesInfo ) ;
@@ -78,8 +78,8 @@ class QueryGenerator {
7878 // Finish return statement
7979 scriptText += '];\n})' ;
8080
81- const script = new vm . Script ( scriptText ) ;
82- return script . runInThisContext ( { filename : vmFileName } ) ;
81+ const script = new vm . Script ( scriptText , { filename : vmFileName } ) ;
82+ return script . runInThisContext ( ) ;
8383 }
8484
8585 /**
@@ -132,7 +132,7 @@ class QueryGenerator {
132132 }
133133
134134 static _insertParamsGetter ( propertiesInfo , docInfo ) {
135- let scriptText = '(function getParametersInsert(doc, docInfo) {\n' ;
135+ let scriptText = '(function getParametersInsert(doc, docInfo, mappingInfo ) {\n' ;
136136 scriptText += ' return [' ;
137137
138138 scriptText += QueryGenerator . _valueGetterExpression ( propertiesInfo ) ;
@@ -144,8 +144,8 @@ class QueryGenerator {
144144 // Finish return statement
145145 scriptText += '];\n})' ;
146146
147- const script = new vm . Script ( scriptText ) ;
148- return script . runInThisContext ( { filename : vmFileName } ) ;
147+ const script = new vm . Script ( scriptText , { filename : vmFileName } ) ;
148+ return script . runInThisContext ( ) ;
149149 }
150150
151151 /**
@@ -249,7 +249,7 @@ class QueryGenerator {
249249 * @returns {Function }
250250 */
251251 static _updateParamsGetter ( primaryKeys , propertiesInfo , when , ttl ) {
252- let scriptText = '(function getParametersUpdate(doc, docInfo) {\n' ;
252+ let scriptText = '(function getParametersUpdate(doc, docInfo, mappingInfo ) {\n' ;
253253 scriptText += ' return [' ;
254254
255255 if ( typeof ttl === 'number' ) {
@@ -271,8 +271,8 @@ class QueryGenerator {
271271 // Finish return statement
272272 scriptText += '];\n})' ;
273273
274- const script = new vm . Script ( scriptText ) ;
275- return script . runInThisContext ( { filename : vmFileName } ) ;
274+ const script = new vm . Script ( scriptText , { filename : vmFileName } ) ;
275+ return script . runInThisContext ( ) ;
276276 }
277277
278278 /**
@@ -346,7 +346,7 @@ class QueryGenerator {
346346 * @returns {Function }
347347 */
348348 static _deleteParamsGetter ( primaryKeys , propertiesInfo , when ) {
349- let scriptText = '(function getParametersDelete(doc, docInfo) {\n' ;
349+ let scriptText = '(function getParametersDelete(doc, docInfo, mappingInfo ) {\n' ;
350350 scriptText += ' return [' ;
351351
352352 // Where clause
@@ -360,8 +360,8 @@ class QueryGenerator {
360360 // Finish return statement
361361 scriptText += '];\n})' ;
362362
363- const script = new vm . Script ( scriptText ) ;
364- return script . runInThisContext ( { filename : vmFileName } ) ;
363+ const script = new vm . Script ( scriptText , { filename : vmFileName } ) ;
364+ return script . runInThisContext ( ) ;
365365 }
366366
367367 /**
@@ -375,20 +375,29 @@ class QueryGenerator {
375375 objectName = objectName || 'doc' ;
376376
377377 return propertiesInfo
378- . map ( p => QueryGenerator . _valueGetterSingle ( `${ objectName } ['${ p . propertyName } ']` , p . value ) )
378+ . map ( p =>
379+ QueryGenerator . _valueGetterSingle ( `${ objectName } ['${ p . propertyName } ']` , p . propertyName , p . value , p . fromModel ) )
379380 . join ( ', ' ) ;
380381 }
381382
382- static _valueGetterSingle ( prefix , value ) {
383+ static _valueGetterSingle ( prefix , propName , value , fromModelFn ) {
384+ let valueGetter = prefix ;
385+
383386 if ( value instanceof QueryOperator ) {
384387 if ( value . hasChildValues ) {
385- return `${ QueryGenerator . _valueGetterSingle ( `${ prefix } .value[0]` , value . value [ 0 ] ) } ` +
386- `, ${ QueryGenerator . _valueGetterSingle ( `${ prefix } .value[1]` , value . value [ 1 ] ) } ` ;
388+ return `${ QueryGenerator . _valueGetterSingle ( `${ prefix } .value[0]` , propName , value . value [ 0 ] , fromModelFn ) } ` +
389+ `, ${ QueryGenerator . _valueGetterSingle ( `${ prefix } .value[1]` , propName , value . value [ 1 ] , fromModelFn ) } ` ;
390+ }
391+
392+ valueGetter = `${ prefix } .value` ;
393+
394+ if ( value . isInOperator && fromModelFn ) {
395+ // Transform each individual value
396+ return `${ valueGetter } .map(v => ${ QueryGenerator . _getMappingFunctionCall ( propName , 'v' ) } )` ;
387397 }
388- return `${ prefix } .value` ;
389398 }
390399
391- return prefix ;
400+ return ! fromModelFn ? valueGetter : QueryGenerator . _getMappingFunctionCall ( propName , valueGetter ) ;
392401 }
393402
394403 /**
@@ -402,7 +411,13 @@ class QueryGenerator {
402411 prefix = prefix || 'doc' ;
403412
404413 return propertiesInfo
405- . map ( p => `${ prefix } ['${ p . propertyName } ']${ p . value instanceof QueryAssignment ? '.value' : '' } ` )
414+ . map ( p => {
415+ const valueGetter = `${ prefix } ['${ p . propertyName } ']${ p . value instanceof QueryAssignment ? '.value' : '' } ` ;
416+ if ( p . fromModel ) {
417+ return QueryGenerator . _getMappingFunctionCall ( p . propertyName , valueGetter ) ;
418+ }
419+ return valueGetter ;
420+ } )
406421 . join ( ', ' ) ;
407422 }
408423
@@ -412,6 +427,10 @@ class QueryGenerator {
412427 . join ( ' AND ' ) ;
413428 }
414429
430+ static _getMappingFunctionCall ( propName , valueGetter ) {
431+ return `mappingInfo.getFromModelFn('${ propName } ')(${ valueGetter } )` ;
432+ }
433+
415434 static _getSingleCondition ( columnName , value ) {
416435 if ( value instanceof QueryOperator ) {
417436 if ( value . hasChildValues ) {
0 commit comments