]> git.openstreetmap.org Git - rails.git/blobdiff - app/models/way.rb
Update bundle
[rails.git] / app / models / way.rb
index f0b35a88a2384914d31b97f65992b71efd9afed0..0f965076050bab3e0923f48126c9987721268840 100644 (file)
@@ -83,16 +83,6 @@ class Way < ActiveRecord::Base
     way
   end
 
-  # Find a way given it's ID, and in a single SQL call also grab its nodes
-  #
-
-  # You can't pull in all the tags too unless we put a sequence_id on the way_tags table and have a multipart key
-  def self.find_eager(id)
-    Way.find(id, :include => { :way_nodes => :node })
-    # If waytag had a multipart key that was real, you could do this:
-    # Way.find(id, :include => [:way_tags, {:way_nodes => :node}])
-  end
-
   # Find a way given it's ID, and in a single SQL call also grab its nodes and tags
   def to_xml
     doc = OSM::API.new.get_xml_doc
@@ -173,7 +163,7 @@ class Way < ActiveRecord::Base
 
   def update_from(new_way, user)
     Way.transaction do
-      self.lock!
+      lock!
       check_consistency(self, new_way, user)
       unless new_way.preconditions_ok?(nds)
         fail OSM::APIPreconditionFailedError.new("Cannot update way #{id}: data is invalid.")
@@ -190,7 +180,7 @@ class Way < ActiveRecord::Base
 
   def create_with_history(user)
     check_create_consistency(self, user)
-    unless self.preconditions_ok?
+    unless preconditions_ok?
       fail OSM::APIPreconditionFailedError.new("Cannot create way: data is invalid.")
     end
     self.version = 0
@@ -209,7 +199,9 @@ class Way < ActiveRecord::Base
     new_nds = (nds - old_nodes).sort.uniq
 
     unless new_nds.empty?
-      db_nds = Node.where(:id => new_nds, :visible => true)
+      # NOTE: nodes are locked here to ensure they can't be deleted before
+      # the current transaction commits.
+      db_nds = Node.where(:id => new_nds, :visible => true).lock("for share")
 
       if db_nds.length < new_nds.length
         missing = new_nds - db_nds.collect(&:id)
@@ -227,7 +219,7 @@ class Way < ActiveRecord::Base
     # provide repeatable reads for the used-by checks. this means it
     # shouldn't be possible to get race conditions.
     Way.transaction do
-      self.lock!
+      lock!
       check_consistency(self, new_way, user)
       rels = Relation.joins(:relation_members).where(:visible => true, :current_relation_members => { :member_type => "Way", :member_id => id }).order(:id)
       fail OSM::APIPreconditionFailedError.new("Way #{id} is still used by relations #{rels.collect(&:id).join(",")}.") unless rels.empty?
@@ -242,11 +234,6 @@ class Way < ActiveRecord::Base
     end
   end
 
-  # Temporary method to match interface to nodes
-  def tags_as_hash
-    tags
-  end
-
   ##
   # if any referenced nodes are placeholder IDs (i.e: are negative) then
   # this calling this method will fix them using the map from placeholders
@@ -278,7 +265,7 @@ class Way < ActiveRecord::Base
     Way.transaction do
       self.version += 1
       self.timestamp = t
-      self.save!
+      save!
 
       tags = self.tags
       WayTag.delete_all(:way_id => id)