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, }; } }