created mysql adapter

This commit is contained in:
Pau 2025-04-01 20:32:11 +02:00
parent ec7b22a6b4
commit 5905ff9afc
1 changed files with 80 additions and 0 deletions

80
src/adapters/mysql.js Normal file
View File

@ -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()