Skip to content
This repository was archived by the owner on Apr 29, 2025. It is now read-only.

Commit 123a003

Browse files
committed
refactor(db/startTransaction): use internal query functions
Some changes to function signature and callback. Make null-returns commit changes rather than rollback.
1 parent a876f92 commit 123a003

File tree

4 files changed

+35
-31
lines changed

4 files changed

+35
-31
lines changed

src/database/rawExecute.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ export const rawExecute = async (
1212
parameters: CFXParameters,
1313
cb?: CFXCallback,
1414
isPromise?: boolean,
15-
unpack?: boolean
15+
unpack?: boolean,
16+
connectionId?: number
1617
) => {
1718
cb = setCallback(parameters, cb);
1819

@@ -27,7 +28,7 @@ export const rawExecute = async (
2728
return logError(invokingResource, cb, isPromise, err, query, parameters);
2829
}
2930

30-
const connection = await getPoolConnection();
31+
const connection = await getPoolConnection(connectionId);
3132

3233
if (!connection) return;
3334

@@ -48,13 +49,11 @@ export const rawExecute = async (
4849
const startTime = !hasProfiler && performance.now();
4950
const [result] = await connection.execute(query, values);
5051

51-
if (cb) {
52-
if (Array.isArray(result) && result.length > 1) {
53-
for (const value of result) {
54-
response.push(unpack ? parseResponse(type, value) : value);
55-
}
56-
} else response.push(unpack ? parseResponse(type, result) : result);
57-
}
52+
if (Array.isArray(result) && result.length > 1) {
53+
for (const value of result) {
54+
response.push(unpack ? parseResponse(type, value) : value);
55+
}
56+
} else response.push(unpack ? parseResponse(type, result) : result);
5857

5958
if (hasProfiler && ((index > 0 && index % 100 === 0) || index === parametersLength - 1)) {
6059
await profileBatchStatements(connection, invokingResource, query, parameters, index < 100 ? 0 : index);
@@ -63,7 +62,7 @@ export const rawExecute = async (
6362
}
6463
}
6564

66-
if (!cb) return;
65+
if (!cb) return response.length === 1 ? response[0] : response;
6766

6867
try {
6968
if (response.length === 1) {
@@ -84,6 +83,8 @@ export const rawExecute = async (
8483
}
8584
}
8685
} catch (err: any) {
86+
if (!cb) throw new Error(err.message || err);
87+
8788
logError(invokingResource, cb, isPromise, err, query, parameters);
8889
} finally {
8990
connection.release();

src/database/rawQuery.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ export const rawQuery = async (
1414
query: string,
1515
parameters: CFXParameters,
1616
cb?: CFXCallback,
17-
isPromise?: boolean
17+
isPromise?: boolean,
18+
connectionId?: number
1819
) => {
1920
cb = setCallback(parameters, cb);
2021
try {
@@ -23,7 +24,7 @@ export const rawQuery = async (
2324
return logError(invokingResource, cb, err, isPromise, query, parameters);
2425
}
2526

26-
const connection = await getPoolConnection();
27+
const connection = await getPoolConnection(connectionId);
2728

2829
if (!connection) return;
2930

@@ -42,16 +43,19 @@ export const rawQuery = async (
4243
logQuery(invokingResource, query, performance.now() - startTime, parameters);
4344
}
4445

45-
if (cb)
46-
try {
47-
cb(parseResponse(type, result));
48-
} catch (err) {
49-
if (typeof err === 'string') {
50-
if (err.includes('SCRIPT ERROR:')) return console.log(err);
51-
console.log(`^1SCRIPT ERROR in invoking resource ${invokingResource}: ${err}^0`);
52-
}
46+
if (!cb) return parseResponse(type, result);
47+
48+
try {
49+
cb(parseResponse(type, result));
50+
} catch (err) {
51+
if (typeof err === 'string') {
52+
if (err.includes('SCRIPT ERROR:')) return console.log(err);
53+
console.log(`^1SCRIPT ERROR in invoking resource ${invokingResource}: ${err}^0`);
5354
}
55+
}
5456
} catch (err: any) {
57+
if (!cb) throw new Error(err.message || err);
58+
5559
logError(invokingResource, cb, isPromise, err, query, parameters, true);
5660
} finally {
5761
connection.release();

src/database/startTransaction.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
11
import { getPoolConnection } from './connection';
22
import { logError } from '../logger';
33
import { CFXCallback, CFXParameters } from '../types';
4-
import { setCallback } from '../utils/setCallback';
4+
import { rawQuery } from './rawQuery';
5+
import { rawExecute } from './rawExecute';
56

67
export const startTransaction = async (
78
invokingResource: string,
89
queries: (...args: any[]) => Promise<boolean>,
9-
parameters: CFXParameters,
1010
cb?: CFXCallback,
1111
isPromise?: boolean
1212
) => {
13-
cb = setCallback(parameters, cb);
14-
1513
const conn = await getPoolConnection();
1614

1715
if (!conn) return;
1816

1917
let response = false;
2018

2119
try {
20+
const connectionId = (conn as any).connection.connectionId;
2221
await conn.beginTransaction();
2322

2423
const commit = await queries({
25-
query: async (sql: string, values?: CFXParameters) => {
26-
const [rows] = await conn.query(sql, values);
27-
return rows;
24+
query: (sql: string, values: CFXParameters) => {
25+
return rawQuery(null, invokingResource, sql, values, undefined, isPromise, connectionId);
26+
},
27+
execute: (sql: string, values: CFXParameters) => {
28+
return rawExecute(invokingResource, sql, values, undefined, isPromise, connectionId);
2829
},
2930
});
3031

31-
response = !!commit;
32-
32+
response = commit === false ? false : true;
3333
response ? conn.commit() : conn.rollback();
3434
} catch (err: any) {
3535
conn.rollback();

src/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,11 @@ global.exports(
7777
'experimentalTransaction',
7878
async (
7979
transactions: () => Promise<boolean>,
80-
parameters: CFXParameters,
8180
cb: CFXCallback,
8281
invokingResource = GetInvokingResource(),
8382
isPromise?: boolean
8483
) => {
85-
return await startTransaction(invokingResource, transactions, parameters, cb, isPromise);
84+
return await startTransaction(invokingResource, transactions, cb, isPromise);
8685
}
8786
);
8887

0 commit comments

Comments
 (0)