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

Commit ec532539 by Sascha Depold

Merge pull request #125 from megshark/master

Fixed sql logging, added tests
2 parents 070dd44b 9ef6a23c
......@@ -21,6 +21,7 @@ module.exports = (function() {
self.__factory.target.findAllJoin(self.__factory.connectorModel.tableName, {where: where})
.on('success', function(objects) { customEventEmitter.emit('success', objects) })
.on('failure', function(err){ customEventEmitter.emit('failure', err) })
.on('sql', function(sql) { customEventEmitter.emit('sql', sql)})
})
return customEventEmitter.run()
......@@ -31,6 +32,7 @@ module.exports = (function() {
destroyObsoleteAssociations.call(this, oldAssociations, newAssociations)
.error(function(err) { emitter.emit('failure', err) })
.on('sql', function(sql) { emitter.emit('sql', sql) })
.success(function() {
var chainer = new Utils.QueryChainer
, association = self.__factory.target.associations[self.__factory.associationAccessor]
......@@ -49,6 +51,7 @@ module.exports = (function() {
.run()
.success(function() { emitter.emit('success', newAssociations) })
.error(function(err) { emitter.emit('failure', err) })
.on('sql', function(sql) { emitter.emit('sql', sql) })
})
}
......@@ -82,6 +85,7 @@ module.exports = (function() {
.run()
.success(function() { emitter.emit('success', null) })
.error(function(err) { emitter.emit('failure', err) })
.on('sql', function(sql) { emitter.emit('sql', sql) })
}
})
})
......
......@@ -26,8 +26,8 @@ module.exports = (function() {
if(this.options.logging)
console.log('Executing: ' + this.sql)
this.client.query(this.sql, function(err, results, fields) {
//allow clients to listen to sql to do their own logging or whatnot
self.emit('sql', self.sql)
err ? onFailure.call(self, err) : onSuccess.call(self, results, fields)
}).setMaxListeners(100)
......@@ -76,6 +76,7 @@ module.exports = (function() {
unbindClient.call(this)
this.emit('success', result)
}
var onFailure = function(err) {
......
......@@ -20,5 +20,6 @@ module.exports = (function() {
return this
}
return Query
})()
......@@ -25,10 +25,9 @@ module.exports = (function() {
, isUpdateCommand = (self.sql.toLowerCase().indexOf('update') == 0)
, databaseMethod = (isInsertCommand || isUpdateCommand) ? 'run' : 'all'
self.database[databaseMethod](self.sql, function(err, results) {
//allow clients to listen to sql to do their own logging or whatnot
self.emit('sql', self.sql)
self.database[databaseMethod](self.sql, function(err, results) {
err ? onFailure.call(self, err) : onSuccess.call(self, results, this)
})
})
......
......@@ -33,5 +33,6 @@ module.exports = (function() {
return this
}
return CustomEventEmitter
})()
......@@ -68,6 +68,7 @@ module.exports = (function() {
.createTable(self.tableName, self.attributes, options)
.success(function() { emitter.emit('success', self) })
.error(function(err) { emitter.emit('failure', err) })
.on('sql', function(sql) { emitter.emit('sql', sql) })
}
if(options.force)
......
......@@ -99,6 +99,7 @@ module.exports = (function() {
self.fails.push(err)
finish.call(self)
})
.on('sql', function(sql){ self.eventEmitter.emit('sql', sql) })
}
var finish = function() {
......
......@@ -201,9 +201,10 @@ module.exports = (function() {
return new Utils.CustomEventEmitter(function(emitter) {
var sql = self.QueryGenerator.selectQuery(tableName, options)
self.sequelize
var qry = self.sequelize
.query(sql, null, { plain: true, raw: true })
.success(function(data) {
qry.success(function(data) {
self.emit('rawSelect', null)
emitter.emit('success', data[attributeSelector])
})
......@@ -211,6 +212,9 @@ module.exports = (function() {
self.emit('rawSelect', err)
emitter.emit('failure', err)
})
qry.on('sql', function(sql) {
emitter.emit('sql', sql)
})
}).run()
}
......@@ -244,6 +248,9 @@ module.exports = (function() {
self.emit(methodName, err)
emitter.emit('failure', err)
})
query.on('sql', function(sql) {
emitter.emit('sql', sql)
})
}).run()
}
......
......@@ -240,6 +240,45 @@ describe('HasMany', function() {
})
})
it("allows join table to be specified", function() {
Helpers.async(function(done) {
var Child = sequelize.define('Child', { name: Sequelize.STRING }, {underscore: true, freezeTableName: true})
var Parent = sequelize.define('Parent', { name: Sequelize.STRING }, {underscore: true, freezeTableName: true})
var ParentJoin = sequelize.define('ParentRelationship', { parent_id: Sequelize.INTEGER, child_id: Sequelize.INTEGER }, {underscore: true, freezeTableName: true})
Parent.hasMany(Child, {as: 'Children', foreignKey: 'child_id', joinTableName: 'ParentRelationship'})
Child.hasMany(Parent, {as: 'Parents', foreignKey: 'parent_id', joinTableName: 'ParentRelationship'})
var parents = []
ParentJoin.sync({force: true}).success(function() {
Parent.sync({force: true}).success(function() {
Child.sync({force: true}).success(function() {
Parent.create({name: 'mom'}).success(function(mom) {
parents.push(mom)
Parent.create({name: 'dad'}).success(function(dad) {
parents.push(dad)
Child.create({name: 'baby'}).success(function(baby) {
baby.setParents(parents).success(function(){
parents[0].getChildren().success(function(children){
expect(children).not.toBe(null)
expect(children.length).toBeDefined()
expect(children.length).toEqual(1)
expect(children[0]).toBeDefined()
expect(children[0].name).toEqual('baby')
done()
})
})
})
})
})
})
})
})
})
})
it("gets and sets the connector models", function() {
Helpers.async(function(done) {
var Person = sequelize.define('Person', { name: Sequelize.STRING })
......
......@@ -183,6 +183,19 @@ describe('ModelFactory', function() {
})
})
})
it('allows sql logging', function() {
Helpers.async(function(done) {
User
.create({ name: 'Fluffy Bunny', smth: 'else' })
.on('sql', function(sql) {
expect(sql).toBeDefined()
expect(sql.toUpperCase().indexOf("INSERT")).toBeGreaterThan(-1)
done()
})
})
})
})
describe('destroy', function() {
......@@ -210,6 +223,29 @@ describe('ModelFactory', function() {
})
})
it('allows sql logging of delete statements', function() {
Helpers.async(function(done) {
User = sequelize.define('User', {
name: Sequelize.STRING,
bio: Sequelize.TEXT
})
User.sync({force: true}).success(done)
})
Helpers.async(function(done) {
User.create({name: 'hallo', bio: 'welt'}).success(function(u) {
User.all().success(function(users) {
expect(users.length).toEqual(1)
u.destroy().on('sql', function(sql) {
expect(sql).toBeDefined()
expect(sql.toUpperCase().indexOf("DELETE")).toBeGreaterThan(-1)
done()
}).error(function(err) { console.log(err) })
}).error(function(err) { console.log(err) })
})
})
})
it('marks the database entry as deleted if model is paranoid', function() {
Helpers.async(function(done) {
User = sequelize.define('User', {
......@@ -228,6 +264,27 @@ describe('ModelFactory', function() {
})
})
})
it('allows sql logging of update statements', function() {
Helpers.async(function(done) {
User = sequelize.define('User', {
name: Sequelize.STRING, bio: Sequelize.TEXT
}, { paranoid:true })
User.sync({ force: true }).success(done)
})
Helpers.async(function(done) {
User.create({ name: 'meg', bio: 'none' }).success(function(u) {
expect(u).toBeDefined()
expect(u).not.toBe(null)
u.destroy().on('sql', function(sql) {
expect(sql).toBeDefined()
expect(sql.toUpperCase().indexOf("UPDATE")).toBeGreaterThan(-1)
done()
})
})
})
})
})
describe('find', function() {
......@@ -276,6 +333,17 @@ describe('ModelFactory', function() {
})
})
it('allows sql logging', function() {
Helpers.async(function(done) {
User.find({ where: { name: 'foo' } })
.on('sql', function(sql) {
expect(sql).toBeDefined()
expect(sql.toUpperCase().indexOf("SELECT")).toBeGreaterThan(-1)
done()
})
})
})
it('ignores passed limit option', function() {
Helpers.async(function(done) {
User.find({limit: 10}).success(function(user) {
......@@ -433,6 +501,17 @@ describe('ModelFactory', function() {
})
})
it('allows sql logging', function() {
Helpers.async(function(done) {
User.count()
.on('sql', function(sql) {
expect(sql).toBeDefined()
expect(sql.toUpperCase().indexOf("SELECT")).toBeGreaterThan(-1)
done()
})
})
})
it('filters object', function() {
Helpers.async(function(done) {
User.create({name: 'user1'}).success(function() {
......@@ -459,6 +538,16 @@ describe('ModelFactory', function() {
})
})
})
it('allows sql logging', function() {
Helpers.async(function(done) {
User.min('age')
.on('sql', function(sql) {
expect(sql).toBeDefined()
expect(sql.toUpperCase().indexOf("SELECT")).toBeGreaterThan(-1)
done()
})
})
})
})
describe('max', function() {
......@@ -471,6 +560,16 @@ describe('ModelFactory', function() {
})
})
})
it('allows sql logging', function() {
Helpers.async(function(done) {
User.max('age')
.on('sql', function(sql) {
expect(sql).toBeDefined()
expect(sql.toUpperCase().indexOf("SELECT")).toBeGreaterThan(-1)
done()
})
})
})
})
describe('equals', function() {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!