Fix transaction rollback logic

This commit is contained in:
Girish Ramakrishnan
2020-06-11 09:50:49 -07:00
parent c855d75f35
commit aabb9dee13

View File

@@ -131,28 +131,6 @@ function beginTransaction(callback) {
});
}
function rollback(connection, commitError, callback) {
assert.strictEqual(typeof callback, 'function');
connection.rollback(function (error) {
if (error) debug('rollback: error when rolloing back', error);
connection.release();
callback(commitError);
});
}
function commit(connection, callback) {
assert.strictEqual(typeof callback, 'function');
connection.commit(function (error) {
if (error) return rollback(connection, error, callback);
connection.release();
return callback(null);
});
}
function query() {
var args = Array.prototype.slice.call(arguments);
var callback = args[args.length - 1];
@@ -163,6 +141,15 @@ function query() {
gDefaultConnection.query.apply(gDefaultConnection, args);
}
function rollback(connection, transactionError, callback) {
connection.rollback(function (error) {
if (error) debug('rollback: error when rolling back', error);
connection.release();
callback(transactionError);
});
}
function transaction(queries, callback) {
assert(util.isArray(queries));
assert.strictEqual(typeof callback, 'function');
@@ -177,9 +164,14 @@ function transaction(queries, callback) {
async.mapSeries(queries, function iterator(query, done) {
connection.query(query.query, query.args, done);
}, function seriesDone(error, results) {
if (error) return rollback(connection, callback.bind(null, error));
if (error) return rollback(connection, error, callback);
commit(connection, callback.bind(null, null, results));
connection.commit(function (error) {
if (error) return rollback(connection, error, callback);
connection.release();
callback(null, results);
});
});
});
}