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