diff --git a/src/database.js b/src/database.js index dc9e09681..c5d4a315d 100644 --- a/src/database.js +++ b/src/database.js @@ -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); + }); }); }); }