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

Commit c96e376f by Mick Hansen

Merge branch 'master' of https://github.com/little-big-h/sequelize into little-big-h-master

Conflicts:
	lib/dialects/sqlite/connection-manager.js
	test/integration/transaction.test.js
2 parents 6ecece9a ae799bfc
...@@ -24,16 +24,17 @@ ConnectionManager.prototype.getConnection = function(options) { ...@@ -24,16 +24,17 @@ ConnectionManager.prototype.getConnection = function(options) {
var self = this; var self = this;
options = options || {}; options = options || {};
options.uuid = options.uuid || 'default'; options.uuid = options.uuid || 'default';
options.inMemory = ((self.sequelize.options.storage || ':memory:') === ':memory:')?1:0;
if (self.connections[options.uuid]) return Promise.resolve(self.connections[options.uuid]); if (self.connections[options.inMemory || options.uuid]) return Promise.resolve(self.connections[options.inMemory || options.uuid]);
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
self.connections[options.uuid] = new self.lib.Database(self.sequelize.options.storage || self.sequelize.options.host || ':memory:', function(err) { self.connections[options.inMemory || options.uuid] = new self.lib.Database(self.sequelize.options.storage || self.sequelize.options.host || ':memory:', function(err) {
if (err) { if (err) {
if (err.code === 'SQLITE_CANTOPEN') return reject(new sequelizeErrors.ConnectionError(err)); if (err.code === 'SQLITE_CANTOPEN') return reject(new sequelizeErrors.ConnectionError(err));
return reject(new sequelizeErrors.ConnectionError(err)); return reject(new sequelizeErrors.ConnectionError(err));
} }
resolve(self.connections[options.uuid]); resolve(self.connections[options.inMemory || options.uuid]);
}); });
}).tap(function (connection) { }).tap(function (connection) {
if (self.sequelize.options.foreignKeys !== false) { if (self.sequelize.options.foreignKeys !== false) {
......
...@@ -676,7 +676,7 @@ module.exports = (function() { ...@@ -676,7 +676,7 @@ module.exports = (function() {
).then(function (connection) { ).then(function (connection) {
var query = new self.dialect.Query(connection, self, callee, options); var query = new self.dialect.Query(connection, self, callee, options);
return query.run(sql).finally(function() { return query.run(sql).finally(function() {
if (options.transaction) return; if (options.transaction || (connection.filename === ":memory:")) return;
return self.connectionManager.releaseConnection(connection); return self.connectionManager.releaseConnection(connection);
}); });
}); });
......
...@@ -86,8 +86,43 @@ describe(Support.getTestDialectTeaser('Transaction'), function() { ...@@ -86,8 +86,43 @@ describe(Support.getTestDialectTeaser('Transaction'), function() {
).to.eventually.be.rejected; ).to.eventually.be.rejected;
}); });
if (current.dialect.supports.lock) { if (dialect === 'sqlite'){
describe('row locking', function() { it('provides persistent transactions', function (done) {
var sequelize = new Support.Sequelize('database', 'username', 'password', {dialect: 'sqlite'}),
User = sequelize.define('user', {
username: Support.Sequelize.STRING,
awesome: Support.Sequelize.BOOLEAN
});
return sequelize.transaction()
.then(function(t) {
return sequelize.sync({transaction:t})
.then(function( ) {
return t;
});
})
.then(function(t) {
return User.create({}, {transaction:t})
.then(function( ) {
t.commit();
});
})
.then(function( ) {
return sequelize.transaction();
})
.then(function(t) {
return User.findAll({}, {transaction:t});
})
.then(function(users) {
return expect(users.length).to.equal(1);
})
.then(function(object) {
done();
});
});
}
if (current.dialect.supports.lock) {
describe('row locking', function () {
this.timeout(10000); this.timeout(10000);
it('supports for update', function(done) { it('supports for update', function(done) {
var User = this.sequelize.define('user', { var User = this.sequelize.define('user', {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!