UNPKG

@launchql/migrate

Version:
43 lines (42 loc) 1.4 kB
"use strict"; 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); }