Skip to content
This repository has been archived by the owner on Aug 1, 2019. It is now read-only.

assertnotnull/mysql-q-transaction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MySQL Q promises

Wraps transactional queries in Q promises

Install

npm install mysql-q-transaction

How to use

var transaction = require('mysql-q-transaction');
var connection = mysql.createConnection();

var myQuery = function(connection) {
    return Q.promise(function(resolve, reject) {
        connection.query(someQuery, [], function(err, result) {
            if (err) {
                reject(err);
            } else {
                resolve();
            }
        });
    });
}

var secondOne = function(connection) {
    return Q.promise(function(resolve, reject) {
        connection.query(someQuery, [], function(err, result) {
            if (err) {
                reject(err);
            } else {
                resolve();
            }
        });
    });
}


transaction.startTransaction(
    connection, // the current connection
    function() { return [myQuery(connection), secondOne(connection)] }, //required callback
    manuallyCommit, //manage the commit manually
    manuallyRollbackFlag //optional - disable automaticRollback
);

startTransaction is also a promise so you can do something after it.

transaction.startTransaction(
    connection, // the current connection
    function() { return [myQuery(connection), secondOne(connection)] }, //required callback
    manuallyRollbackFlag //optional - disable automaticRollback
).then(function() {
    ...
});

Example:

database.openTransaction = function (promisedQueries, isManualCommit) {
    return database.getConnection() //gets the connection from the pool
        .then(function () {
            return transaction.startTransaction(database.connection, promisedQueries, isManualCommit)
        });
};

database.openTransaction(function () {
                return [myQuery, myOtherQuery]
            }, true)
            .then(function () {
                return callExternalAPI(someParam);
            })
            .then(function success() {
                return Q.promise(function (resolve, reject) {
                    database.connection.commit(function (err) {
                        if (err) {
                            reject(err);
                        }
                        resolve();
                    });
                }).then(function () {
                    console.log('done');
                });
            }, function externalApiFail() {
                return Q.promise(function (resolve, reject) {
                    database.connection.rollback(function (err, result) {
                        if (err) {
                            reject(err);
                        } else {
                            resolve();
                        }
                    });
                }
            })
            .fin(database.releaseConnection);

How to test

Since it's a simple tool for transactions it requires an installed MySQL for tests.

About

Wraps MySQL transactions in Q promises

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published