0
@@ -30,7 +30,7 @@ module DataMapper
0
def to_disassociate_sql
0
- "UPDATE #{associated_table.to_sql} SET #{foreign_key_column.to_sql} = NULL WHERE #{foreign_key_column.to_sql} = ?
"
0
+ "UPDATE #{associated_table.to_sql} SET #{foreign_key_column.to_sql} = NULL WHERE #{foreign_key_column.to_sql} = ?
AND #{associated_table.key} NOT IN ?"
0
def instance_variable_name
0
@@ -47,37 +47,38 @@ module DataMapper
0
# Returns true if the association has zero items
0
-
@items && @items.any? { |item| item.dirty? }
0
+
loaded_members.any? { |member| member.dirty? }
0
- def validate_recursively(event, cleared)
0
- @items.blank? || @items.all? { |item| cleared.include?(item) || item.validate_recursively(event, cleared) }
0
+ def validate_recursively(event, cleared)
0
+ loaded_members.all? { |member| cleared.include?(member) || member.validate_recursively(event, cleared) }
0
def save_without_validation(database_context)
0
adapter = @instance.database_context.adapter
0
+ members = loaded_members
0
adapter.connection do |db|
0
command = db.create_command(association.to_disassociate_sql)
0
- command.execute_non_query(@instance.key
)
0
+ command.execute_non_query(@instance.key
, members.map { |member| member.key }.compact)
0
- unless @items.nil? || @items.empty?
0
setter_method = "#{@association_name}=".to_sym
0
ivar_name = association.foreign_key_column.instance_variable_name
0
original_value_name = association.foreign_key_column.name
0
- item.original_values.delete(original_value_name)
0
- item.instance_variable_set(ivar_name, @instance.key)
0
- @instance.database_context.adapter.save_without_validation(database_context, item)
0
+ members.each do |member|
0
+ member.original_values.delete(original_value_name)
0
+ member.instance_variable_set(ivar_name, @instance.key)
0
+ @instance.database_context.adapter.save_without_validation(database_context, member)
0
@@ -120,7 +121,11 @@ module DataMapper
0
def shallow_append(member)
0
+ pending_members << member
0
@@ -154,7 +159,6 @@ module DataMapper
0
if @instance.loaded_set.nil?
0
@items = Support::TypedSet.new(association.associated_constant)
0
associated_items = fetch_sets
0
@@ -165,9 +169,17 @@ module DataMapper
0
@instance.loaded_set.each do |entry|
0
entry.send(setter_method, associated_items[entry.key])
0
end # @instance.loaded_set.each
0
end # if @instance.loaded_set.nil?
0
+ pending_members.each do |member|
0
@@ -188,6 +200,14 @@ module DataMapper
0
+ pending_members + @items
0
+ @pending_members || @pending_members = Support::TypedSet.new(association.associated_constant)
0
finder_options = { association.foreign_key_column.to_sym => @instance.loaded_set.map { |item| item.key } }
0
finder_options.merge!(association.finder_options)
Comments
No one has commented yet.