UNPKG

ckn.data

Version:

147 lines (137 loc) 5.06 kB
import { ckn } from "ckn"; import { DataConnector } from "./connector.js"; const mysql = await import('mysql'); class MySQLConnector extends DataConnector { constructor() { super(); } query = async (query) => { return await new Promise(resolve => { //ckn.log.info("QUERY> " + query); var con = mysql.createConnection({ host: this.host, user: this.user, password: this.password, database: this.database, connectTimeout: 300000 }); con.connect(function (err) { if (err) { console.log("ERROR> " + query); throw err; } con.query(query, function (err, result, fields) { if (err) { console.log("ERROR> " + query); throw err; } con.end(); resolve(result); }); }); }); } insert = async (tableName, objs) => { return await new Promise(resolve => { if (!Array.isArray(objs)) { objs = [objs]; } var columnNames = ""; var columns = []; Object.keys(objs[0]).forEach(key => { columnNames += ("`" + key + "`,"); columns.push(key); }); columnNames = columnNames.slice(0, -1); var sql = "INSERT INTO `" + tableName + "` (" + columnNames + ") VALUES ?"; var values = []; objs.forEach(row => { var value = []; columns.forEach(col => { var v = row[col]; value.push(v); }); values.push(value); }); // ckn.log.info("QUERY> " + sql); //ckn.log.info("BEGIN-INSERTED DATA:"); //ckn.log.info("END-INSERTED DATA:"); var con = mysql.createConnection({ host: this.host, user: this.user, password: this.password, database: this.database, connectTimeout: 300000 }); con.connect(function (err) { if (err) { console.log("ERROR> " + sql); throw err; } con.query(sql, [values], function (err, result, fields) { if (err) { console.log("ERROR> " + sql); throw err; } resolve(result); con.end(); }); }); }); } update = async (tableName, objs, condition) => { return await new Promise(resolve => { if (!Array.isArray(objs)) { objs = [objs]; } objs.forEach(obj => { var sets = ""; Object.keys(obj).forEach(key => { var v = obj[key]; if (typeof v == "string") { v = v.replace(/'/g,'\'\'',); } if (v != null) { if (!Array.isArray(obj[key])) sets += "`" + key + "` = '" + v + "',"; } else { if (!Array.isArray(obj[key])) sets += "`" + key + "` = null,"; } }); if (sets.length > 0) sets = sets.slice(0, -1); var sql = "UPDATE `" + tableName + "` SET " + sets + " WHERE " + condition; console.log("QUERY> " + sql); var con = mysql.createConnection({ host: this.host, user: this.user, password: this.password, database: this.database, connectTimeout: 300000 }); con.connect(function (err) { if (err) { console.log("ERROR> " + sql); throw err; } con.query(sql, function (err, result, fields) { if (err) { console.log("ERROR> " + sql); throw err; } resolve(result); con.end(); }); }); }); }); } getFields = async (table) => { var q = "select * from information_schema.columns where table_schema = '"+this.database+"' AND table_name = '"+table+"'"; return this.query(q); } checkTable = async (table) => { var q = "select * from information_schema.columns where table_schema = '"+this.database+"' AND table_name = '"+table+"'"; return (await this.query(q)).length > 0; } } export { MySQLConnector };