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

Commit d6b0eafd by Sascha Depold

fixed association hell

1 parent 96976330
Showing with 24 additions and 34 deletions
......@@ -5,14 +5,13 @@ module.exports.Factory = function(Sequelize, sequelize) {
var Association = sequelize.tables[Sequelize.Helper.SQL.manyToManyTableName(assocName, backAssocName)].klass,
assocNameAsTableIdentifier = Sequelize.Helper.SQL.asTableIdentifier(backAssocName),
whereConditions = [assocNameAsTableIdentifier, this.id].join("=")
Association.findAll({ where: whereConditions }, function(result) {
if(result.length > 0) {
var ids = Sequelize.Helper.Array.map(result, function(resultSet) {
return resultSet[Sequelize.Helper.SQL.asTableIdentifier(backAssocName)]
return resultSet[Sequelize.Helper.SQL.asTableIdentifier(assocName)]
})
Sequelize.Helper.log(ids)
Sequelize.Helper.log(table2.tableName)
table2.findAll({where: "id IN (" + ids.join(",") + ")"}, callback)
} else {
if(callback) callback([])
......@@ -24,45 +23,36 @@ module.exports.Factory = function(Sequelize, sequelize) {
return function(objects, callback) {
var self = this,
Association = sequelize.tables[Sequelize.Helper.SQL.manyToManyTableName(assocName, backAssocName)].klass,
currentAssociations = null,
objectIds = Sequelize.Helper.Array.map(objects, function(obj) { return obj.id })
var getAssociatedObjects = function(callback) {
self[Sequelize.Helper.SQL.addPrefix('get', assocName)](function(associations) {
Sequelize.Helper.log("current assocs:")
Sequelize.Helper.log(associations)
currentAssociations = associations
if(callback) callback(associations)
})
self[Sequelize.Helper.SQL.addPrefix('get', assocName)](callback)
}
var deleteObsoleteAssociations = function(callback) {
var obsoleteAssociations = Sequelize.Helper.Array.select(currentAssociations, function(assoc) { return objectIds.indexOf(association.id) == -1 }),
var deleteObsoleteAssociations = function(currentAssociations, callback) {
var obsoleteAssociations = Sequelize.Helper.Array.select(currentAssociations, function(assoc) { return objectIds.indexOf(assoc.id) == -1 }),
obsoleteIds = Sequelize.Helper.Array.map(obsoleteAssociations, function(assoc) { return assoc.id })
Sequelize.Helper.log(obsoleteIds)
if(obsoleteIds.length == 0)
callback([])
else
sequelize.query(
Sequelize.sqlQueryFor('delete', {table: Association.tableName, where: "id IN (" + obsoleteIds.join(",") + ")", limit: null}),
function(){ callback(obsoleteIds) }
)
else {
var deleteOptions = {
table: Association.tableName,
where: Sequelize.Helper.SQL.asTableIdentifier(assocName) + " IN (" + obsoleteIds.join(",") + ") AND " +
Sequelize.Helper.SQL.asTableIdentifier(backAssocName) + " = " + self.id,
limit: null
}
sequelize.query( Sequelize.sqlQueryFor('delete', deleteOptions), function(){ callback(obsoleteIds) } )
}
}
var createNewAssociations = function(obsoleteIds) {
var createNewAssociations = function(currentAssociations, obsoleteIds) {
var currentIds = Sequelize.Helper.Array.map(currentAssociations, function(assoc) { return assoc.id }),
withoutExisting = Sequelize.Helper.Array.select(objects, function(o) { return currentIds.indexOf(o.id) == -1 }),
savings = []
Sequelize.Helper.log("current")
Sequelize.Helper.log(obsoleteIds)
Sequelize.Helper.log(currentIds)
Sequelize.Helper.log(withoutExisting)
Sequelize.Helper.log("withoutExisiting")
withoutExisting.forEach(function(o) {
Sequelize.Helper.log(o)
if((o instanceof table2) && (self.id != null) && (o.id != null)) {
var attributes = {}
attributes[Sequelize.Helper.SQL.asTableIdentifier(backAssocName)] = self.id
......@@ -76,9 +66,9 @@ module.exports.Factory = function(Sequelize, sequelize) {
})
}
getAssociatedObjects(function() {
deleteObsoleteAssociations(function(obsolete) {
createNewAssociations(obsolete)
getAssociatedObjects(function(associatedObjects) {
deleteObsoleteAssociations(associatedObjects, function(obsolete) {
createNewAssociations(associatedObjects, obsolete)
})
})
}
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!