diff --git a/community/cypher/cypher/src/test/scala/org/neo4j/cypher/EagerizationAcceptanceTest.scala b/community/cypher/cypher/src/test/scala/org/neo4j/cypher/EagerizationAcceptanceTest.scala index 7c4c95a948df..03614f664e33 100644 --- a/community/cypher/cypher/src/test/scala/org/neo4j/cypher/EagerizationAcceptanceTest.scala +++ b/community/cypher/cypher/src/test/scala/org/neo4j/cypher/EagerizationAcceptanceTest.scala @@ -179,15 +179,13 @@ class EagerizationAcceptanceTest try { val idX = input(0).asInstanceOf[Node].getId val idY = input(1).asInstanceOf[Node].getId - val nodeCursor = statement.readOperations().nodeCursor(idX) + val nodeCursor = statement.readOperations().nodeCursorById(idX) val result = Array.newBuilder[Array[AnyRef]] - while (nodeCursor.next()) { - val relCursor = nodeCursor.get().relationships( Direction.OUTGOING ) - while (relCursor.next()) { - val item: RelationshipItem = relCursor.get() - if (item.endNode() == idY) - result += Array(new java.lang.Long(item.id())) - } + val relCursor = nodeCursor.get().relationships( Direction.OUTGOING ) + while (relCursor.next()) { + val item: RelationshipItem = relCursor.get() + if (item.endNode() == idY) + result += Array(new java.lang.Long(item.id())) } RawIterator.of(result.result(): _*) } finally { @@ -227,14 +225,12 @@ class EagerizationAcceptanceTest try { val idX = input(0).asInstanceOf[Node].getId val idY = input(1).asInstanceOf[Node].getId - val nodeCursor = statement.readOperations().nodeCursor(idX) - while (nodeCursor.next()) { - val relCursor = nodeCursor.get().relationships( Direction.OUTGOING ) - while (relCursor.next()) { - val item: RelationshipItem = relCursor.get() - if (item.endNode() == idY) - counter += 1 - } + val nodeCursor = statement.readOperations().nodeCursorById(idX) + val relCursor = nodeCursor.get().relationships(Direction.OUTGOING) + while (relCursor.next()) { + val item: RelationshipItem = relCursor.get() + if (item.endNode() == idY) + counter += 1 } RawIterator.empty() } finally { diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/ReadOperations.java b/community/kernel/src/main/java/org/neo4j/kernel/api/ReadOperations.java index 6e1d691faf28..0710cde838c1 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/ReadOperations.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/ReadOperations.java @@ -257,7 +257,7 @@ void relationshipVisit( long relId, RelationshipVi //== CURSOR ACCESS OPERATIONS =============== //=========================================== - Cursor nodeCursor( long nodeId ); + Cursor nodeCursorById( long nodeId ) throws EntityNotFoundException; Cursor relationshipCursor( long relId ); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/ConstraintEnforcingEntityOperations.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/ConstraintEnforcingEntityOperations.java index 6cb67923b41e..21234a42e371 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/ConstraintEnforcingEntityOperations.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/ConstraintEnforcingEntityOperations.java @@ -425,13 +425,7 @@ public Cursor nodeCursorById( KernelStatement statement, long nodeId ) return entityReadOperations.nodeCursorById( statement, nodeId ); } - @Override - public Cursor nodeCursor( KernelStatement statement, long nodeId ) - { - return entityReadOperations.nodeCursor( statement, nodeId ); - } - - @Override + @Override public Cursor relationshipCursorById( KernelStatement statement, long relId ) throws EntityNotFoundException { return entityReadOperations.relationshipCursorById( statement, relId ); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/GuardingStatementOperations.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/GuardingStatementOperations.java index f6139c0b2c1e..14c7dfb79d22 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/GuardingStatementOperations.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/GuardingStatementOperations.java @@ -301,13 +301,6 @@ public Cursor nodeCursorById( KernelStatement statement, long nodeId ) return entityReadDelegate.nodeCursorById( statement, nodeId ); } - @Override - public Cursor nodeCursor( KernelStatement statement, long nodeId ) - { - guard.check( statement ); - return entityReadDelegate.nodeCursor( statement, nodeId ); - } - @Override public Cursor relationshipCursorById( KernelStatement statement, long relId ) throws EntityNotFoundException diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/LookupFilter.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/LookupFilter.java index 9641f1aa84bd..dcd71e617824 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/LookupFilter.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/LookupFilter.java @@ -130,18 +130,11 @@ private static class OperationsBasedExactMatchPredicate extends BaseExactMatchPr @Override Property nodeProperty( long nodeId, int propertyKeyId ) throws EntityNotFoundException { - try ( Cursor node = readOperations.nodeCursor( state, nodeId ) ) + try ( Cursor node = readOperations.nodeCursorById( state, nodeId ) ) { - if ( node.next() ) - { - Object value = node.get().getProperty( propertyKeyId ); - return value == null ? Property.noNodeProperty( nodeId, propertyKeyId ) : Property.property( - propertyKeyId, value ); - } - else - { - throw new EntityNotFoundException( EntityType.NODE, nodeId ); - } + Object value = node.get().getProperty( propertyKeyId ); + return value == null ? Property.noNodeProperty( nodeId, propertyKeyId ) + : Property.property( propertyKeyId, value ); } } } @@ -191,9 +184,13 @@ static class NumericRangeMatchPredicate implements LongPredicate @Override public boolean test( long nodeId ) { - try ( Cursor node = readOperations.nodeCursor( state, nodeId ) ) + try ( Cursor node = readOperations.nodeCursorById( state, nodeId ) ) { - return node.next() && inRange( node.get().getProperty( propertyKeyId ) ); + return inRange( node.get().getProperty( propertyKeyId ) ); + } + catch ( EntityNotFoundException e ) + { + return false; } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/OperationsFacade.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/OperationsFacade.java index 9d6513ca978c..bd592044d956 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/OperationsFacade.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/OperationsFacade.java @@ -598,10 +598,10 @@ public long nodesCountIndexed( IndexDescriptor index, long nodeId, Object value // @Override - public Cursor nodeCursor( long nodeId ) + public Cursor nodeCursorById( long nodeId ) throws EntityNotFoundException { statement.assertOpen(); - return dataRead().nodeCursor( statement, nodeId ); + return dataRead().nodeCursorById( statement, nodeId ); } @Override diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/StateHandlingStatementOperations.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/StateHandlingStatementOperations.java index c0a724d93336..eade3f83506a 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/StateHandlingStatementOperations.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/StateHandlingStatementOperations.java @@ -142,8 +142,7 @@ public Cursor nodeCursorById( KernelStatement statement, long nodeId ) return node; } - @Override - public Cursor nodeCursor( KernelStatement statement, long nodeId ) + private Cursor nodeCursor( KernelStatement statement, long nodeId ) { Cursor cursor = statement.getStoreStatement().acquireSingleNodeCursor( nodeId ); if ( statement.hasTxStateWithChanges() ) diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/operations/EntityReadOperations.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/operations/EntityReadOperations.java index 0b5030c50b0d..3908610397cb 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/operations/EntityReadOperations.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/operations/EntityReadOperations.java @@ -137,8 +137,6 @@ void relationshipVisit( KernelStatement statement, Cursor nodeCursorById( KernelStatement statement, long nodeId ) throws EntityNotFoundException; - Cursor nodeCursor( KernelStatement statement, long nodeId ); - Cursor relationshipCursorById( KernelStatement statement, long relId ) throws EntityNotFoundException; diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/core/NodeProxy.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/core/NodeProxy.java index 0b2d239e208d..d26ab1a2ffd7 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/core/NodeProxy.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/core/NodeProxy.java @@ -392,19 +392,17 @@ public Map getProperties( String... keys ) try ( Statement statement = actions.statement() ) { - try ( Cursor node = statement.readOperations().nodeCursor( nodeId ) ) + try ( Cursor node = statement.readOperations().nodeCursorById( nodeId ) ) { - if ( !node.next() ) - { - throw new NotFoundException( "Node not found", - new EntityNotFoundException( EntityType.NODE, getId() ) ); - } - try ( Cursor propertyCursor = node.get().properties() ) { return PropertyContainerProxyHelper.getProperties( statement, propertyCursor, keys ); } } + catch ( EntityNotFoundException e ) + { + throw new NotFoundException( "Node not found", e ); + } } } @@ -413,14 +411,8 @@ public Map getAllProperties() { try ( Statement statement = actions.statement() ) { - try ( Cursor node = statement.readOperations().nodeCursor( nodeId ) ) + try ( Cursor node = statement.readOperations().nodeCursorById( nodeId ) ) { - if ( !node.next() ) - { - throw new NotFoundException( "Node not found", - new EntityNotFoundException( EntityType.NODE, getId() ) ); - } - try ( Cursor propertyCursor = node.get().properties() ) { Map properties = new HashMap<>(); @@ -436,6 +428,10 @@ public Map getAllProperties() return properties; } } + catch ( EntityNotFoundException e ) + { + throw new NotFoundException( "Node not found", e ); + } } catch ( PropertyKeyIdNotFoundKernelException e ) { diff --git a/community/kernel/src/test/java/org/neo4j/graphdb/LabelsAcceptanceTest.java b/community/kernel/src/test/java/org/neo4j/graphdb/LabelsAcceptanceTest.java index 87bad088b591..b20ab46eafab 100644 --- a/community/kernel/src/test/java/org/neo4j/graphdb/LabelsAcceptanceTest.java +++ b/community/kernel/src/test/java/org/neo4j/graphdb/LabelsAcceptanceTest.java @@ -38,6 +38,7 @@ import org.neo4j.io.fs.FileSystemAbstraction; import org.neo4j.kernel.GraphDatabaseDependencies; import org.neo4j.kernel.api.Statement; +import org.neo4j.kernel.api.exceptions.EntityNotFoundException; import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge; import org.neo4j.kernel.impl.factory.CommunityEditionModule; import org.neo4j.kernel.impl.factory.DatabaseInfo; @@ -552,7 +553,7 @@ public void shouldCreateNodeWithLotsOfLabelsAndThenRemoveMostOfThem() throws Exc } @Test - public void shouldAllowManyLabelsAndPropertyCursor() + public void shouldAllowManyLabelsAndPropertyCursor() throws Exception { int propertyCount = 10; int labelCount = 15; @@ -581,21 +582,18 @@ public void shouldAllowManyLabelsAndPropertyCursor() ThreadToStatementContextBridge bridge = resolver.resolveDependency( ThreadToStatementContextBridge.class ); try ( Statement statement = bridge.getTopLevelTransactionBoundToThisThread( true ).acquireStatement() ) { - try ( Cursor nodeCursor = statement.readOperations().nodeCursor( node.getId() ) ) + try ( Cursor nodeCursor = statement.readOperations().nodeCursorById( node.getId() ) ) { - if ( nodeCursor.next() ) + try ( Cursor properties = nodeCursor.get().properties() ) { - try ( Cursor properties = nodeCursor.get().properties() ) + while ( properties.next() ) { - while ( properties.next() ) + seenProperties.add( properties.get().propertyKeyId() ); + try ( Cursor labels = nodeCursor.get().labels() ) { - seenProperties.add( properties.get().propertyKeyId() ); - try ( Cursor labels = nodeCursor.get().labels() ) + while ( labels.next() ) { - while ( labels.next() ) - { - seenLabels.add( labels.get().getAsInt() ); - } + seenLabels.add( labels.get().getAsInt() ); } } } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/KernelIT.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/KernelIT.java index 205b56e46e0a..ff2d9abb57aa 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/KernelIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/KernelIT.java @@ -599,10 +599,8 @@ public void txReturnsCorrectIdWhenReadOnly() throws Exception KernelTransaction tx = kernel.newTransaction( KernelTransaction.Type.implicit, AUTH_DISABLED ); try ( Statement statement = tx.acquireStatement(); - Cursor cursor = statement.readOperations().nodeCursor( 1 ) ) + Cursor cursor = statement.readOperations().nodeCursorById( 1 ) ) { - assertTrue( cursor.next() ); - cursor.close(); } tx.success(); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/LabelTransactionStateTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/LabelTransactionStateTest.java index 01d8e95ab3ec..face7d8b6b96 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/LabelTransactionStateTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/LabelTransactionStateTest.java @@ -362,7 +362,7 @@ private void commitLabels( Integer... labels ) throws Exception private void assertLabels( Integer... labels ) throws EntityNotFoundException { - try ( Cursor cursor = txContext.nodeCursor( state, nodeId ) ) + try ( Cursor cursor = txContext.nodeCursorById( state, nodeId ) ) { if ( cursor.next() ) { @@ -372,7 +372,7 @@ private void assertLabels( Integer... labels ) throws EntityNotFoundException for ( int label : labels ) { - try ( Cursor cursor = txContext.nodeCursor( state, nodeId ) ) + try ( Cursor cursor = txContext.nodeCursorById( state, nodeId ) ) { if ( cursor.next() ) { diff --git a/community/neo4j/src/test/java/upgrade/TestMigrateToDenseNodeSupport.java b/community/neo4j/src/test/java/upgrade/TestMigrateToDenseNodeSupport.java index 02ea116585c4..eac82dfa575b 100644 --- a/community/neo4j/src/test/java/upgrade/TestMigrateToDenseNodeSupport.java +++ b/community/neo4j/src/test/java/upgrade/TestMigrateToDenseNodeSupport.java @@ -39,6 +39,7 @@ import org.neo4j.kernel.api.KernelAPI; import org.neo4j.kernel.api.KernelTransaction; import org.neo4j.kernel.api.Statement; +import org.neo4j.kernel.api.exceptions.EntityNotFoundException; import org.neo4j.kernel.api.exceptions.TransactionFailureException; import org.neo4j.kernel.api.security.AnonymousContext; import org.neo4j.kernel.api.security.SecurityContext; @@ -195,11 +196,10 @@ private void verifyDenseRepresentation( GraphDatabaseService db, Node node, bool try ( KernelTransaction tx = kernelAPI.newTransaction( KernelTransaction.Type.implicit, AnonymousContext.read() ); Statement statement = tx.acquireStatement() ) { - Cursor nodeCursor = statement.readOperations().nodeCursor( node.getId() ); - assertTrue( nodeCursor.next() ); + Cursor nodeCursor = statement.readOperations().nodeCursorById( node.getId() ); assertEquals( dense, nodeCursor.get().isDense() ); } - catch ( TransactionFailureException | IllegalArgumentException e ) + catch ( TransactionFailureException | IllegalArgumentException | EntityNotFoundException e ) { throw new RuntimeException( e ); }