Fix transaction rollback logic
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user