@launchql/migrate
Version:
LaunchQL Migrate
43 lines (42 loc) • 1.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.withTransaction = withTransaction;
exports.executeQuery = executeQuery;
const logger_1 = require("@launchql/logger");
const log = new logger_1.Logger('migrate:transaction');
/**
* Execute a function within a transaction context
* If useTransaction is true, wraps the execution in a transaction
* If false, uses the pool directly without transaction
*/
async function withTransaction(pool, options, fn) {
if (!options.useTransaction) {
// No transaction - use pool directly
log.debug('Executing without transaction');
return fn({ client: pool, isTransaction: false });
}
// Use transaction
const client = await pool.connect();
log.debug('Starting transaction');
try {
await client.query('BEGIN');
const result = await fn({ client, isTransaction: true });
await client.query('COMMIT');
log.debug('Transaction committed successfully');
return result;
}
catch (error) {
await client.query('ROLLBACK');
log.error('Transaction rolled back due to error:', error);
throw error;
}
finally {
client.release();
}
}
/**
* Helper to execute a query within a transaction context
*/
async function executeQuery(context, query, params) {
return context.client.query(query, params);
}