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

Commit de1d3e9d by Mick Hansen

Merge branch 'little-big-h-master'

2 parents 6ecece9a 1497e0dc
......@@ -11,6 +11,9 @@ ConnectionManager = function(dialect, sequelize) {
this.dialect = dialect;
this.connections = {};
// We attempt to parse file location from a connection uri but we shouldn't match sequelize default host.
if (this.sequelize.options.host === 'localhost') delete this.sequelize.options.host;
try {
this.lib = require(sequelize.config.dialectModulePath || 'sqlite3').verbose();
} catch (err) {
......@@ -24,16 +27,17 @@ ConnectionManager.prototype.getConnection = function(options) {
var self = this;
options = options || {};
options.uuid = options.uuid || 'default';
options.inMemory = ((self.sequelize.options.storage || self.sequelize.options.host || ':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) {
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.code === 'SQLITE_CANTOPEN') 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) {
if (self.sequelize.options.foreignKeys !== false) {
......@@ -44,9 +48,12 @@ ConnectionManager.prototype.getConnection = function(options) {
});
};
ConnectionManager.prototype.releaseConnection = function(connection) {
ConnectionManager.prototype.releaseConnection = function(connection, force) {
if (connection.filename === ":memory:" && force !== true) return;
if (connection.uuid) {
connection.close();
delete this.connections[connection.uuid];
}
};
......
......@@ -86,8 +86,41 @@ describe(Support.getTestDialectTeaser('Transaction'), function() {
).to.eventually.be.rejected;
});
if (current.dialect.supports.lock) {
describe('row locking', function() {
if (dialect === 'sqlite'){
it('provides persistent transactions', function () {
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);
});
});
}
if (current.dialect.supports.lock) {
describe('row locking', function () {
this.timeout(10000);
it('supports for update', function(done) {
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!