fix revert to cope with moved nodes properly (OH NOES I updated some SQL)

This commit is contained in:
Richard Fairhurst 2008-05-16 10:32:53 +00:00
parent f08c9de073
commit 889ee9e368

View file

@ -638,7 +638,7 @@ class AmfController < ApplicationController
# which means the SWF needs to allocate new ids
# - if it's an invisible node, we can reuse the old node id
# get node list from specified version of way,
# ----- get node list from specified version of way,
# and the _current_ lat/long/tags of each node
row=ActiveRecord::Base.connection.select_one("SELECT timestamp FROM ways WHERE version=#{version} AND id=#{id}")
@ -654,33 +654,33 @@ class AmfController < ApplicationController
EOF
rows=ActiveRecord::Base.connection.select_all(sql)
# if historic (full revert), get the old version of each node
# ----- if historic (full revert), get the old version of each node
# - if it's in another way now, generate a new id
# - if it's not in another way, use the old ID
if historic then
rows.each_index do |i|
sql=<<-EOF
SELECT latitude*0.0000001 AS latitude,longitude*0.0000001 AS longitude,tags,cwn.id AS currentway
FROM nodes n
LEFT JOIN current_way_nodes cwn
ON cwn.node_id=n.id
ON cwn.node_id=n.id AND cwn.id!=#{id}
WHERE n.id=#{rows[i]['id']}
AND n.timestamp<="#{waytime}"
AND cwn.id!=#{id}
ORDER BY n.timestamp DESC
LIMIT 1
EOF
row=ActiveRecord::Base.connection.select_one(sql)
unless row.nil? then
nx=row['longitude'].to_f
ny=row['latitude'].to_f
if (!row.nil?)
if (row['currentway'] && (nx!=rows[i]['longitude'].to_f or ny!=rows[i]['latitude'].to_f or row['tags']!=rows[i]['tags'])) then rows[i]['id']=-1 end
end
rows[i]['longitude']=nx
rows[i]['latitude' ]=ny
rows[i]['tags' ]=row['tags']
end
end
end
rows
end