Skip to content

Commit

Permalink
feat(db): experimental transaction export
Browse files Browse the repository at this point in the history
Don't use this if you don't understand it.
  • Loading branch information
thelindat committed Feb 9, 2024
1 parent 43e0df4 commit 572c6ed
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
42 changes: 42 additions & 0 deletions src/database/startTransaction.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { getPoolConnection } from './connection';
import { logError } from '../logger';
import { CFXCallback, CFXParameters } from '../types';
import { setCallback } from '../utils/setCallback';

export const startTransaction = async (
invokingResource: string,
queries: (...args: any[]) => Promise<boolean>,
parameters: CFXParameters,
cb?: CFXCallback,
isPromise?: boolean
) => {
cb = setCallback(parameters, cb);

const conn = await getPoolConnection();

if (!conn) return;

let response = false;

try {
await conn.beginTransaction();

const commit = await queries({
query: async (sql: string, values?: CFXParameters) => {
const [rows] = await conn.query(sql, values);
return rows;
},
});

response = !!commit;

response ? conn.commit() : conn.rollback();
} catch (err: any) {
conn.rollback();
logError(invokingResource, cb, isPromise, err);
} finally {
conn.release();
}

return cb ? cb(response) : response;
};
14 changes: 14 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,19 @@ MySQL.transaction = (
rawTransaction(invokingResource, queries, parameters, cb, isPromise);
};

global.exports(
'experimentalTransaction',
async (
transactions: () => Promise<boolean>,
parameters: CFXParameters,
cb: CFXCallback,
invokingResource = GetInvokingResource(),
isPromise?: boolean
) => {
return await startTransaction(invokingResource, transactions, parameters, cb, isPromise);
}
);

MySQL.prepare = (
query: string,
parameters: CFXParameters,
Expand Down Expand Up @@ -108,6 +121,7 @@ function provide(resourceName: string, method: string, cb: Function) {

import ghmatti from './compatibility/ghmattimysql';
import mysqlAsync from './compatibility/mysql-async';
import { startTransaction } from 'database/startTransaction';

for (const key in MySQL) {
const exp = MySQL[key];
Expand Down

0 comments on commit 572c6ed

Please sign in to comment.