Node.transaction do
self.lock!
check_consistency(self, new_node, user)
- way = WayNode.find(:first, :joins => :way,
- :conditions => [ "current_ways.visible = ? AND current_way_nodes.node_id = ?", true, self.id ])
- raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by way #{way.way.id}.") unless way.nil?
+ ways = Way.joins(:way_nodes).where(:visible => true, :current_way_nodes => { :node_id => id }).order(:id)
+ raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by ways #{ways.collect { |w| w.id }.join(",")}.") unless ways.empty?
- rel = RelationMember.find(:first, :joins => :relation,
- :conditions => [ "visible = ? AND member_type='Node' and member_id=? ", true, self.id])
- raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by relation #{rel.relation.id}.") unless rel.nil?
+ rels = Relation.joins(:relation_members).where(:visible => true, :current_relation_members => { :member_type => "Node", :member_id => id }).order(:id)
+ raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by relations #{rels.collect { |r| r.id }.join(",")}.") unless rels.empty?
self.changeset_id = new_node.changeset_id
self.tags = {}
Way.transaction do
self.lock!
check_consistency(self, new_way, user)
- rel = RelationMember.find(:first, :joins => :relation,
- :conditions => [ "visible = ? AND member_type='Way' and member_id=? ", true, self.id])
- raise OSM::APIPreconditionFailedError.new("Way #{self.id} still used by relation #{rel.relation.id}.") if rel
-
+ rels = Relation.joins(:relation_members).where(:visible => true, :current_relation_members => { :member_type => "Way", :member_id => id }).order(:id)
+ raise OSM::APIPreconditionFailedError.new("Way #{self.id} is still used by relations #{rels.collect { |r| r.id }.join(",")}.") unless rels.empty?
+
self.changeset_id = new_way.changeset_id
self.changeset = new_way.changeset
post :upload, :id => 2
assert_response :precondition_failed,
"shouldn't be able to upload a invalid deletion diff: #{@response.body}"
- assert_equal "Precondition failed: Way 3 still used by relation 1.", @response.body
+ assert_equal "Precondition failed: Way 3 is still used by relations 1.", @response.body
# check that nothing was, in fact, deleted
assert_equal true, Node.find(current_nodes(:node_used_by_relationship).id).visible
delete :delete, :id => current_nodes(:used_node_1).id
assert_response :precondition_failed,
"shouldn't be able to delete a node used in a way (#{@response.body})"
- assert_equal "Precondition failed: Node 3 is still used by way 1.", @response.body
+ assert_equal "Precondition failed: Node 3 is still used by ways 1,3.", @response.body
# in a relation...
content(nodes(:node_used_by_relationship).to_xml)
delete :delete, :id => current_nodes(:node_used_by_relationship).id
assert_response :precondition_failed,
"shouldn't be able to delete a node used in a relation (#{@response.body})"
- assert_match /Precondition failed: Node 5 is still used by relation [13]./, @response.body
+ assert_equal "Precondition failed: Node 5 is still used by relations 1,3.", @response.body
end
##
delete :delete, :id => current_ways(:used_way).id
assert_response :precondition_failed,
"shouldn't be able to delete a way used in a relation (#{@response.body})"
- assert_equal "Precondition failed: Way 3 still used by relation 1.", @response.body
+ assert_equal "Precondition failed: Way 3 is still used by relations 1.", @response.body
# this won't work since the way never existed
delete :delete, :id => 0