Socket
Socket
Sign inDemoInstall

sequelize

Package Overview
Dependencies
Maintainers
1
Versions
623
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sequelize - npm Package Compare versions

Comparing version 1.5.0-beta to 1.5.0-beta-2

spec/buster-helpers.js

16

changelog.md
# v1.5.0 #
- [REFACTORING] use underscore functions for Utils.isHash (thanks to Mick-Hansen)
- [REFACTORING] use underscore functions for Utils.isHash (thanks to Mick-Hansen/innofluence)
- [REFACTORING] removed the 'failure' event and replaced it with 'error'
- [BUG] fixed booleans for sqlite (thanks to vlmonk)
- [BUG] obsolete reference attribute for many-to-many associations are removed correctly
- [BUG] associations can be cleared via passing null to the set method
- [BUG] "fixed" quota handling (thanks to dgf)
- [FEATURE] added possibility to set protocol and to remove port from postgresql connection uri (thanks to danielschwartz)
- [FEATURE] added possibility to not use a junction table for many-to-many associations on the same table (thanks to innofluence)
- [FEATURE] results of the `import` method is now cached (thanks to janmeier)
- [FEATURE] added possibility to check if a specific object or a whole bunch of objects is currently associated with another object (thanks to janmeier)
- [FEATURE] added possibility to globally disable adding of NULL values to sql queries (thanks to janmeier)
- [FEATURE] Model.create can now also be used to specify values for mass assignment (thanks to janmeier)
- [FEATURE] added possibility to not use a junction table for many-to-many associations on the same table (thanks to janmeier/innofluence)
- [FEATURE] results of the `import` method is now cached (thanks to janmeier/innofluence)
- [FEATURE] added possibility to check if a specific object or a whole bunch of objects is currently associated with another object (thanks to janmeier/innofluence)
- [FEATURE] added possibility to globally disable adding of NULL values to sql queries (thanks to janmeier/innofluence)
- [FEATURE] Model.create can now also be used to specify values for mass assignment (thanks to janmeier/innofluence)
- [FEATURE] QueryChainer will now provide the results of the added emitters in the order the emitters have been added (thanks to LaurentZuijdwijk and me ;))
- [FEATURE] QueryChainer can now be initialized with serial items
- [FEATURE] node 0.8 compatibility
- [FEATURE] added options to hasMany getters (thanks to janmeier/innofluence)
- [FEATURE] pooling option is now correctly passed to postgres (thanks to megshark)

@@ -16,0 +20,0 @@ # v1.4.1 #

@@ -9,7 +9,7 @@ var Utils = require('./../utils')

