71 lines
2.4 KiB
JavaScript
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)
|
|
}
|
|
|
|
}
|