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

Commit e6f67ba3 by Sascha Depold

Merge branch 'master' into milestones/2.0.0

2 parents bd2e3b20 9faa1b31
...@@ -4,4 +4,5 @@ test*.js ...@@ -4,4 +4,5 @@ test*.js
.DS_STORE .DS_STORE
node_modules node_modules
npm-debug.log npm-debug.log
*~ *~
\ No newline at end of file test/binary/tmp/*
...@@ -27,7 +27,7 @@ postgres: ...@@ -27,7 +27,7 @@ postgres:
postgres-native: postgres-native:
@DIALECT=postgres-native make test @DIALECT=postgres-native make test
binary: binary:
@./test/binary/test.bats @./test/binary/sequelize.test.bats
# test aliases # test aliases
......
...@@ -47,7 +47,9 @@ module.exports = (function() { ...@@ -47,7 +47,9 @@ module.exports = (function() {
this.foreignIdentifier = Utils._.underscoredIf((this.options.as || this.target.tableName) + 'Id', this.options.underscored) this.foreignIdentifier = Utils._.underscoredIf((this.options.as || this.target.tableName) + 'Id', this.options.underscored)
} else { } else {
this.foreignIdentifier = this.target.associations[this.associationAccessor].identifier this.foreignIdentifier = this.target.associations[this.associationAccessor].identifier
this.target.associations[this.associationAccessor].foreignIdentifier = this.identifier
delete this.source.rawAttributes[this.foreignIdentifier] delete this.source.rawAttributes[this.foreignIdentifier]
delete this.target.associations[this.associationAccessor].source.rawAttributes[this.identifier]
} }
// define a new model, which connects the models // define a new model, which connects the models
......
...@@ -187,14 +187,27 @@ module.exports = (function() { ...@@ -187,14 +187,27 @@ module.exports = (function() {
optAttributes = optAttributes.concat(attributes) optAttributes = optAttributes.concat(attributes)
var table = include.daoFactory.tableName if (!include.association.connectorDAO) {
var as = include.as var table = include.daoFactory.tableName
var tableLeft = ((include.association.associationType === 'BelongsTo') ? include.as : tableName) var as = include.as
var attrLeft = 'id' var tableLeft = ((include.association.associationType === 'BelongsTo') ? include.as : tableName)
var tableRight = ((include.association.associationType === 'BelongsTo') ? tableName : include.as) var attrLeft = 'id'
var attrRight = include.association.identifier var tableRight = ((include.association.associationType === 'BelongsTo') ? tableName : include.as)
joinQuery += " LEFT OUTER JOIN " + this.quoteIdentifier(table) + " AS " + this.quoteIdentifier(as) + " ON " + this.quoteIdentifier(tableLeft) + "." + this.quoteIdentifier(attrLeft) + " = " + this.quoteIdentifier(tableRight) + "." + this.quoteIdentifier(attrRight) var attrRight = include.association.identifier
joinQuery += " LEFT OUTER JOIN " + this.quoteIdentifier(table) + " AS " + this.quoteIdentifier(as) + " ON " + this.quoteIdentifier(tableLeft) + "." + this.quoteIdentifier(attrLeft) + " = " + this.quoteIdentifier(tableRight) + "." + this.quoteIdentifier(attrRight)
} else {
var table = include.daoFactory.tableName
var as = include.as
var tableLeft = tableName
var identLeft = include.association.identifier
var attrLeft = 'id'
var tableRight = include.as
var identRight = include.association.foreignIdentifier
var attrRight = 'id'
var tableJunction = include.association.connectorDAO.tableName
joinQuery += " LEFT OUTER JOIN " + this.quoteIdentifier(tableJunction) + " ON " + this.quoteIdentifier(tableLeft) + "." + this.quoteIdentifier(attrLeft) + " = " + this.quoteIdentifier(tableJunction) + "." + this.quoteIdentifier(identLeft)
joinQuery += " LEFT OUTER JOIN " + this.quoteIdentifier(table) + " AS " + this.quoteIdentifier(as) + " ON " + this.quoteIdentifier(tableRight) + "." + this.quoteIdentifier(attrRight) + " = " + this.quoteIdentifier(tableJunction) + "." + this.quoteIdentifier(identRight)
}
}.bind(this)) }.bind(this))
options.attributes = optAttributes.join(', ') options.attributes = optAttributes.join(', ')
......
...@@ -260,14 +260,34 @@ module.exports = (function() { ...@@ -260,14 +260,34 @@ module.exports = (function() {
var joinQuery = ' LEFT OUTER JOIN <%= table %> AS <%= as %> ON <%= tableLeft %>.<%= attrLeft %> = <%= tableRight %>.<%= attrRight %>' var joinQuery = ' LEFT OUTER JOIN <%= table %> AS <%= as %> ON <%= tableLeft %>.<%= attrLeft %> = <%= tableRight %>.<%= attrRight %>'
query += Utils._.template(joinQuery)({ if (!include.association.connectorDAO) {
table: this.quoteIdentifiers(include.daoFactory.tableName), query += Utils._.template(joinQuery)({
as: this.quoteIdentifier(include.as), table: this.quoteIdentifiers(include.daoFactory.tableName),
tableLeft: this.quoteIdentifiers((include.association.associationType === 'BelongsTo') ? include.as : tableName), as: this.quoteIdentifier(include.as),
attrLeft: this.quoteIdentifier('id'), tableLeft: this.quoteIdentifiers((include.association.associationType === 'BelongsTo') ? include.as : tableName),
tableRight: this.quoteIdentifiers((include.association.associationType === 'BelongsTo') ? tableName : include.as), attrLeft: this.quoteIdentifier('id'),
attrRight: this.quoteIdentifier(include.association.identifier) tableRight: this.quoteIdentifiers((include.association.associationType === 'BelongsTo') ? tableName : include.as),
}) attrRight: this.quoteIdentifier(include.association.identifier)
})
} else {
query += Utils._.template(joinQuery)({
table: this.quoteIdentifiers(include.association.connectorDAO.tableName),
as: this.quoteIdentifier(include.association.connectorDAO.tableName),
tableLeft: this.quoteIdentifiers(tableName),
attrLeft: this.quoteIdentifier('id'),
tableRight: this.quoteIdentifiers(include.association.connectorDAO.tableName),
attrRight: this.quoteIdentifier(include.association.identifier)
})
query += Utils._.template(joinQuery)({
table: this.quoteIdentifiers(include.daoFactory.tableName),
as: this.quoteIdentifier(include.as),
tableLeft: this.quoteIdentifiers(include.as),
attrLeft: this.quoteIdentifier('id'),
tableRight: this.quoteIdentifiers(include.association.connectorDAO.tableName),
attrRight: this.quoteIdentifier(include.association.foreignIdentifier)
})
}
}.bind(this)) }.bind(this))
options.attributes = optAttributes.join(', ') options.attributes = optAttributes.join(', ')
......
...@@ -169,13 +169,27 @@ module.exports = (function() { ...@@ -169,13 +169,27 @@ module.exports = (function() {
optAttributes = optAttributes.concat(attributes) optAttributes = optAttributes.concat(attributes)
var table = include.daoFactory.tableName if (!include.association.connectorDAO) {
var as = include.as var table = include.daoFactory.tableName
var tableLeft = ((include.association.associationType === 'BelongsTo') ? include.as : tableName) var as = include.as
var attrLeft = 'id' var tableLeft = ((include.association.associationType === 'BelongsTo') ? include.as : tableName)
var tableRight = ((include.association.associationType === 'BelongsTo') ? tableName : include.as) var attrLeft = 'id'
var attrRight = include.association.identifier var tableRight = ((include.association.associationType === 'BelongsTo') ? tableName : include.as)
joinQuery += " LEFT OUTER JOIN " + this.quoteIdentifier(table) + " AS " + this.quoteIdentifier(as) + " ON " + this.quoteIdentifier(tableLeft) + "." + this.quoteIdentifier(attrLeft) + " = " + this.quoteIdentifier(tableRight) + "." + this.quoteIdentifier(attrRight) + "" var attrRight = include.association.identifier
joinQuery += " LEFT OUTER JOIN " + this.quoteIdentifier(table) + " AS " + this.quoteIdentifier(as) + " ON " + this.quoteIdentifier(tableLeft) + "." + this.quoteIdentifier(attrLeft) + " = " + this.quoteIdentifier(tableRight) + "." + this.quoteIdentifier(attrRight)
} else {
var table = include.daoFactory.tableName
var as = include.as
var tableLeft = tableName
var identLeft = include.association.identifier
var attrLeft = 'id'
var tableRight = include.as
var identRight = include.association.foreignIdentifier
var attrRight = 'id'
var tableJunction = include.association.connectorDAO.tableName
joinQuery += " LEFT OUTER JOIN " + this.quoteIdentifier(tableJunction) + " ON " + this.quoteIdentifier(tableLeft) + "." + this.quoteIdentifier(attrLeft) + " = " + this.quoteIdentifier(tableJunction) + "." + this.quoteIdentifier(identLeft)
joinQuery += " LEFT OUTER JOIN " + this.quoteIdentifier(table) + " AS " + this.quoteIdentifier(as) + " ON " + this.quoteIdentifier(tableRight) + "." + this.quoteIdentifier(attrRight) + " = " + this.quoteIdentifier(tableJunction) + "." + this.quoteIdentifier(identRight)
}
}.bind(this)) }.bind(this))
......
...@@ -381,6 +381,13 @@ describe(Support.getTestDialectTeaser("HasMany"), function() { ...@@ -381,6 +381,13 @@ describe(Support.getTestDialectTeaser("HasMany"), function() {
}) })
}) })
}) })
it("get associated objects with an eager load", function(done) {
this.User.find({where: {username: 'John'}, include: [ this.Task ]}).success(function (john) {
expect(john.tasks).to.have.length(2);
done();
})
})
}) })
it("removes the reference id, which was added in the first place", function(done) { it("removes the reference id, which was added in the first place", function(done) {
......
#!/usr/bin/env test/binary/bats/bin/bats
@test "no arguments prints usage instructions" {
run bin/sequelize
[ $status -eq 0 ]
[ $(expr "${lines[0]}" : "Using environment 'development'.") -ne 0 ]
[ $(expr "${lines[1]}" : "Try \"sequelize --help\" for usage information.") -ne 0 ]
}
@test "--help prints the help" {
run bin/sequelize --help
[ $status -eq 0 ]
[ "${lines[0]}" = " Usage: sequelize [options]" ]
}
@test "-h prints the help" {
run bin/sequelize -h
[ $status -eq 0 ]
[ "${lines[0]}" = " Usage: sequelize [options]" ]
}
@test "--version prints the current version" {
run bin/sequelize --version
[ $status -eq 0 ]
[ "${lines[0]}" = `cat package.json|grep version|cut -f2 -d:|cut -f2 -d\"` ]
}
@test "-V prints the current version" {
run bin/sequelize -V
[ $status -eq 0 ]
[ "${lines[0]}" = `cat package.json|grep version|cut -f2 -d:|cut -f2 -d\"` ]
}
@test "--init creates a config folder" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize --init
run ls -ila
[ $status -eq 0 ]
[ $(echo "${output}" | grep -b -o "config"|cut -d: -f1) -gt 0 ]
cd ../../..
}
@test "--init creates a migrations folder" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize --init
run ls -ila
[ $status -eq 0 ]
[ $(echo "${output}" | grep -b -o "migrations"|cut -d: -f1) -gt 0 ]
cd ../../..
}
@test "--init creates a config.json file" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize --init
run ls -ila config
[ $status -eq 0 ]
[ $(echo "${output}" | grep -b -o "config.json"|cut -d: -f1) -gt 0 ]
cd ../../..
}
@test "--init does not overwrite an existing config.json file" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize --init
echo "foo" > config/config.json
run ../../../bin/sequelize --init
[ $status -eq 1 ]
run cat config/config.json
[ $status -eq 0 ]
[ "${lines[0]}" = "foo" ]
cd ../../..
}
@test "--init does overwrite an existing config.json file if --force is added" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize --init
echo "foo" > config/config.json
run ../../../bin/sequelize --init -f
[ $status -eq 0 ]
run cat config/config.json
[ $status -eq 0 ]
[ "${lines[0]}" != "foo" ]
cd ../../..
}
@test "-i creates a config folder" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize -i
run ls -ila
[ $status -eq 0 ]
[ $(echo "${output}" | grep -b -o "config"|cut -d: -f1) -gt 0 ]
cd ../../..
}
@test "-i creates a migrations folder" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize -i
run ls -ila
[ $status -eq 0 ]
[ $(echo "${output}" | grep -b -o "migrations"|cut -d: -f1) -gt 0 ]
cd ../../..
}
@test "-i creates a config.json file" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize -i
run ls -ila config
[ $status -eq 0 ]
[ $(echo "${output}" | grep -b -o "config.json"|cut -d: -f1) -gt 0 ]
cd ../../..
}
@test "-i does not overwrite an existing config.json file" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize -i
echo "foo" > config/config.json
run ../../../bin/sequelize -i
[ $status -eq 1 ]
run cat config/config.json
[ $status -eq 0 ]
[ "${lines[0]}" = "foo" ]
cd ../../..
}
@test "-i does overwrite an existing config.json file if --force is added" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize -i
echo "foo" > config/config.json
run ../../../bin/sequelize -i -f
[ $status -eq 0 ]
run cat config/config.json
[ $status -eq 0 ]
[ "${lines[0]}" != "foo" ]
cd ../../..
}
@test "--env switches the environment" {
run bin/sequelize --env production
[ $status -eq 0 ]
[ $(expr "${lines[0]}" : "Using environment 'production'.") -ne 0 ]
}
@test "-e switches the environment" {
run bin/sequelize -e production
[ $status -eq 0 ]
[ $(expr "${lines[0]}" : "Using environment 'production'.") -ne 0 ]
}
@test "--create-migration creates a new file with the current timestamp" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize -i
../../../bin/sequelize --create-migration "foo"
needle=`node -e "var d=new Date(); var f=function(i){ return (parseInt(i, 10) < 10 ? '0' + i : i) }; console.log([d.getFullYear(), f(d.getMonth() + 1), f(d.getDate()), f(d.getHours()), f(d.getMinutes()), f(d.getSeconds())].join(''))"`
run ls -1 migrations
[ $status -eq 0 ]
[ $(expr "${lines[0]}" : "${needle}-foo.js") -ne 0 ]
cd ../../..
}
@test "--create-migration adds a skeleton with an up and a down method" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize -i
../../../bin/sequelize --create-migration "foo"
run cat migrations/*-foo.js
[ $status -eq 0 ]
[ $(expr "${lines[1]}" : " up: function(migration, DataTypes, done) {") -ne 0 ]
[ $(expr "${lines[5]}" : " down: function(migration, DataTypes, done) {") -ne 0 ]
cd ../../..
}
@test "--create-migration calls the done callback" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize -i
../../../bin/sequelize --create-migration "foo"
run cat migrations/*-foo.js
[ $status -eq 0 ]
[ $(expr "${lines[3]}" : " done()") -ne 0 ]
[ $(expr "${lines[7]}" : " done()") -ne 0 ]
cd ../../..
}
@test "-c creates a new file with the current timestamp" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize -i
../../../bin/sequelize -c "foo"
needle=`node -e "var d=new Date(); var f=function(i){ return (parseInt(i, 10) < 10 ? '0' + i : i) }; console.log([d.getFullYear(), f(d.getMonth() + 1), f(d.getDate()), f(d.getHours()), f(d.getMinutes()), f(d.getSeconds())].join(''))"`
run ls -1 migrations
[ $status -eq 0 ]
[ $(expr "${lines[0]}" : "${needle}-foo.js") -ne 0 ]
cd ../../..
}
@test "-c adds a skeleton with an up and a down method" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize -i
../../../bin/sequelize -c "foo"
run cat migrations/*-foo.js
[ $status -eq 0 ]
[ $(expr "${lines[1]}" : " up: function(migration, DataTypes, done) {") -ne 0 ]
[ $(expr "${lines[5]}" : " down: function(migration, DataTypes, done) {") -ne 0 ]
cd ../../..
}
@test "-c calls the done callback" {
cd test/binary/tmp
rm -rf ./*
../../../bin/sequelize -i
../../../bin/sequelize -c "foo"
run cat migrations/*-foo.js
[ $status -eq 0 ]
[ $(expr "${lines[3]}" : " done()") -ne 0 ]
[ $(expr "${lines[7]}" : " done()") -ne 0 ]
cd ../../..
}
#!/usr/bin/env test/binary/bats/bin/bats
@test "no arguments prints usage instructions" {
run bin/sequelize
[ $status -eq 0 ]
[ $(expr "${lines[0]}" : "Using environment 'development'.") -ne 0 ]
[ $(expr "${lines[1]}" : "Try \"sequelize --help\" for usage information.") -ne 0 ]
}
@test "--help prints the help" {
run bin/sequelize --help
[ $status -eq 0 ]
[ "${lines[0]}" = " Usage: sequelize [options]" ]
}
@test "-h prints the help" {
run bin/sequelize -h
[ $status -eq 0 ]
[ "${lines[0]}" = " Usage: sequelize [options]" ]
}
@test "--version prints the current version" {
run bin/sequelize --version
[ $status -eq 0 ]
[ "${lines[0]}" = `cat package.json|grep version|cut -f2 -d:|cut -f2 -d\"` ]
}
@test "-V prints the current version" {
run bin/sequelize -V
[ $status -eq 0 ]
[ "${lines[0]}" = `cat package.json|grep version|cut -f2 -d:|cut -f2 -d\"` ]
}
File mode changed
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!