HasManyDoubleLinked.prototype.injectGetter = function() {
var self = this
HasManyDoubleLinked.prototype.injectGetter = function(options) {
var self = this, _options = options
var customEventEmitter = new Utils.CustomEventEmitter(function() {
var where = {}
var where = {}, options = _options || {};

@@ -23,3 +23,15 @@ //fully qualify

where[self.__factory.connectorDAO.tableName+"."+foreignKey] = {join: self.__factory.target.tableName+".id"}
self.__factory.target.findAllJoin(self.__factory.connectorDAO.tableName, {where: where})
if (options.where) {
Utils._.each(options.where, function(value, index) {
delete options.where[index];
options.where[self.__factory.target.tableName+"."+index] = value;
});
options.where = options.where ? Utils.merge(options.where, where) : where
} else {
options.where = where;
}
self.__factory.target.findAllJoin(self.__factory.connectorDAO.tableName, options)
.on('success', function(objects) { customEventEmitter.emit('success', objects) })

@@ -26,0 +38,0 @@ .on('error', function(err){ customEventEmitter.emit('error', err) })

@@ -9,7 +9,9 @@ var Utils = require('./../utils')

HasManySingleLinked.prototype.injectGetter = function() {
var where = {}
HasManySingleLinked.prototype.injectGetter = function(options) {
var where = {}, options = options || {}
where[this.__factory.identifier] = this.instance.id
return this.__factory.target.findAll({where: where})
options.where = options.where ? Utils.merge(options.where, where) : where
return this.__factory.target.findAll(options)
}

@@ -19,3 +21,3 @@

var self = this
, options = this.options || {}
, options = this.__factory.options

@@ -22,0 +24,0 @@ // clear the old associations

@@ -75,5 +75,5 @@ var Utils = require("./../utils")

obj[this.accessors.get] = function() {
obj[this.accessors.get] = function(options) {
var Class = self.connectorDAO ? HasManyMultiLinked : HasManySingleLinked
return new Class(self, this).injectGetter()
return new Class(self, this).injectGetter(options)
}

@@ -80,0 +80,0 @@

var Query = require("./query")
, Utils = require("../../utils")
, pg = require("pg")
, without = function(arr, elem) { return arr.filter(function(e) { return e != elem }) }

@@ -10,2 +11,8 @@

this.config = config || {}
this.pooling = (this.config.poolCfg != null && this.config.poolCfg.maxConnections > 0)
// set pooling parameters if specified
if (this.pooling) {
pg.defaults.poolSize = this.config.poolCfg.maxConnections
pg.defaults.poolIdleTimeout = this.config.poolCfg.maxIdleTime
}
this.disconnectTimeoutId = null

@@ -48,8 +55,5 @@ this.pendingQueries = 0

var pg = require("pg")
, uri = this.sequelize.getQueryInterface().QueryGenerator.databaseConnectionUri(this.config)
var uri = this.sequelize.getQueryInterface().QueryGenerator.databaseConnectionUri(this.config)
this.client = new pg.Client(uri)
this.client.connect(function(err, client) {
var connectCallback = function(err, client) {
self.isConnecting = false

@@ -65,3 +69,13 @@ if (!err && client) {

}
})
}
if (this.pooling) {
// acquire client from pool
pg.connect(uri, connectCallback)
} else {
//create one-off client
this.client = new pg.Client(uri)
this.client.connect(connectCallback)
}
}

@@ -68,0 +82,0 @@

@@ -241,6 +241,7 @@ var Utils = require('./utils')

if(Array.isArray(sqlOrQueryParams))
if(Array.isArray(sqlOrQueryParams)) {
query = self.sequelize.query.apply(self.sequelize, sqlOrQueryParams)
else
} else {
query = self.sequelize.query(sqlOrQueryParams)
}

@@ -247,0 +248,0 @@ // append the query for better testing

{
"name": "sequelize",
"description": "Multi dialect ORM for Node.JS",
"version": "1.5.0-beta",
"version": "1.5.0-beta-2",
"author": "Sascha Depold <sascha@depold.com>",

@@ -18,2 +18,6 @@ "contributors": [

"email": "sky@skytrife.com"
},
{
"name": "Jan Aagaard Meier (Innofluence)",
"email": "jam@innofluence.com"
}

@@ -32,4 +36,4 @@ ],

"devDependencies": {
"jasmine-node": "1.0.22",
"sqlite3": ">=2.0.0",
"jasmine-node": "1.0.17",
"sqlite3": "~2.1.5",
"pg": "0.6.x",

@@ -36,0 +40,0 @@ "buster": "~0.6.0"

@@ -22,5 +22,6 @@ module.exports = {

username: "postgres",
port: 5432
port: 5432,
pool: { maxConnections: 5, maxIdleTime: 30}
}
}
if (typeof require === 'function') {
const buster = require("buster")
, Sequelize = require("../../index")
, config = require("../config/config")
, sequelize = new Sequelize(config.database, config.username, config.password, {
logging: false
})
, Helpers = require('../buster-helpers')
, Sequelize = require('../../index')
}

@@ -14,10 +11,19 @@

describe('BelongsTo', function() {
before(function(done) {
var self = this
Helpers.initTests({
beforeComplete: function(sequelize) { self.sequelize = sequelize },
onComplete: done
})
})
describe('setAssociation', function() {
it('clears the association if null is passed', function(done) {
var User = sequelize.define('User', { username: Sequelize.STRING })
, Task = sequelize.define('Task', { title: Sequelize.STRING })
var User = this.sequelize.define('User', { username: Sequelize.STRING })
, Task = this.sequelize.define('Task', { title: Sequelize.STRING })
Task.belongsTo(User)
sequelize.sync({ force: true }).success(function() {
this.sequelize.sync({ force: true }).success(function() {
User.create({ username: 'foo' }).success(function(user) {

@@ -24,0 +30,0 @@ Task.create({ title: 'task' }).success(function(task) {

if (typeof require === 'function') {
const buster = require("buster")
, Sequelize = require("../../index")
, config = require("../config/config")
, sequelize = new Sequelize(config.database, config.username, config.password, {
logging: false
})
, Helpers = require('../buster-helpers')
, Sequelize = require('../../index')
}

@@ -17,9 +14,6 @@

sequelize.getQueryInterface()
.dropAllTables()
.success(function() {
sequelize.daoFactoryManager.daos = []
done()
})
.error(function(err) { console.log(err) })
Helpers.initTests({
beforeComplete: function(sequelize) { self.sequelize = sequelize },
onComplete: done
})
})

@@ -30,10 +24,8 @@

before(function(done) {
var self = this
this.Article = this.sequelize.define('Article', { 'title': Sequelize.STRING })
this.Label = this.sequelize.define('Label', { 'text': Sequelize.STRING })
this.Article = sequelize.define('Article', { 'title': Sequelize.STRING })
this.Label = sequelize.define('Label', { 'text': Sequelize.STRING })
this.Article.hasMany(this.Label)
sequelize.sync({ force: true }).success(done)
this.sequelize.sync({ force: true }).success(done)
})

@@ -91,10 +83,8 @@

before(function(done) {
var self = this
this.Article = this.sequelize.define('Article', { 'title': Sequelize.STRING })
this.Label = this.sequelize.define('Label', { 'text': Sequelize.STRING })
this.Article = sequelize.define('Article', { 'title': Sequelize.STRING })
this.Label = sequelize.define('Label', { 'text': Sequelize.STRING })
this.Article.hasMany(this.Label)
sequelize.sync({ force: true }).success(done)
this.sequelize.sync({ force: true }).success(done)
})

@@ -143,8 +133,8 @@

it("clears associations when passing null to the set-method", function(done) {
var User = sequelize.define('User', { username: Sequelize.STRING })
, Task = sequelize.define('Task', { title: Sequelize.STRING })
var User = this.sequelize.define('User', { username: Sequelize.STRING })
, Task = this.sequelize.define('Task', { title: Sequelize.STRING })
Task.hasMany(User)
sequelize.sync({ force: true }).success(function() {
this.sequelize.sync({ force: true }).success(function() {
User.create({ username: 'foo' }).success(function(user) {

@@ -169,8 +159,119 @@ Task.create({ title: 'task' }).success(function(task) {

})
it("clears associations when passing null to the set-method with omitNull set to true", function(done) {
this.sequelize.options.omitNull = true;
var User = this.sequelize.define('User', { username: Sequelize.STRING })
, Task = this.sequelize.define('Task', { title: Sequelize.STRING })
Task.hasMany(User)
this.sequelize.sync({ force: true }).success(function() {
User.create({ username: 'foo' }).success(function(user) {
Task.create({ title: 'task' }).success(function(task) {
task.setUsers([ user ]).success(function() {
task.getUsers().success(function(_users) {
expect(_users.length).toEqual(1)
task.setUsers(null).success(function() {
task.getUsers().success(function(_users) {
expect(_users.length).toEqual(0)
done()
})
})
})
})
})
})
})
})
describe("getting assocations with options", function() {
before(function(done) {
var self = this;
this.User = this.sequelize.define('User', { username: Sequelize.STRING })
this.Task = this.sequelize.define('Task', { title: Sequelize.STRING, active: Sequelize.BOOLEAN })
this.User.hasMany(self.Task)
this.sequelize.sync({ force: true }).done(function() {
var chainer = new Sequelize.Utils.QueryChainer([
self.User.create({ username: 'John'}),
self.Task.create({ title: 'Get rich', active: true}),
self.Task.create({ title: 'Die trying', active: false})
])
chainer.run().success(function (results, john, task1, task2) {
john.setTasks([task1, task2]).success(done)
})
})
})
it("gets all associated objects when no options are passed", function(done) {
this.User.find({where: {username: 'John'}}).success(function (john) {
john.getTasks().success(function (tasks) {
expect(tasks.length).toEqual(2)
done();
})
})
})
it("only get objects that fullfil the options", function(done) {
this.User.find({where: {username: 'John'}}).success(function (john) {
john.getTasks({where: {active: true}, limit: 10, order: 'ID DESC'}).success(function (tasks) {
expect(tasks.length).toEqual(1)
done();
})
})
})
})
})
describe('(N:M)', function() {
describe("getting assocations with options", function() {
before(function(done) {
var self = this;
this.User = this.sequelize.define('User', { username: Sequelize.STRING })
this.Task = this.sequelize.define('Task', { title: Sequelize.STRING, active: Sequelize.BOOLEAN })
self.User.hasMany(self.Task)
self.Task.hasMany(self.User)
this.sequelize.sync({ force: true }).done(function() {
var chainer = new Sequelize.Utils.QueryChainer([
self.User.create({ username: 'John'}),
self.Task.create({ title: 'Get rich', active: true}),
self.Task.create({ title: 'Die trying', active: false})
])
chainer.run().success(function (results, john, task1, task2) {
john.setTasks([task1, task2]).success(done)
})
})
})
it("gets all associated objects when no options are passed", function(done) {
this.User.find({where: {username: 'John'}}).success(function (john) {
john.getTasks().success(function (tasks) {
expect(tasks.length).toEqual(2)
done();
})
})
})
it("only get objects that fullfil the options", function(done) {
this.User.find({where: {username: 'John'}}).success(function (john) {
john.getTasks({where: {active: true}}).success(function (tasks) {
expect(tasks.length).toEqual(1)
done();
})
})
})
})
it("removes the reference id, which was added in the first place", function() {
var User = sequelize.define('User', { username: Sequelize.STRING })
, Task = sequelize.define('Task', { title: Sequelize.STRING })
var User = this.sequelize.define('User', { username: Sequelize.STRING })
, Task = this.sequelize.define('Task', { title: Sequelize.STRING })

@@ -185,4 +286,4 @@ User.hasMany(Task)

it("adds three items to the query chainer when calling sync", function() {
var User = sequelize.define('User', { username: Sequelize.STRING })
, Task = sequelize.define('Task', { title: Sequelize.STRING })
var User = this.sequelize.define('User', { username: Sequelize.STRING })
, Task = this.sequelize.define('Task', { title: Sequelize.STRING })

@@ -196,3 +297,3 @@ User.hasMany(Task)

sequelize.sync({ force: true })
this.sequelize.sync({ force: true })
expect(add).toHaveBeenCalledThrice()

@@ -203,4 +304,4 @@ })

it("clears associations when passing null to the set-method", function(done) {
var User = sequelize.define('User', { username: Sequelize.STRING })
, Task = sequelize.define('Task', { title: Sequelize.STRING })
var User = this.sequelize.define('User', { username: Sequelize.STRING })
, Task = this.sequelize.define('Task', { title: Sequelize.STRING })

@@ -210,3 +311,3 @@ User.hasMany(Task)

sequelize.sync({ force: true }).success(function() {
this.sequelize.sync({ force: true }).success(function() {
User.create({ username: 'foo' }).success(function(user) {

@@ -213,0 +314,0 @@ Task.create({ title: 'task' }).success(function(task) {

if (typeof require === 'function') {
const buster = require("buster")
, Sequelize = require("../../index")
, config = require("../config/config")
, sequelize = new Sequelize(config.database, config.username, config.password, {
logging: false
})
, Helpers = require('../buster-helpers')
}

@@ -17,9 +14,6 @@

sequelize.getQueryInterface()
.dropAllTables()
.success(function() {
sequelize.daoFactoryManager.daos = []
done()
})
.error(function(err) { console.log(err) })
Helpers.initTests({
beforeComplete: function(sequelize) { self.sequelize = sequelize },
onComplete: done
})
})

@@ -29,8 +23,8 @@

it('clears the association if null is passed', function(done) {
var User = sequelize.define('User', { username: Sequelize.STRING })
, Task = sequelize.define('Task', { title: Sequelize.STRING })
var User = this.sequelize.define('User', { username: Sequelize.STRING })
, Task = this.sequelize.define('Task', { title: Sequelize.STRING })
User.hasOne(Task)
sequelize.sync({ force: true }).success(function() {
this.sequelize.sync({ force: true }).success(function() {
User.create({ username: 'foo' }).success(function(user) {

@@ -37,0 +31,0 @@ Task.create({ title: 'task' }).success(function(task) {

@@ -6,3 +6,27 @@ module.exports = {

host: '127.0.0.1',
pool: { maxConnections: 5, maxIdleTime: 30000}
pool: { maxConnections: 5, maxIdleTime: 30000},
rand: function() {
return parseInt(Math.random() * 999)
},
//make maxIdleTime small so that tests exit promptly
mysql: {
username: "root",
password: null,
database: 'sequelize_test',
host: '127.0.0.1',
port: 3306,
pool: { maxConnections: 5, maxIdleTime: 30}
},
sqlite: {
},
postgres: {
database: 'sequelize_test',
username: "postgres",
port: 5432,
pool: { maxConnections: 5, maxIdleTime: 30}
}
}
if(typeof require === 'function') {
const buster = require("buster")
, Sequelize = require("../index")
, config = require("./config/config")
, dialects = ['sqlite', 'mysql', 'postgres']
const buster = require("buster")
, dialects = ['sqlite', 'mysql', 'postgres']
, Helpers = require('./buster-helpers')
}

@@ -15,23 +14,15 @@

this.sequelize = new Sequelize(config.database, config.username, config.password, {
logging: false
Helpers.initTests({
dialect: dialect,
beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize
self.User = sequelize.define('User', {
username: { type: DataTypes.STRING },
touchedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW }
})
},
onComplete: function(sequelize) {
self.User.sync({ force: true }).success(done)
}
})
this.User = this.sequelize.define('User', {
username: { type: Sequelize.STRING },
touchedAt: { type: Sequelize.DATE, defaultValue: Sequelize.NOW }
})
self.sequelize
.getQueryInterface()
.dropAllTables()
.success(function() {
self.User
.sync({ force: true })
.success(done)
.error(function(err) {
console.log(err)
})
})
.error(function(err) { console.log(err) })
})

@@ -38,0 +29,0 @@

if(typeof require === 'function') {
const buster = require("buster")
, Sequelize = require("../../index")
, config = require("../config/config")
const buster = require("buster")
, Helpers = require('../buster-helpers')
}

@@ -13,18 +12,15 @@

this.sequelize = new Sequelize(config.database, config.username, config.password, {
logging: false,
dialect: 'sqlite'
})
Helpers.initTests({
dialect: 'sqlite',
beforeComplete: function(sequelize, DataTypes) {
self.sequelize = sequelize
this.User = this.sequelize.define('User', {
username: Sequelize.STRING
self.User = sequelize.define('User', {
username: DataTypes.STRING
})
},
onComplete: function(sequelize) {
self.User.sync({ force: true }).success(done)
}
})
self.sequelize
.getQueryInterface()
.dropAllTables()
.success(function() {
self.User.sync({ force: true }).success(done)
})
.error(function(err) { console.log(err) })
})

@@ -31,0 +27,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc