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

Commit e6f67ba3 by Sascha Depold

Merge branch 'master' into milestones/2.0.0

2 parents bd2e3b20 9faa1b31
......@@ -5,3 +5,4 @@ test*.js
node_modules
npm-debug.log
*~
test/binary/tmp/*
......@@ -27,7 +27,7 @@ postgres:
postgres-native:
@DIALECT=postgres-native make test
binary:
@./test/binary/test.bats
@./test/binary/sequelize.test.bats
# test aliases
......
......@@ -47,7 +47,9 @@ module.exports = (function() {
this.foreignIdentifier = Utils._.underscoredIf((this.options.as || this.target.tableName) + 'Id', this.options.underscored)
} else {
this.foreignIdentifier = this.target.associations[this.associationAccessor].identifier
this.target.associations[this.associationAccessor].foreignIdentifier = this.identifier
delete this.source.rawAttributes[this.foreignIdentifier]
delete this.target.associations[this.associationAccessor].source.rawAttributes[this.identifier]
}
// define a new model, which connects the models
......
......@@ -187,6 +187,7 @@ module.exports = (function() {
optAttributes = optAttributes.concat(attributes)
if (!include.association.connectorDAO) {
var table = include.daoFactory.tableName
var as = include.as
var tableLeft = ((include.association.associationType === 'BelongsTo') ? include.as : tableName)
......@@ -194,7 +195,19 @@ module.exports = (function() {
var tableRight = ((include.association.associationType === 'BelongsTo') ? tableName : include.as)
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))
options.attributes = optAttributes.join(', ')
......
......@@ -260,6 +260,7 @@ module.exports = (function() {
var joinQuery = ' LEFT OUTER JOIN <%= table %> AS <%= as %> ON <%= tableLeft %>.<%= attrLeft %> = <%= tableRight %>.<%= attrRight %>'
if (!include.association.connectorDAO) {
query += Utils._.template(joinQuery)({
table: this.quoteIdentifiers(include.daoFactory.tableName),
as: this.quoteIdentifier(include.as),
......@@ -268,6 +269,25 @@ module.exports = (function() {
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))
options.attributes = optAttributes.join(', ')
......
......@@ -169,13 +169,27 @@ module.exports = (function() {
optAttributes = optAttributes.concat(attributes)
if (!include.association.connectorDAO) {
var table = include.daoFactory.tableName
var as = include.as
var tableLeft = ((include.association.associationType === 'BelongsTo') ? include.as : tableName)
var attrLeft = 'id'
var tableRight = ((include.association.associationType === 'BelongsTo') ? tableName : include.as)
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) + ""
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))
......
......@@ -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) {
......
#!/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!