fix delete of relations with single_id_space

master
Oliver Tonnhofer 2016-02-04 17:07:35 +01:00
parent c0333738f3
commit 8949fe28c4
4 changed files with 52 additions and 2 deletions

View File

@ -86,7 +86,7 @@ func (d *Deleter) deleteRelation(id int64, deleteRefs bool, deleteMembers bool)
// delete from all tables to handle relations with tags from members
// and relation_members
e := element.OSMElem(elem.OSMElem)
e.Id = -e.Id
e.Id = d.RelId(e.Id)
if err := d.delDb.DeleteElem(e); err != nil {
return err
}

View File

@ -5,4 +5,22 @@
<tag k="amenity" v="cafe"/>
</node>
</modify>
<modify>
<relation id="31101" version="1" timestamp="2011-11-11T00:11:11Z">
<member type="way" ref="31002" role="outer"/>
<member type="way" ref="31003" role="outer"/>
<tag k="type" v="multipolygon"/>
<tag k="building" v="yes"/>
</relation>
</modify>
<!-- modify relation does create duplicate polygon -->
<modify>
<relation id="32901" version="1" timestamp="2011-11-11T00:11:11Z">
<member type="way" ref="32101" role="outer"/>
<tag k="type" v="multipolygon"/>
<tag k="building" v="office"/>
</relation>
</modify>
</osmChange>

View File

@ -124,7 +124,7 @@
<nd ref="31001"/>
</way>
<!-- modify duplicate node -->
<!-- modify duplicate node id -->
<node id="31101" version="1" timestamp="2011-11-11T00:11:11Z" lat="47" lon="80">
<tag k="amenity" v="cafe"/>
</node>
@ -144,4 +144,27 @@
<tag k="type" v="multipolygon"/>
<tag k="building" v="yes"/>
</relation>
<!-- modify relation does create duplicate polygon -->
<node id="32001" version="1" timestamp="2011-11-11T00:11:11Z" lat="47" lon="90"/>
<node id="32002" version="1" timestamp="2011-11-11T00:11:11Z" lat="47" lon="92"/>
<node id="32003" version="1" timestamp="2011-11-11T00:11:11Z" lat="49" lon="92"/>
<node id="32004" version="1" timestamp="2011-11-11T00:11:11Z" lat="49" lon="90"/>
<way id="32101" version="1" timestamp="2011-11-11T00:11:11Z">
<nd ref="32001"/>
<nd ref="32002"/>
<nd ref="32003"/>
<nd ref="32004"/>
<nd ref="32001"/>
<tag k="highway" v="secondary"/>
<tag k="landuse" v="park"/>
</way>
<relation id="32901" version="1" timestamp="2011-11-11T00:11:11Z">
<member type="way" ref="32101" role="outer"/>
<tag k="type" v="multipolygon"/>
<tag k="building" v="yes"/>
</relation>
</osm>

View File

@ -183,3 +183,12 @@ func TestSingleTable_DuplicateIds2(t *testing.T) {
})
assertGeomType(t, checkElem{"osm_all", RelOffset - 31101, "*", nil}, "Polygon")
}
func TestSingleTable_ModifiedRelation2(t *testing.T) {
// Modified relation is not inserted twice. Check for #88
rows := ts.queryRowsTags(t, "osm_all", RelOffset-32901)
if len(rows) != 1 {
t.Errorf("found duplicate row: %v", rows)
}
}