Skip to content

Commit

Permalink
More efficient cursor-to-iterator
Browse files Browse the repository at this point in the history
  • Loading branch information
pontusmelke authored and fickludd committed Jan 24, 2018
1 parent d1f00e2 commit 431a096
Showing 1 changed file with 9 additions and 32 deletions.
Expand Up @@ -61,6 +61,7 @@
import org.neo4j.internal.kernel.api.IndexQuery; import org.neo4j.internal.kernel.api.IndexQuery;
import org.neo4j.internal.kernel.api.InternalIndexState; import org.neo4j.internal.kernel.api.InternalIndexState;
import org.neo4j.internal.kernel.api.NodeCursor; import org.neo4j.internal.kernel.api.NodeCursor;
import org.neo4j.internal.kernel.api.NodeIndexCursor;
import org.neo4j.internal.kernel.api.NodeLabelIndexCursor; import org.neo4j.internal.kernel.api.NodeLabelIndexCursor;
import org.neo4j.internal.kernel.api.Write; import org.neo4j.internal.kernel.api.Write;
import org.neo4j.internal.kernel.api.NodeValueIndexCursor; import org.neo4j.internal.kernel.api.NodeValueIndexCursor;
Expand Down Expand Up @@ -640,34 +641,7 @@ private ResourceIterator<Node> nodesByLabelAndProperty( Label myLabel, String ke
IndexQuery.ExactPredicate query = IndexQuery.exact( propertyId, value ); IndexQuery.ExactPredicate query = IndexQuery.exact( propertyId, value );
read.nodeIndexSeek( index, cursor, IndexOrder.NONE, query ); read.nodeIndexSeek( index, cursor, IndexOrder.NONE, query );


return new PrefetchingResourceIterator<Node>() return new NodeCursorResourceIterator<>( cursor, statement );
{
private boolean closed;
@Override
protected Node fetchNextOrNull()
{
if ( cursor.next() )
{
return newNodeProxy( cursor.nodeReference() );
}
else
{
close();
return null;
}
}

@Override
public void close()
{
if ( !closed )
{
statement.close();
cursor.close();
closed = true;
}
}
};
} }
catch ( KernelException e ) catch ( KernelException e )
{ {
Expand Down Expand Up @@ -721,7 +695,7 @@ private ResourceIterator<Node> allNodesWithLabel( final Label myLabel )


NodeLabelIndexCursor cursor = ktx.cursors().allocateNodeLabelIndexCursor(); NodeLabelIndexCursor cursor = ktx.cursors().allocateNodeLabelIndexCursor();
ktx.dataRead().nodeLabelScan( labelId, cursor ); ktx.dataRead().nodeLabelScan( labelId, cursor );
return new NodeCursorResourceIterator( cursor, statement ); return new NodeCursorResourceIterator<>( cursor, statement );
} }


private ResourceIterator<Node> map2nodes( PrimitiveLongIterator input, Resource... resources ) private ResourceIterator<Node> map2nodes( PrimitiveLongIterator input, Resource... resources )
Expand Down Expand Up @@ -932,16 +906,19 @@ public GraphPropertiesProxy newGraphPropertiesProxy()
{ {
return new GraphPropertiesProxy( this ); return new GraphPropertiesProxy( this );
} }
private static final long UNINITIALIZED = -2L;
private static final long NO_ID = -1L;


private final class NodeCursorResourceIterator implements ResourceIterator<Node> private final class NodeCursorResourceIterator<CURSOR extends NodeIndexCursor> implements ResourceIterator<Node>
{ {
private final NodeLabelIndexCursor cursor;
private final CURSOR cursor;
private final Statement statement; private final Statement statement;
private long next; private long next;
private boolean closed; private boolean closed;
private static final long NOT_INITIALIZED = -2L; private static final long NOT_INITIALIZED = -2L;


NodeCursorResourceIterator( NodeLabelIndexCursor cursor, Statement statement ) NodeCursorResourceIterator( CURSOR cursor, Statement statement )
{ {
this.cursor = cursor; this.cursor = cursor;
this.statement = statement; this.statement = statement;
Expand Down

0 comments on commit 431a096

Please sign in to comment.