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

Commit b73243c6 by Sascha Depold

transaction support for findOrInitialize

1 parent 1bf29317
Showing with 35 additions and 3 deletions
...@@ -4,6 +4,7 @@ var Utils = require("./utils") ...@@ -4,6 +4,7 @@ var Utils = require("./utils")
, Util = require('util') , Util = require('util')
, sql = require('sql') , sql = require('sql')
, SqlString = require('./sql-string') , SqlString = require('./sql-string')
, Transaction = require('./transaction')
module.exports = (function() { module.exports = (function() {
var DAOFactory = function(name, attributes, options) { var DAOFactory = function(name, attributes, options) {
...@@ -546,15 +547,23 @@ module.exports = (function() { ...@@ -546,15 +547,23 @@ module.exports = (function() {
return this.build(values).save(fieldsOrOptions) return this.build(values).save(fieldsOrOptions)
} }
DAOFactory.prototype.findOrInitialize = DAOFactory.prototype.findOrBuild = function (params, defaults) { DAOFactory.prototype.findOrInitialize = DAOFactory.prototype.findOrBuild = function (params, defaults, options) {
defaults = defaults || {}
options = options || {}
var self = this var self = this
, defaultKeys = Object.keys(defaults || {}) , defaultKeys = Object.keys(defaults)
, defaultLength = defaultKeys.length , defaultLength = defaultKeys.length
if (!options.transaction && defaults.transaction && (defaults.transaction instanceof Transaction)) {
options.transaction = defaults.transaction
delete defaults.transaction
}
return new Utils.CustomEventEmitter(function (emitter) { return new Utils.CustomEventEmitter(function (emitter) {
self.find({ self.find({
where: params where: params
}).success(function (instance) { }, options).success(function (instance) {
if (instance === null) { if (instance === null) {
var i = 0 var i = 0
......
...@@ -351,6 +351,29 @@ describe(Support.getTestDialectTeaser("DAOFactory"), function () { ...@@ -351,6 +351,29 @@ describe(Support.getTestDialectTeaser("DAOFactory"), function () {
}) })
describe('findOrInitialize', function() { describe('findOrInitialize', function() {
it('supports transactions', function(done) {
Support.prepareTransactionTest(dialect, this.sequelize, function(sequelize) {
var User = sequelize.define('User', { username: Sequelize.STRING, foo: Sequelize.STRING })
User.sync({ force: true }).success(function() {
sequelize.transaction(function(t) {
User.create({ username: 'foo' }, { transaction: t }).success(function() {
User.findOrInitialize({ username: 'foo' }).success(function(user1) {
User.findOrInitialize({ username: 'foo' }, { transaction: t }).success(function(user2) {
User.findOrInitialize({ username: 'foo' }, { foo: 'asd' }, { transaction: t }).success(function(user3) {
expect(user1.isNewRecord).to.be.true
expect(user2.isNewRecord).to.be.false
expect(user3.isNewRecord).to.be.false
t.commit().success(done)
})
})
})
})
})
})
})
})
describe('returns an instance if it already exists', function() { describe('returns an instance if it already exists', function() {
it('with a single find field', function (done) { it('with a single find field', function (done) {
var self = this var self = this
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!