62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
import grabMariaDBClient from "../functions/grab-mariadb-client";
|
|
/**
|
|
* Resolve a shared MariaDB client. Prefer the global client so schema sync
|
|
* and CRUD do not open a new connection per query.
|
|
*/
|
|
function resolveClient(config) {
|
|
const resolvedConfig = config || global.CONFIG;
|
|
// Same database as the global client → reuse it
|
|
if (global.MARIADB_CLIENT &&
|
|
(!resolvedConfig?.db_name ||
|
|
!global.CONFIG?.db_name ||
|
|
resolvedConfig.db_name === global.CONFIG.db_name)) {
|
|
return global.MARIADB_CLIENT;
|
|
}
|
|
if (resolvedConfig) {
|
|
return grabMariaDBClient({ config: resolvedConfig });
|
|
}
|
|
return global.MARIADB_CLIENT;
|
|
}
|
|
/**
|
|
* # Main DB Handler Function
|
|
*/
|
|
export default async function dbHandler({ query, values, config }) {
|
|
try {
|
|
const CLIENT = resolveClient(config);
|
|
if (!CLIENT) {
|
|
throw new Error(`Couldn't grab MariaDB Client.`);
|
|
}
|
|
const res = await CLIENT.unsafe(query, values);
|
|
const count = res.count;
|
|
const res_array = (() => {
|
|
try {
|
|
return JSON.parse(JSON.stringify(res));
|
|
}
|
|
catch (error) {
|
|
return undefined;
|
|
}
|
|
})();
|
|
const last_insert_id = res_array?.[0] ? res_array[0]?.id : undefined;
|
|
const affected_rows = res_array?.[0] ? res_array.length : undefined;
|
|
const insert_return = {
|
|
count,
|
|
last_insert_id,
|
|
affected_rows,
|
|
};
|
|
return {
|
|
success: true,
|
|
payload: res_array,
|
|
single_res: res_array?.[0],
|
|
insert_return,
|
|
count,
|
|
};
|
|
}
|
|
catch (error) {
|
|
return {
|
|
success: false,
|
|
error: "DB Handler Error => " + error.message,
|
|
msg: "DB Handler Error => " + error.message,
|
|
};
|
|
}
|
|
}
|