- # delete nodes from uniquesegments (and not in modified way)
-
- sql=<<-EOF
- INSERT INTO nodes (id,latitude,longitude,timestamp,user_id,visible)
- SELECT DISTINCT cn.id,cn.latitude,cn.longitude,#{db_now},#{uid},0
- FROM current_nodes AS cn,
- current_segments AS cs,
- #{db_uqs} AS us
- WHERE(cn.id=cs.node_a OR cn.id=cs.node_b)
- AND cs.id=us.segment_id AND cs.visible=1
- AND (cn.timestamp!=#{db_now} OR cn.user_id!=#{uid})
- EOF
- ActiveRecord::Base.connection.insert(sql)
-
- sql=<<-EOF
- UPDATE current_nodes AS cn,
- current_segments AS cs,
- #{db_uqs} AS us
- SET cn.timestamp=#{db_now},cn.visible=0,cn.user_id=#{uid}
- WHERE (cn.id=cs.node_a OR cn.id=cs.node_b)
- AND cs.id=us.segment_id AND cs.visible=1
- AND (cn.timestamp!=#{db_now} OR cn.user_id!=#{uid})
- EOF
- ActiveRecord::Base.connection.update(sql)
-
- # delete segments from uniquesegments (and not in modified way)
-
- sql=<<-EOF
- INSERT INTO segments (id,node_a,node_b,timestamp,user_id,visible)
- SELECT DISTINCT segment_id,node_a,node_b,#{db_now},#{uid},0
- FROM current_segments AS cs, #{db_uqs} AS us
- WHERE cs.id=us.segment_id AND cs.visible=1
- AND (cs.timestamp!=#{db_now} OR cs.user_id!=#{uid})
- EOF
- ActiveRecord::Base.connection.insert(sql)
-
- sql=<<-EOF
- UPDATE current_segments AS cs, #{db_uqs} AS us
- SET cs.timestamp=#{db_now},cs.visible=0,cs.user_id=#{uid}
- WHERE cs.id=us.segment_id AND cs.visible=1
- AND (cs.timestamp!=#{db_now} OR cs.user_id!=#{uid})
- EOF
- ActiveRecord::Base.connection.update(sql)
- ActiveRecord::Base.connection.execute("DROP TABLE #{db_uqs}")
-
- # insert new version of route into way_segments
-
- insertsql =''
- currentsql=''
- sequence =1
- for i in (0..(points.length-2))
- if (points[i+1][3].to_i==0) then next end
- if insertsql !='' then insertsql +=',' end
- if currentsql!='' then currentsql+=',' end
- insertsql +="(#{way},#{points[i+1][5]},#{version})"
- currentsql+="(#{way},#{points[i+1][5]},#{sequence})"
- sequence +=1
- end
-
- ActiveRecord::Base.connection.execute("DELETE FROM current_way_segments WHERE id=#{way}");
- ActiveRecord::Base.connection.insert("INSERT INTO way_segments (id,segment_id,version ) VALUES #{insertsql}");
- ActiveRecord::Base.connection.insert("INSERT INTO current_way_segments (id,segment_id,sequence_id) VALUES #{currentsql}");
-
- # -- 7. insert new way tags
-
- insertsql =''
- currentsql=''
- attributes.each do |k,v|
- if v=='' then next end
- if v[0,6]=='(type ' then next end
- if insertsql !='' then insertsql +=',' end
- if currentsql!='' then currentsql+=',' end
- insertsql +="(#{way},'"+sqlescape(k)+"','"+sqlescape(v)+"',version)"
- currentsql+="(#{way},'"+sqlescape(k)+"','"+sqlescape(v)+"')"
- end
-
- ActiveRecord::Base.connection.execute("DELETE FROM current_way_tags WHERE id=#{way}")
- if (insertsql !='') then ActiveRecord::Base.connection.insert("INSERT INTO way_tags (id,k,v,version) VALUES #{insertsql}" ) end
- if (currentsql!='') then ActiveRecord::Base.connection.insert("INSERT INTO current_way_tags (id,k,v) VALUES #{currentsql}") end
-
- [originalway,way,renumberednodes,numberedsegments,xmin,xmax,ymin,ymax]
- end