不要怂,就是干,撸起袖子干!

Commit db45f14f by Jason Jung Committed by Matt Broadstone

added resolve / reject on connect

1 parent 0116710a
...@@ -182,6 +182,7 @@ ConnectionManager.prototype.initPools = function () { ...@@ -182,6 +182,7 @@ ConnectionManager.prototype.initPools = function () {
ConnectionManager.prototype.getConnection = function(options) { ConnectionManager.prototype.getConnection = function(options) {
var self = this; var self = this;
options = options || {}; options = options || {};
self.pool.isTransaction = options.transaction;
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
self.pool.acquire(function(err, connection) { self.pool.acquire(function(err, connection) {
...@@ -200,7 +201,7 @@ ConnectionManager.prototype.releaseConnection = function(connection) { ...@@ -200,7 +201,7 @@ ConnectionManager.prototype.releaseConnection = function(connection) {
}; };
ConnectionManager.prototype.$connect = function(config) { ConnectionManager.prototype.$connect = function(config) {
return this.dialect.connectionManager.connect(config); return this.dialect.connectionManager.connect(config, this.pool.isTransaction);
}; };
ConnectionManager.prototype.$disconnect = function(connection) { ConnectionManager.prototype.$disconnect = function(connection) {
return this.dialect.connectionManager.disconnect(connection); return this.dialect.connectionManager.disconnect(connection);
......
...@@ -13,13 +13,13 @@ ConnectionManager = function(dialect, sequelize) { ...@@ -13,13 +13,13 @@ ConnectionManager = function(dialect, sequelize) {
try { try {
this.lib = require(sequelize.config.dialectModulePath || 'mssql'); this.lib = require(sequelize.config.dialectModulePath || 'mssql');
} catch (err) { } catch (err) {
throw new Error('Please install seriate package manually'); throw new Error('Please install mssql package manually');
} }
}; };
Utils._.extend(ConnectionManager.prototype, AbstractConnectionManager.prototype); Utils._.extend(ConnectionManager.prototype, AbstractConnectionManager.prototype);
ConnectionManager.prototype.connect = function(config) { ConnectionManager.prototype.connect = function(config, isTransaction) {
var self = this; var self = this;
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
...@@ -43,13 +43,38 @@ ConnectionManager.prototype.connect = function(config) { ...@@ -43,13 +43,38 @@ ConnectionManager.prototype.connect = function(config) {
server: connectionConfig.host, server: connectionConfig.host,
database: connectionConfig.database database: connectionConfig.database
}; };
if (isTransaction) {
var conn = new self.lib.Connection(config, function (err){
var trans = new self.lib.Transaction(conn);
self.lib._transaction = trans;
trans.begin(function(err) {
if (err) {
reject(err);
return;
}
resolve(self.lib);
});
});
} else {
self.lib.connect(config, function(err) { self.lib.connect(config, function(err) {
// var request = new self.lib.Request(); // var request = new self.lib.Request();
// request.query('select 1 as number', function(err, recordset) { // request.query('select 1 as number', function(err, recordset) {
// console.log('err2', err); // console.log('err2', err);
// console.log(recordset); // console.log(recordset);
// }); // });
if (err) {
reject(err);
return;
}
resolve(self.lib);
}); });
}
// var connection = { // var connection = {
// config: { // config: {
// user: connectionConfig.user, // user: connectionConfig.user,
...@@ -60,7 +85,7 @@ ConnectionManager.prototype.connect = function(config) { ...@@ -60,7 +85,7 @@ ConnectionManager.prototype.connect = function(config) {
// }; // };
//connection = self.lib; //connection = self.lib;
// connection.lib = self.lib.getPlainContext(connection.config); // connection.lib = self.lib.getPlainContext(connection.config);
resolve(self.lib);
}); });
}; };
ConnectionManager.prototype.disconnect = function(connection) { ConnectionManager.prototype.disconnect = function(connection) {
......
...@@ -472,7 +472,8 @@ module.exports = (function() { ...@@ -472,7 +472,8 @@ module.exports = (function() {
//return 'SAVE TRANSACTION ' + SqlGenerator.quoteIdentifier(transaction.name) + ';'; //return 'SAVE TRANSACTION ' + SqlGenerator.quoteIdentifier(transaction.name) + ';';
} }
return 'BEGIN TRANSACTION'; // return 'BEGIN TRANSACTION';
return '';
}, },
/** /**
* Returns a query that commits a transaction. * Returns a query that commits a transaction.
...@@ -486,6 +487,7 @@ module.exports = (function() { ...@@ -486,6 +487,7 @@ module.exports = (function() {
} }
return 'COMMIT TRANSACTION;'; return 'COMMIT TRANSACTION;';
// return '';
}, },
/** /**
...@@ -500,7 +502,8 @@ module.exports = (function() { ...@@ -500,7 +502,8 @@ module.exports = (function() {
return 'ROLLBACK TRANSACTION ' + this.quoteIdentifier(transaction.name) + ';'; return 'ROLLBACK TRANSACTION ' + this.quoteIdentifier(transaction.name) + ';';
} }
return 'ROLLBACK TRANSACTION'; return 'ROLLBACK TRANSACTION;';
// return '';
}, },
addLimitAndOffset: function(options, query) { addLimitAndOffset: function(options, query) {
......
...@@ -36,6 +36,7 @@ module.exports = (function() { ...@@ -36,6 +36,7 @@ module.exports = (function() {
} }
var promise = new Utils.Promise(function(resolve, reject) { var promise = new Utils.Promise(function(resolve, reject) {
console.log(self.sql); console.log(self.sql);
// self // self
...@@ -52,15 +53,42 @@ module.exports = (function() { ...@@ -52,15 +53,42 @@ module.exports = (function() {
// resolve(self.formatResults(result.query)); // resolve(self.formatResults(result.query));
// }); // });
// }); // });
var request = new self.connection.Request();
var request, transCommand;
if (self.connection._transaction) {
request = new self.connection.Request(self.connection._transaction);
if (self.sql === 'COMMIT TRANSACTION;') {
transCommand = 'commit';
} else if (self.sql === 'ROLLBACK TRANSACTION;') {
transCommand = 'rollback';
}
if (self.sql === 'COMMIT TRANSACTION;' ||
self.sql === 'ROLLBACK TRANSACTION;') {
self.connection._transaction[transCommand](function (err, result) {
if (err) {
console.log(err.message);
reject(self.formatError(err));
} else {
resolve(self.formatResults(result));
}
});
return promise;
}
} else {
request = new self.connection.Request();
}
request.query(self.sql, function(err, recordset) { request.query(self.sql, function(err, recordset) {
promise.emit('sql', self.sql, self.connection.uuid); promise.emit('sql', self.sql, self.connection.uuid);
if(err){ if(err){
console.log(err.message); console.log(err.message);
reject(self.formatError(err)); reject(self.formatError(err));
} } else {
resolve(self.formatResults(recordset)); resolve(self.formatResults(recordset));
}
}); });
}); });
return promise; return promise;
......
'use strict'; 'use strict';
var Utils = require('./utils') var Utils = require('./utils')
, util = require('util'); , util = require('util')
, Promise = require('./promise');
/** /**
* The transaction object is used to identify a running transaction. It is created by calling `Sequelize.transaction()`. * The transaction object is used to identify a running transaction. It is created by calling `Sequelize.transaction()`.
...@@ -114,11 +115,12 @@ Transaction.prototype.prepareEnvironment = function() { ...@@ -114,11 +115,12 @@ Transaction.prototype.prepareEnvironment = function() {
var self = this; var self = this;
return Utils.Promise.resolve( return Utils.Promise.resolve(
self.options.transaction ? self.options.transaction.connection : self.sequelize.connectionManager.getConnection({ uuid: self.id }) self.options.transaction ? self.options.transaction.connection : self.sequelize.connectionManager.getConnection({ uuid: self.id, transaction: true })
).then(function (connection) { ).then(function (connection) {
self.connection = connection; self.connection = connection;
self.connection.uuid = self.id; self.connection.uuid = self.id;
}).then(function () { })
.then(function () {
return self.begin(); return self.begin();
}).then(function () { }).then(function () {
return self.setIsolationLevel(); return self.setIsolationLevel();
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!