Files
2025-09-11 20:39:52 +00:00

71 lines
2.4 KiB
JavaScript

import mysql from 'mysql2/promise'
export class MySQLClient {
constructor(db, kal = 0) {
this.db = db
this.lastInsertedId = -1
this.kalIntervalId = null
if(kal > 0){
this.kalIntervalId = setInterval(() => {
this.db.query('SELECT 1')
}, 1000 * kal);
}
}
async close(){
if(this.db) await this.db.end()
if(this.kalIntervalId) clearInterval(this.kalIntervalId)
this.db = null
}
escape(x) { return(mysql.escape(x)) }
async execute(query, values = []){
if(!this.db) return([])
if(query.search(RegExp('(^|;) *(INSERT|REPLACE) +INTO','i'))>-1) this.lastInsertedId = -1
const [result] = await this.db.execute(query, values)
if('insertId' in result) {
this.lastInsertedId = result.insertId
}
return(result)
}
/* Makes a multi-line VALUES insert, with values for an array of objects { columns:value }
*/
async InsertObjectsStatement(table, rows){
this.lastInsertedId = -1
if((!this.db) || (rows.length==0)) return([])
const keys = Object.keys(rows[0]).map((key) => `\`${key}\``).join(', ')
let valuesArr = []
for(let row of rows){
valuesArr.push(Object.values(row))
}
const query = `INSERT INTO ${table} (${keys}) VALUES ?`
const [result] = await this.db.query(query, [valuesArr]) //Note the wierd array in array of arrays, also, query, not execute
if('insertId' in result) {
this.lastInsertedId = result.insertId
}
return(result)
}
/* Makes a multi-line VALUES insert, with values for an array of objects { columns:value }
*/
async ReplaceObjectsStatement(table, rows){
this.lastInsertedId = -1
if((!this.db) || (rows.length==0)) return([])
const keys = Object.keys(rows[0]).map((key) => `\`${key}\``).join(', ')
let valuesArr = []
for(let row of rows){
valuesArr.push(Object.values(row))
}
const query = `REPLACE INTO ${table} (${keys}) VALUES ?`
const [result] = await this.db.query(query, [valuesArr]) //Note the wierd array in array of arrays, also, query, not execute
if('insertId' in result) {
this.lastInsertedId = result.insertId
}
return(result)
}
}