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) } }