From e22f1e793575ffeeae8c822ab96bb708a00f629c Mon Sep 17 00:00:00 2001 From: hi15 <hi15@inf.ufpr.br> Date: Wed, 3 May 2017 11:44:20 -0300 Subject: [PATCH] Implementation of multiple where, that has tableField and fild as a array, 'where' contain the fild 'condition' as a condition (ex.: AND, OR) of where --- src/libs/middlewares/reqQueryFields.js | 45 ++++++++++++++++---------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/src/libs/middlewares/reqQueryFields.js b/src/libs/middlewares/reqQueryFields.js index 88405e01..e64a9321 100644 --- a/src/libs/middlewares/reqQueryFields.js +++ b/src/libs/middlewares/reqQueryFields.js @@ -210,26 +210,21 @@ class ReqQueryFields { // Se o valor é um campo a ser incluÃdo no SELECT if(typeof field.field !== 'undefined' && field.field) { log.debug('SELECT'); - // if (Array.isArray(value.tableField)) { - // value.tableField.forEach((f, i) => { - // req.sql.field(value.table+'.'+f, value.resultField[i] || f) - // .group(value.table+'.'+f); - // }) - // } - req.sql.field(value.table+'.'+value.tableField, value.resultField || value.tableField) - .group(value.table+'.'+value.tableField) - .order(value.table+'.'+value.tableField); + if (Array.isArray(value.resultField)) { + value.tableField.forEach((f, i) => { + req.sql.field(value.table+'.'+f, value.resultField[i] || f) + .group(value.table+'.'+f); + }) + }else{ + req.sql.field(value.table+'.'+value.tableField, value.resultField || value.tableField) + .group(value.table+'.'+value.tableField); + } } // Se o valor é um campo para ser usado no WHERE if(typeof field.where !== 'undefined' && field.where) { log.debug('WHERE'); // Valor do where - //multiple where - // if (Array.isArray(value.tableField)){ - // - // } - let whereValue = param[k]; // Valor sempre vem como string, necessário fazer parse para o banco if(value.where.type === 'integer') whereValue = parseInt(whereValue, 10); @@ -237,9 +232,25 @@ class ReqQueryFields { if(value.where.type === 'string') whereValue = '%'+whereValue+'%'; if(value.where.type === 'boolean') whereValue = (whereValue.toLowerCase() === 'true' || parseInt(whereValue, 10) === 1); let tbl = value.where.table || value.table; - let whereField = (value.where.type === 'string')? 'LOWER('+tbl+'.'+value.where.field+')' : tbl+'.'+value.where.field; - let lower = (value.where.type === 'string') ? ' LOWER(?) ' : ' ? '; - req.sql.where(whereField + ' ' + value.where.relation + lower, whereValue); + // multiple where, only tested for boolean filds + if (Array.isArray(value.tableField)) { + let lower = (value.where.type === 'string') ? ' LOWER(?) ' : ' ? '; + let whereField = ''; + let whereValues = []; + value.where.field.forEach((f, i, arr) => { + whereValues.push(whereValue); + whereField += (value.where.type === 'string') ? 'LOWER(' + tbl + '.' + value.where.field[i] + ')' : tbl + '.' + value.where.field[i]; + whereField += ' ' + value.where.relation + ' ?'; + if (i < arr.length - 1) { + whereField += ' ' + value.where.condition + ' '; + } + }); + req.sql.where(whereField, ...whereValues); + } else { + let whereField = (value.where.type === 'string') ? 'LOWER(' + tbl + '.' + value.where.field + ')' : tbl + '.' + value.where.field; + let lower = (value.where.type === 'string') ? ' LOWER(?) ' : ' ? '; + req.sql.where(whereField + ' ' + value.where.relation + lower, whereValue); + } } } }); -- GitLab