no longer deletes nodes used in other segments ('H' test case)
This commit is contained in:
parent
4769eec5aa
commit
048f7fca8c
1 changed files with 84 additions and 74 deletions
|
@ -235,6 +235,7 @@ EOF
|
||||||
uid=getuserid(usertoken)
|
uid=getuserid(usertoken)
|
||||||
return if !uid
|
return if !uid
|
||||||
db_uqs='uniq'+uid.to_s+originalway.to_i.abs.to_s+Time.new.to_i.to_s # temp uniquesegments table name, typically 51 chars
|
db_uqs='uniq'+uid.to_s+originalway.to_i.abs.to_s+Time.new.to_i.to_s # temp uniquesegments table name, typically 51 chars
|
||||||
|
db_uqn='unin'+uid.to_s+originalway.to_i.abs.to_s+Time.new.to_i.to_s # temp uniquenodes table name, typically 51 chars
|
||||||
db_now='@now'+uid.to_s+originalway.to_i.abs.to_s+Time.new.to_i.to_s # 'now' variable name, typically 51 chars
|
db_now='@now'+uid.to_s+originalway.to_i.abs.to_s+Time.new.to_i.to_s # 'now' variable name, typically 51 chars
|
||||||
ActiveRecord::Base.connection.execute("SET #{db_now}=NOW()")
|
ActiveRecord::Base.connection.execute("SET #{db_now}=NOW()")
|
||||||
originalway=originalway.to_i
|
originalway=originalway.to_i
|
||||||
|
@ -332,38 +333,6 @@ EOF
|
||||||
|
|
||||||
createuniquesegments(way,db_uqs)
|
createuniquesegments(way,db_uqs)
|
||||||
|
|
||||||
# a=''
|
|
||||||
# ActiveRecord::Base.connection.select_values("SELECT segment_id FROM #{db_uqs}").each {|b| a+=b+',' }
|
|
||||||
# RAILS_DEFAULT_LOGGER.error("Unique segments are #{a}")
|
|
||||||
# a=ActiveRecord::Base.connection.select_value("SELECT #{db_now}")
|
|
||||||
# RAILS_DEFAULT_LOGGER.error("Timestamp of this edit is #{a}")
|
|
||||||
# RAILS_DEFAULT_LOGGER.error("Userid of this edit is #{uid}")
|
|
||||||
|
|
||||||
# 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)
|
# delete segments from uniquesegments (and not in modified way)
|
||||||
|
|
||||||
sql=<<-EOF
|
sql=<<-EOF
|
||||||
|
@ -382,7 +351,28 @@ EOF
|
||||||
AND (cs.timestamp!=#{db_now} OR cs.user_id!=#{uid})
|
AND (cs.timestamp!=#{db_now} OR cs.user_id!=#{uid})
|
||||||
EOF
|
EOF
|
||||||
ActiveRecord::Base.connection.update(sql)
|
ActiveRecord::Base.connection.update(sql)
|
||||||
|
|
||||||
|
# delete nodes not in modified way or any other segments
|
||||||
|
|
||||||
|
createuniquenodes(db_uqs,db_uqn)
|
||||||
|
|
||||||
|
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,#{db_uqn}
|
||||||
|
WHERE cn.id=node_id
|
||||||
|
EOF
|
||||||
|
ActiveRecord::Base.connection.insert(sql)
|
||||||
|
|
||||||
|
sql=<<-EOF
|
||||||
|
UPDATE current_nodes AS cn, #{db_uqn}
|
||||||
|
SET cn.timestamp=#{db_now},cn.visible=0,cn.user_id=#{uid}
|
||||||
|
WHERE cn.id=node_id
|
||||||
|
EOF
|
||||||
|
ActiveRecord::Base.connection.update(sql)
|
||||||
|
|
||||||
ActiveRecord::Base.connection.execute("DROP TABLE #{db_uqs}")
|
ActiveRecord::Base.connection.execute("DROP TABLE #{db_uqs}")
|
||||||
|
ActiveRecord::Base.connection.execute("DROP TABLE #{db_uqn}")
|
||||||
|
|
||||||
# insert new version of route into way_segments
|
# insert new version of route into way_segments
|
||||||
|
|
||||||
|
@ -431,31 +421,11 @@ EOF
|
||||||
way=way.to_i
|
way=way.to_i
|
||||||
|
|
||||||
db_uqs='uniq'+uid.to_s+way.to_i.abs.to_s+Time.new.to_i.to_s # temp uniquesegments table name, typically 51 chars
|
db_uqs='uniq'+uid.to_s+way.to_i.abs.to_s+Time.new.to_i.to_s # temp uniquesegments table name, typically 51 chars
|
||||||
|
db_uqn='unin'+uid.to_s+way.to_i.abs.to_s+Time.new.to_i.to_s # temp uniquenodes table name, typically 51 chars
|
||||||
db_now='@now'+uid.to_s+way.to_i.abs.to_s+Time.new.to_i.to_s # 'now' variable name, typically 51 chars
|
db_now='@now'+uid.to_s+way.to_i.abs.to_s+Time.new.to_i.to_s # 'now' variable name, typically 51 chars
|
||||||
ActiveRecord::Base.connection.execute("SET #{db_now}=NOW()")
|
ActiveRecord::Base.connection.execute("SET #{db_now}=NOW()")
|
||||||
createuniquesegments(way,db_uqs)
|
createuniquesegments(way,db_uqs)
|
||||||
|
|
||||||
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
|
|
||||||
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
|
|
||||||
EOF
|
|
||||||
ActiveRecord::Base.connection.update(sql)
|
|
||||||
|
|
||||||
# - delete any otherwise unused segments
|
# - delete any otherwise unused segments
|
||||||
|
|
||||||
sql=<<-EOF
|
sql=<<-EOF
|
||||||
|
@ -472,7 +442,28 @@ EOF
|
||||||
WHERE cs.id=us.segment_id
|
WHERE cs.id=us.segment_id
|
||||||
EOF
|
EOF
|
||||||
ActiveRecord::Base.connection.update(sql)
|
ActiveRecord::Base.connection.update(sql)
|
||||||
|
|
||||||
|
# - delete any unused nodes
|
||||||
|
|
||||||
|
createuniquenodes(db_uqs,db_uqn)
|
||||||
|
|
||||||
|
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,#{db_uqn}
|
||||||
|
WHERE cn.id=node_id
|
||||||
|
EOF
|
||||||
|
ActiveRecord::Base.connection.insert(sql)
|
||||||
|
|
||||||
|
sql=<<-EOF
|
||||||
|
UPDATE current_nodes AS cn, #{db_uqn}
|
||||||
|
SET cn.timestamp=#{db_now},cn.visible=0,cn.user_id=#{uid}
|
||||||
|
WHERE cn.id=node_id
|
||||||
|
EOF
|
||||||
|
ActiveRecord::Base.connection.update(sql)
|
||||||
|
|
||||||
ActiveRecord::Base.connection.execute("DROP TABLE #{db_uqs}")
|
ActiveRecord::Base.connection.execute("DROP TABLE #{db_uqs}")
|
||||||
|
ActiveRecord::Base.connection.execute("DROP TABLE #{db_uqn}")
|
||||||
|
|
||||||
# - delete way
|
# - delete way
|
||||||
|
|
||||||
|
@ -498,6 +489,7 @@ def readwayquery(id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def createuniquesegments(way,uqs_name)
|
def createuniquesegments(way,uqs_name)
|
||||||
|
# Finds segments which appear in this way and no other
|
||||||
sql=<<-EOF
|
sql=<<-EOF
|
||||||
CREATE TEMPORARY TABLE #{uqs_name}
|
CREATE TEMPORARY TABLE #{uqs_name}
|
||||||
SELECT a.segment_id
|
SELECT a.segment_id
|
||||||
|
@ -511,6 +503,24 @@ def createuniquesegments(way,uqs_name)
|
||||||
ActiveRecord::Base.connection.execute(sql)
|
ActiveRecord::Base.connection.execute(sql)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def createuniquenodes(uqs_name,uqn_name)
|
||||||
|
# Finds nodes which appear in uniquesegments but no other segments
|
||||||
|
sql=<<-EOF
|
||||||
|
CREATE TEMPORARY TABLE #{uqn_name}
|
||||||
|
SELECT DISTINCT node_id
|
||||||
|
FROM (SELECT cn.id AS node_id
|
||||||
|
FROM current_nodes AS cn,
|
||||||
|
current_segments AS cs,
|
||||||
|
#{uqs_name} AS us
|
||||||
|
WHERE cs.id=us.segment_id
|
||||||
|
AND (cn.id=cs.node_a OR cn.id=cs.node_b)) AS n
|
||||||
|
LEFT JOIN current_segments AS cs2 ON node_id=cs2.node_a AND cs2.visible=1
|
||||||
|
LEFT JOIN current_segments AS cs3 ON node_id=cs3.node_b AND cs3.visible=1
|
||||||
|
WHERE cs2.node_a IS NULL
|
||||||
|
AND cs3.node_b IS NULL
|
||||||
|
EOF
|
||||||
|
ActiveRecord::Base.connection.execute(sql)
|
||||||
|
end
|
||||||
|
|
||||||
def sqlescape(a)
|
def sqlescape(a)
|
||||||
a.gsub("'","''").gsub(92.chr,92.chr+92.chr)
|
a.gsub("'","''").gsub(92.chr,92.chr+92.chr)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue