Hi Peter I don't have git installed on my computer. so I opened a fork and commit my solution from the web UI. I could not find a way to upload the Test file, sorry for that.
Best regards Ben On Fri, Jul 29, 2011 at 5:37 PM, Peter Neubauer <neubauer.pe...@gmail.com> wrote: > Ben, > The first bug is fixed in Andreas Wilhelms fork, thanks for pointing it out! > Can't comment on the second from my mobile :) could you fork, add the test > and see if you can fix it? > > /peter > > Sent from my phone. > On Jul 29, 2011 7:29 AM, "Ben Galon" <bga...@gmail.com> wrote: >> Hello, >> >> I started working with neo4j-spatial a while ago. i found it very >> useful and the first thing i would like to say is Thanks for your >> wonderful work. >> While working on a project that require large amount of insert/delete >> operation I think i found two bugs. >> The first one is in EditableLayerImpl.java. When adding an object and >> immediately delete it, and then insert another object, you will get an >> error because the previousGeomNode field will refer to a node that >> have been deleted. >> >> The second bug is in the Rtree implementation (RTreeIndex.java). When >> removing an object from a leaf and the tree is need to be reorganize a >> null exception is raise at line 124. >> This happens because deleteRecursivelyEmptySubtree (at line 121) >> method delete the relationship from the lastParentNodeToDelete to it's >> parent (at line 740) and than the getIndexNodeParent method ant line >> 124 returns null. >> I think that this can be solved easily by applying the following >> changes to lines 120-126: >> >> Node lastParentNodeToDelParent = > getIndexNodeParent(lastParentNodeToDelete); >> >> deleteRecursivelyEmptySubtree(lastParentNodeToDelete); >> >> // adjust tree >> adjustParentBoundingBox(lastParentNodeToDelParent, >> SpatialRelationshipTypes.RTREE_CHILD); >> adjustPathBoundingBox(lastParentNodeToDelParent); >> >> the line number are the same as in the github repository. >> >> I will be happy to your opinion about these issues. >> >> here is a short code that generate the second bug: >> >> import org.neo4j.gis.spatial.EditableLayer; >> import org.neo4j.gis.spatial.EditableLayerImpl; >> import org.neo4j.gis.spatial.RTreeIndex; >> import org.neo4j.gis.spatial.SpatialDatabaseService; >> import org.neo4j.gis.spatial.WKTGeometryEncoder; >> import org.neo4j.graphdb.GraphDatabaseService; >> import org.neo4j.kernel.EmbeddedGraphDatabase; >> >> import com.vividsolutions.jts.geom.Coordinate; >> >> >> public class RteeTest { >> >> /** >> * @param args >> */ >> public static void main(String[] args) { >> final String dbFolder = "c:\\RtreeTest"; >> GraphDatabaseService graphDB = new EmbeddedGraphDatabase(dbFolder); >> SpatialDatabaseService sgDB = new SpatialDatabaseService(graphDB); >> >> EditableLayer testLayer = >> (EditableLayer)sgDB.createLayer("RtreeTest", WKTGeometryEncoder.class, >> EditableLayerImpl.class); >> >> for (int i = 0; i < 15; i++){ >> for (int j = 0; j < 10; j++){ >> testLayer.add(testLayer.getGeometryFactory().createPoint(new >> Coordinate(i, j))); >> } >> } >> >> ((RTreeIndex)testLayer.getIndex()).debugIndexTree(); >> testLayer.delete(60); // raise an java.lang.NullPointerException exception >> >> ((RTreeIndex)testLayer.getIndex()).debugIndexTree(); >> >> graphDB.shutdown(); >> } >> >> } >> >> Thanks again >> Ben >> _______________________________________________ >> Neo4j mailing list >> User@lists.neo4j.org >> https://lists.neo4j.org/mailman/listinfo/user > _______________________________________________ > Neo4j mailing list > User@lists.neo4j.org > https://lists.neo4j.org/mailman/listinfo/user > _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user