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