From d1d53fb263c9edc7f525daad54e241bec62a6cbf Mon Sep 17 00:00:00 2001 From: Vytor Calixto <vytorcalixto@gmail.com> Date: Wed, 18 Oct 2017 11:46:28 -0200 Subject: [PATCH] Add multiquery execution --- src/libs/db/query_exec.js | 8 +++++++- src/libs/middlewares/query.js | 21 ++++++++++++++++----- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/libs/db/query_exec.js b/src/libs/db/query_exec.js index c43b1dbe..691117c5 100644 --- a/src/libs/db/query_exec.js +++ b/src/libs/db/query_exec.js @@ -40,4 +40,10 @@ function execSqlQuery(sqlQuery, sqlQueryParams = []) { }); } -module.exports = execSqlQuery; +function execMultiQuery(querySet = []) { + // Issue all queries concurrently to the database, for every query object in the iterable + // NOTE: Array.map() returns a copy of the original array with each object 'mapped'. + return querySet.map((qry) => { return execSqlQuery(qry.toString()); }); +} + +module.exports = {execSqlQuery, execMultiQuery}; diff --git a/src/libs/middlewares/query.js b/src/libs/middlewares/query.js index f6dd21d7..b76f6ff7 100644 --- a/src/libs/middlewares/query.js +++ b/src/libs/middlewares/query.js @@ -1,17 +1,28 @@ const libs = `${process.cwd()}/libs`; const log = require(`${libs}/log`)(module); -const execQuery = require(`${libs}/db/query_exec`); +const db = require(`${libs}/db/query_exec`); // Middleware that executes a query defined by a squel object in req.sql function query(req, res, next) { let sql = req.sql.toParam(); log.info(`Executando query ${req.sql.toString()}`); - execQuery(sql.text, sql.values).then((result) => { - req.result = result; - next(); + execute(sql.text, sql.values, (err, result) => { + if(err) { + log.error(err.stack); + next(new Error('Request could not be satisfied due to a database error.')); + } else { + req.result = result; + next(); + } + }); +} + +function execute(text, values, cb) { + db.execSqlQuery(text, values).then((result) => { + cb(null, result); }, (error) => { log.error(error.stack); - next(new Error('Request could not be satisfied due to a database error.')); + cb(new Error('Request could not be satisfied due to a database error.')); }); } -- GitLab