From 153542d2be20985c936a46dca32d20cf19a3778e Mon Sep 17 00:00:00 2001 From: alexandre Date: Tue, 30 May 2023 09:49:39 +0200 Subject: [PATCH] refs #5595 taking active connection --- loopback/common/models/vn-model.js | 52 ++++++++++++++----- loopback/server/connectors/vn-mysql.js | 6 --- .../ticket/back/methods/ticket/saveSign.js | 2 +- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/loopback/common/models/vn-model.js b/loopback/common/models/vn-model.js index 1cb389099c..f27000afdc 100644 --- a/loopback/common/models/vn-model.js +++ b/loopback/common/models/vn-model.js @@ -196,20 +196,48 @@ module.exports = function(Self) { /* * Shortcut to VnMySQL.executeP() */ - rawSql(query, params, options, cb) { + async rawSql(query, params, options) { const userId = options?.userId; - if (userId) { - params.unshift(userId); - return this.dataSource.connector.executeP( - `CALL account.myUser_loginWithName((SELECT name FROM account.user WHERE id = ?)); - ${query}; - CALL account.myUser_logout();`, - params, - options, - cb - ); + const connector = this.dataSource.connector; + let conn; + let res; + const opts = Object.assign({}, options); + + try { + if (userId) { + conn = await new Promise((resolve, reject) => { + connector.client.getConnection(function(err, conn) { + if (err) + reject(err); + else + resolve(conn); + }); + }); + + const opts = Object.assign({}, options); + if (!opts.transaction) { + opts.transaction = { + connection: conn, + connector + }; + } + + await connector.executeP( + 'CALL account.myUser_loginWithName((SELECT name FROM account.user WHERE id = ?))', + [userId], opts + ); + } + + res = await connector.executeP(query, params, opts); + + if (userId) { + await connector.executeP('CALL account.myUser_logout()', null, opts); + } + } finally { + if (conn) conn.release(); } - return this.dataSource.connector.executeP(query, params, options, cb); + + return res; }, /* diff --git a/loopback/server/connectors/vn-mysql.js b/loopback/server/connectors/vn-mysql.js index 9ba65d5175..40ad78bde0 100644 --- a/loopback/server/connectors/vn-mysql.js +++ b/loopback/server/connectors/vn-mysql.js @@ -17,12 +17,6 @@ class VnMySQL extends MySQL { executeP(query, params, options = {}, cb) { return new Promise((resolve, reject) => { this.execute(query, params, options, (error, response) => { - if(options?.userId) - { - response.shift(); // Remove OkPacket from logIn - response.pop(); // Remove OkPacket from logOut - response = response[response.length - 1] // Keep only query response - } if (cb) cb(error, response); if (error) diff --git a/modules/ticket/back/methods/ticket/saveSign.js b/modules/ticket/back/methods/ticket/saveSign.js index aede7de8e1..3fd9cd0bbc 100644 --- a/modules/ticket/back/methods/ticket/saveSign.js +++ b/modules/ticket/back/methods/ticket/saveSign.js @@ -32,7 +32,7 @@ module.exports = Self => { Self.saveSign = async(ctx, options) => { const args = Object.assign({}, ctx.args); const models = Self.app.models; - const myOptions = {}; + const myOptions = {userId: ctx.req.accessToken.userId}; let tx; let dms; let gestDocCreated = false;