ckn.data
Version:
147 lines (137 loc) • 5.06 kB
JavaScript
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 };