const util = require("util"); const mysql = require("mysql"); const metamgr = require("./metamgr"); const log = require("./log"); let pool = null; function execQuery(sql, params) { if (!pool) { pool = mysql.createPool({ host : metamgr.getMysqlConf()['host'], user : metamgr.getMysqlConf()['user'], password : metamgr.getMysqlConf()['passwd'], database : metamgr.getMysqlConf()['database'], stringifyObjects : true }); } return new Promise((resolve) => { const ret = { err: null, rows: null, }; pool.getConnection(function(err, conn) { if (err) { try { ret.err = err; resolve(ret); log.error(util.format( 'sql:%s err:%s', sql, err )); } finally { conn.release(); } } else { conn.query(sql, params, (err, rows) => { try { if (err) { ret.err = err; resolve(ret); log.error(util.format( 'sql:%s err:%s', sql, err )); } else { ret.err = err; ret.rows = rows; resolve(ret); } } finally { conn.release(); } }); } }); }); } async function execQueryOne(sql, params) { const {err, rows} = await execQuery(sql, params); return { 'err': err, 'row': rows.length > 0 ? rows[0] : null }; } async function execScript(sql, params) { const {err, rows} = await execQuery(sql, params); return err; } exports.execQuery = execQuery; exports.execQueryOne = execQueryOne; exports.execScript = execScript;