From 5905ff9afcc02669e8d0dde3d72deb75b475b521 Mon Sep 17 00:00:00 2001 From: Pau Date: Tue, 1 Apr 2025 20:32:11 +0200 Subject: [PATCH] created mysql adapter --- src/adapters/mysql.js | 80 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/adapters/mysql.js diff --git a/src/adapters/mysql.js b/src/adapters/mysql.js new file mode 100644 index 0000000..233a519 --- /dev/null +++ b/src/adapters/mysql.js @@ -0,0 +1,80 @@ +import mysql from 'mysql2' + +const mysqlAdapter = () => { + const start = config => + mysql.createPool( + Object.assign({}, config.db, { + multipleStatements: true, + waitForConnections: true, + connectionLimit: 10, + idleTimeout: 120000 //idle connections timeout, in milliseconds, the default value is 60000 + }) + ) + const end = conn => conn.end + + const execute = (query, pool, params) => { + return new Promise((resolve, reject) => { + if(!query || query.trim().length === 0) { + reject(new Error('No query provided')) + } + else{ + pool.getConnection((err, conn) => { + if(err) { + reject(err) + } + else{ + conn.config.queryFormat = function(query2, values) { + if(!values) return query2 + return query2.replace(/:(\w+)/g, + (txt, key) => { + if (Object.prototype.hasOwnProperty.call(values, key)) { + return this.escape(values[key]) + } + return txt + } + ) + } + + conn.query(query, params, (err, result) => { + if (err) { + console.error('##### QUERY FAILED: #####') + console.error(query) + console.error('##### REASON: #####') + console.error(err) + reject(err) + } + else{ + resolve(result) + } + conn.destroy() + }) + } + }) + } + }) + } + + const beginTransaction = conn => + new Promise((resolve, reject) => { + conn.beginTransaction((err) => { + if(err) { + reject(err) + } + resolve(conn) + }) + }) + + const commit = conn => + new Promise((resolve, reject) => { + conn.commit((err) => { + if(err) { + reject(err) + } + resolve(conn) + }) + }) + + return {start, end, execute, beginTransaction, commit} +} + +export default mysqlAdapter() \ No newline at end of file