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

Reply via email to