Skip to content

Commit

Permalink
Use API for label scan in core api
Browse files Browse the repository at this point in the history
  • Loading branch information
pontusmelke committed Jan 15, 2018
1 parent cf109af commit f9f15fe
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 25 deletions.
Expand Up @@ -41,9 +41,8 @@ public interface TokenRead
* Returns the token corresponding to the provided name
* @param name The name associated with the token
* @return The token corresponding withe
* @throws LabelNotFoundKernelException
*/
int labelGetForName( String name ) throws LabelNotFoundKernelException;
int labelGetForName( String name );

/**
* Return the id of the provided label, or NO_TOKEN if the label isn't known to the graph.
Expand Down
Expand Up @@ -550,7 +550,6 @@ public void shouldNotFindNodeWithRemovedLabelInLabelScan() throws Exception
}
}


@Test
public void shouldFindUpdatedNodeInInLabelScan() throws Exception
{
Expand Down Expand Up @@ -627,7 +626,6 @@ public void shouldNotFindNodeWithRemovedLabelInDisjunctionLabelScan() throws Exc
}
}


@Test
public void shouldFindUpdatedNodeInInDisjunctionLabelScan() throws Exception
{
Expand All @@ -648,7 +646,6 @@ public void shouldFindUpdatedNodeInInDisjunctionLabelScan() throws Exception
}
}


@Test
public void shouldNotFindDeletedNodeInConjunctionLabelScan() throws Exception
{
Expand Down
Expand Up @@ -67,6 +67,7 @@
import static org.neo4j.collection.primitive.PrimitiveIntCollections.map;
import static org.neo4j.graphdb.Label.label;
import static org.neo4j.helpers.collection.Iterators.asList;
import static org.neo4j.kernel.api.StatementConstants.NO_SUCH_LABEL;
import static org.neo4j.kernel.api.StatementConstants.NO_SUCH_RELATIONSHIP_TYPE;
import static org.neo4j.kernel.impl.core.TokenHolder.NO_ID;

Expand Down Expand Up @@ -682,13 +683,13 @@ public boolean hasLabel( Label label )
NodeCursor nodes = transaction.cursors().allocateNodeCursor() )
{
int labelId = transaction.tokenRead().labelGetForName( label.name() );
if ( labelId == NO_SUCH_LABEL )
{
return false;
}
transaction.dataRead().singleNode( nodeId, nodes );
return nodes.next() && nodes.labels().contains( labelId );
}
catch ( LabelNotFoundKernelException e )
{
return false;
}
}

@Override
Expand Down
Expand Up @@ -56,10 +56,10 @@
import org.neo4j.graphdb.traversal.BidirectionalTraversalDescription;
import org.neo4j.graphdb.traversal.TraversalDescription;
import org.neo4j.helpers.collection.PrefetchingResourceIterator;
import org.neo4j.helpers.collection.ResourceClosingIterator;
import org.neo4j.internal.kernel.api.IndexQuery;
import org.neo4j.internal.kernel.api.InternalIndexState;
import org.neo4j.internal.kernel.api.NodeCursor;
import org.neo4j.internal.kernel.api.NodeLabelIndexCursor;
import org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException;
import org.neo4j.internal.kernel.api.exceptions.KernelException;
import org.neo4j.internal.kernel.api.exceptions.schema.ConstraintValidationException;
Expand All @@ -79,7 +79,6 @@
import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.guard.Guard;
import org.neo4j.kernel.impl.api.TokenAccess;
import org.neo4j.kernel.impl.api.operations.KeyReadOperations;
import org.neo4j.kernel.impl.core.NodeProxy;
import org.neo4j.kernel.impl.core.RelationshipProxy;
import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge;
Expand Down Expand Up @@ -111,7 +110,6 @@
import org.neo4j.values.virtual.MapValue;

import static java.lang.String.format;
import static org.neo4j.collection.primitive.PrimitiveLongCollections.map;
import static org.neo4j.graphdb.factory.GraphDatabaseSettings.transaction_timeout;
import static org.neo4j.helpers.collection.Iterators.emptyResourceIterator;
import static org.neo4j.internal.kernel.api.security.SecurityContext.AUTH_DISABLED;
Expand Down Expand Up @@ -710,18 +708,39 @@ private ResourceIterator<Node> getNodesByLabelAndPropertyWithoutIndex( int prope

private ResourceIterator<Node> allNodesWithLabel( final Label myLabel )
{
Statement statement = spi.currentStatement();
KernelTransaction ktx = spi.currentTransaction();
assertTransactionOpen( ktx );

int labelId = statement.readOperations().labelGetForName( myLabel.name() );
if ( labelId == KeyReadOperations.NO_SUCH_LABEL )
int labelId = ktx.tokenRead().labelGetForName( myLabel.name() );
if ( labelId == NO_SUCH_LABEL )
{
statement.close();
return emptyResourceIterator();
return ResourceIterator.empty();
}

final PrimitiveLongResourceIterator nodeIds = statement.readOperations().nodesGetForLabel( labelId );
return ResourceClosingIterator
.newResourceIterator( map( nodeId -> new NodeProxy( nodeActions, nodeId ), nodeIds ), statement, nodeIds );
NodeLabelIndexCursor cursor = ktx.cursors().allocateNodeLabelIndexCursor();
ktx.dataRead().nodeLabelScan( labelId, cursor );
return new PrefetchingResourceIterator<Node>()
{
@Override
protected Node fetchNextOrNull()
{
if ( cursor.next() )
{
return new NodeProxy( nodeActions, cursor.nodeReference() );
}
else
{
close();
return null;
}
}

@Override
public void close()
{
cursor.close();
}
};
}

private ResourceIterator<Node> map2nodes( PrimitiveLongIterator input, Resource... resources )
Expand Down
Expand Up @@ -20,7 +20,6 @@
package org.neo4j.kernel.impl.newapi;

import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;

Expand All @@ -29,7 +28,6 @@
import org.neo4j.helpers.collection.Iterators;
import org.neo4j.internal.kernel.api.CapableIndexReference;
import org.neo4j.internal.kernel.api.IndexCapability;
import org.neo4j.internal.kernel.api.IndexQuery;
import org.neo4j.internal.kernel.api.InternalIndexState;
import org.neo4j.internal.kernel.api.Token;
import org.neo4j.internal.kernel.api.exceptions.KernelException;
Expand Down Expand Up @@ -310,7 +308,7 @@ public String labelGetName( int token ) throws LabelNotFoundKernelException
}

@Override
public int labelGetForName( String name ) throws LabelNotFoundKernelException
public int labelGetForName( String name )
{
return storeReadLayer.labelGetForName( name );
}
Expand Down
Expand Up @@ -66,7 +66,7 @@ public String labelGetName( int token ) throws LabelNotFoundKernelException
}

@Override
public int labelGetForName( String name ) throws LabelNotFoundKernelException
public int labelGetForName( String name )
{
return store.labelGetForName( name );
}
Expand Down
Expand Up @@ -156,7 +156,6 @@ public void shouldHandleMultipleLabels() throws Exception
state.nodeDoAddLabel( 2, 4 );
state.nodeDoAddLabel( 3, 5 );


// WHEN
Set<Long> removed = state.nodesWithLabelChanged( 1, 2, 3 ).getRemoved();
Set<Long> added = state.nodesWithLabelChanged( 1, 2, 3 ).getAdded();
Expand Down

0 comments on commit f9f15fe

Please sign in to comment.