node-ldap/lib/db/mysql.js

73 lines
1.9 KiB
JavaScript

const mysql = require('mysql2');
const {
database: dbConfig,
} = require('../config');
let dbConnected = false;
let dbPool = null;
async function connect() {
if (!dbConnected) {
const opts = Object.assign({}, dbConfig);
delete opts.type;
dbPool = mysql.createPool(opts).promise();
dbConnected = true;
}
}
async function dbQuery(sql, params) {
connect();
const [ rows, fields ] = await dbPool.query(sql, params);
return rows;
}
async function dbSelect(table, params) {
const fields = Object.keys(params);
const values = fields.map(k => params[k]);
const sql = `SELECT * FROM ${table} WHERE ${fields.map(k => `${k}=?`).join(' AND ')}`;
return dbQuery(sql, values);
}
async function dbUpdate(table, params, conditions) {
const fields = Object.keys(params);
const values = fields.map(k => params[k]);
let conditionSQL = '';
if (conditions) {
const cfields = Object.keys(conditions);
const cvalues = cfields.map(k => conditions[k]);
conditionSQL = ` WHERE ${cfields.map(k => `${k}=?`).join(' AND ')}`;
values.push(...cvalues);
}
const sql = `UPDATE ${table} SET ${fields.map(k => `${k}=?`).join(', ')} ${conditionSQL}`;
return dbQuery(sql, values);
}
async function dbInsert(table, params) {
const fields = Object.keys(params);
const values = fields.map(k => params[k]);
const sql = `INSERT INTO ${table} (${fields.join(', ')}) VALUES (${fields.map(k => '?').join(', ')})`;
return dbQuery(sql, values);
}
async function dbDelete(table, conditions) {
const values = [];
let conditionSQL = '';
if (conditions) {
const cfields = Object.keys(conditions);
const cvalues = fields.map(k => conditions[k]);
conditionSQL = ` WHERE ${cfields.map(k => `${k}=?`).join(' AND ')}`;
values.push(...cvalues);
}
const sql = `DELETE FROM ${table} ${conditionSQL}`
return dbQuery(sql, values);
}
module.exports = {
dbQuery,
dbSelect,
dbUpdate,
dbInsert,
dbDelete,
};