diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TransactionCountingStateVisitor.java b/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TransactionCountingStateVisitor.java index 64567cc18ae80..7d4989a3f58d9 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TransactionCountingStateVisitor.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TransactionCountingStateVisitor.java @@ -36,7 +36,7 @@ import static org.neo4j.kernel.api.CountsRead.ANY_LABEL; import static org.neo4j.kernel.api.CountsRead.ANY_RELATIONSHIP_TYPE; -public class TransactionCountingStateVisitor extends TxStateVisitor.Adapter +public class TransactionCountingStateVisitor extends TxStateVisitor.Delegator { private final RelationshipDataExtractor edge = new RelationshipDataExtractor(); private final CountsRecordState counts; diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TxStateVisitor.java b/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TxStateVisitor.java index 1727bc543f5a1..fa48c8fa71aa3 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TxStateVisitor.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TxStateVisitor.java @@ -94,256 +94,321 @@ void visitAddedRelationshipPropertyExistenceConstraint( RelationshipPropertyExis void visitDroppedProcedure( ProcedureDescriptor procedureDescriptor ); + /** + * Must be called Called after all visitor methods, i.e. all changes have been visited. + */ void done(); class Adapter implements TxStateVisitor { - private final TxStateVisitor next; + @Override + public void visitCreatedNode( long id ) + { + } + + @Override + public void visitDeletedNode( long id ) + { + } + + @Override + public void visitCreatedRelationship( long id, int type, long startNode, long endNode ) + throws ConstraintValidationKernelException + { + } + + @Override + public void visitDeletedRelationship( long id ) + { + } + + @Override + public void visitNodePropertyChanges( long id, Iterator added, + Iterator changed, Iterator removed ) + throws ConstraintValidationKernelException + { + } + + @Override + public void visitNodeRelationshipChanges( long id, RelationshipChangesForNode added, + RelationshipChangesForNode removed ) + { + } + + @Override + public void visitRelPropertyChanges( long id, Iterator added, + Iterator changed, Iterator removed ) + throws ConstraintValidationKernelException + { + } - public Adapter( TxStateVisitor next ) + @Override + public void visitGraphPropertyChanges( Iterator added, Iterator changed, + Iterator removed ) { - this.next = next; } - public Adapter() + @Override + public void visitNodeLabelChanges( long id, Set added, Set removed ) + throws ConstraintValidationKernelException + { + } + + @Override + public void visitAddedIndex( IndexDescriptor element, boolean isConstraintIndex ) + { + } + + @Override + public void visitRemovedIndex( IndexDescriptor element, boolean isConstraintIndex ) + { + } + + @Override + public void visitAddedUniquePropertyConstraint( UniquenessConstraint element ) + { + } + + @Override + public void visitRemovedUniquePropertyConstraint( UniquenessConstraint element ) + { + } + + @Override + public void visitAddedNodePropertyExistenceConstraint( NodePropertyExistenceConstraint element ) + throws CreateConstraintFailureException { - this( null ); + } + + @Override + public void visitRemovedNodePropertyExistenceConstraint( NodePropertyExistenceConstraint element ) + { + } + + @Override + public void visitAddedRelationshipPropertyExistenceConstraint( RelationshipPropertyExistenceConstraint element ) + throws CreateConstraintFailureException + { + } + + @Override + public void + visitRemovedRelationshipPropertyExistenceConstraint( RelationshipPropertyExistenceConstraint element ) + { + } + + @Override + public void visitCreatedLabelToken( String name, int id ) + { + } + + @Override + public void visitCreatedPropertyKeyToken( String name, int id ) + { + } + + @Override + public void visitCreatedRelationshipTypeToken( String name, int id ) + { + } + + @Override + public void visitCreatedNodeLegacyIndex( String name, Map config ) + { + } + + @Override + public void visitCreatedRelationshipLegacyIndex( String name, Map config ) + { + } + + @Override + public void visitCreatedProcedure( ProcedureDescriptor procedureDescriptor ) + { + } + + @Override + public void visitDroppedProcedure( ProcedureDescriptor procedureDescriptor ) + { + } + + @Override + public void done() + { + } + } + + TxStateVisitor EMPTY = new Adapter(); + + class Delegator implements TxStateVisitor + { + private final TxStateVisitor actual; + + public Delegator( TxStateVisitor actual ) + { + assert actual != null; + this.actual = actual; } @Override public void visitCreatedNode( long id ) { - if ( next != null ) - { - next.visitCreatedNode( id ); - } + actual.visitCreatedNode( id ); } @Override public void visitDeletedNode( long id ) { - if ( next != null ) - { - next.visitDeletedNode( id ); - } + actual.visitDeletedNode( id ); } @Override public void visitCreatedRelationship( long id, int type, long startNode, long endNode ) throws ConstraintValidationKernelException { - if ( next != null ) - { - next.visitCreatedRelationship( id, type, startNode, endNode ); - } + actual.visitCreatedRelationship( id, type, startNode, endNode ); } @Override public void visitDeletedRelationship( long id ) { - if ( next != null ) - { - next.visitDeletedRelationship( id ); - } + actual.visitDeletedRelationship( id ); } @Override - public void visitNodePropertyChanges( long id, - Iterator added, Iterator changed, - Iterator removed ) throws ConstraintValidationKernelException + public void visitNodePropertyChanges( long id, Iterator added, + Iterator changed, Iterator removed ) + throws ConstraintValidationKernelException { - if ( next != null ) - { - next.visitNodePropertyChanges( id, added, changed, removed ); - } + actual.visitNodePropertyChanges( id, added, changed, removed ); } @Override public void visitNodeRelationshipChanges( long id, RelationshipChangesForNode added, RelationshipChangesForNode removed ) { - if ( next != null ) - { - next.visitNodeRelationshipChanges( id, added, removed ); - } + actual.visitNodeRelationshipChanges( id, added, removed ); } @Override - public void visitRelPropertyChanges( long id, - Iterator added, Iterator changed, - Iterator removed ) throws ConstraintValidationKernelException + public void visitRelPropertyChanges( long id, Iterator added, + Iterator changed, Iterator removed ) + throws ConstraintValidationKernelException { - if ( next != null ) - { - next.visitRelPropertyChanges( id, added, changed, removed ); - } + actual.visitRelPropertyChanges( id, added, changed, removed ); } @Override - public void visitGraphPropertyChanges( Iterator added, - Iterator changed, Iterator removed ) + public void visitGraphPropertyChanges( Iterator added, Iterator changed, + Iterator removed ) { - if ( next != null ) - { - next.visitGraphPropertyChanges( added, changed, removed ); - } + actual.visitGraphPropertyChanges( added, changed, removed ); } @Override public void visitNodeLabelChanges( long id, Set added, Set removed ) throws ConstraintValidationKernelException { - if ( next != null ) - { - next.visitNodeLabelChanges( id, added, removed ); - } + actual.visitNodeLabelChanges( id, added, removed ); } @Override public void visitAddedIndex( IndexDescriptor element, boolean isConstraintIndex ) { - if ( next != null ) - { - next.visitAddedIndex( element, isConstraintIndex ); - } + actual.visitAddedIndex( element, isConstraintIndex ); } @Override public void visitRemovedIndex( IndexDescriptor element, boolean isConstraintIndex ) { - if ( next != null ) - { - next.visitRemovedIndex( element, isConstraintIndex ); - } + actual.visitRemovedIndex( element, isConstraintIndex ); } @Override public void visitAddedUniquePropertyConstraint( UniquenessConstraint element ) { - if ( next != null ) - { - next.visitAddedUniquePropertyConstraint( element ); - } + actual.visitAddedUniquePropertyConstraint( element ); } @Override public void visitRemovedUniquePropertyConstraint( UniquenessConstraint element ) { - if ( next != null ) - { - next.visitRemovedUniquePropertyConstraint( element ); - } + actual.visitRemovedUniquePropertyConstraint( element ); } @Override public void visitAddedNodePropertyExistenceConstraint( NodePropertyExistenceConstraint element ) throws CreateConstraintFailureException { - if ( next != null ) - { - next.visitAddedNodePropertyExistenceConstraint( element ); - } + actual.visitAddedNodePropertyExistenceConstraint( element ); } @Override public void visitRemovedNodePropertyExistenceConstraint( NodePropertyExistenceConstraint element ) { - if ( next != null ) - { - next.visitRemovedNodePropertyExistenceConstraint( element ); - } + actual.visitRemovedNodePropertyExistenceConstraint( element ); } @Override public void visitAddedRelationshipPropertyExistenceConstraint( RelationshipPropertyExistenceConstraint element ) throws CreateConstraintFailureException { - if ( next != null ) - { - next.visitAddedRelationshipPropertyExistenceConstraint( element ); - } + actual.visitAddedRelationshipPropertyExistenceConstraint( element ); } @Override - public void visitRemovedRelationshipPropertyExistenceConstraint( - RelationshipPropertyExistenceConstraint element ) + public void + visitRemovedRelationshipPropertyExistenceConstraint( RelationshipPropertyExistenceConstraint element ) { - if ( next != null ) - { - next.visitRemovedRelationshipPropertyExistenceConstraint( element ); - } + actual.visitRemovedRelationshipPropertyExistenceConstraint( element ); } @Override public void visitCreatedLabelToken( String name, int id ) { - if ( next != null ) - { - next.visitCreatedLabelToken( name, id ); - } + actual.visitCreatedLabelToken( name, id ); } @Override public void visitCreatedPropertyKeyToken( String name, int id ) { - if ( next != null ) - { - next.visitCreatedPropertyKeyToken( name, id ); - } + actual.visitCreatedPropertyKeyToken( name, id ); } @Override public void visitCreatedRelationshipTypeToken( String name, int id ) { - if ( next != null ) - { - next.visitCreatedRelationshipTypeToken( name, id ); - } + actual.visitCreatedRelationshipTypeToken( name, id ); } @Override public void visitCreatedNodeLegacyIndex( String name, Map config ) { - if ( next != null ) - { - next.visitCreatedNodeLegacyIndex( name, config ); - } + actual.visitCreatedNodeLegacyIndex( name, config ); } @Override public void visitCreatedRelationshipLegacyIndex( String name, Map config ) { - if ( next != null ) - { - next.visitCreatedRelationshipLegacyIndex( name, config ); - } + actual.visitCreatedRelationshipLegacyIndex( name, config ); } @Override public void visitCreatedProcedure( ProcedureDescriptor procedureDescriptor ) { - if( next != null ) - { - next.visitCreatedProcedure( procedureDescriptor ); - } + actual.visitCreatedProcedure( procedureDescriptor ); } @Override public void visitDroppedProcedure( ProcedureDescriptor procedureDescriptor ) { - if( next != null ) - { - next.visitDroppedProcedure( procedureDescriptor ); - } + actual.visitDroppedProcedure( procedureDescriptor ); } @Override public void done() { - if ( next != null ) - { - next.done(); - } + actual.done(); } } } 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 e1e0ecef25e48..fd48cba376921 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 @@ -101,6 +101,7 @@ import static org.neo4j.helpers.collection.IteratorUtil.resourceIterator; import static org.neo4j.helpers.collection.IteratorUtil.singleOrNull; import static org.neo4j.kernel.api.StatementConstants.NO_SUCH_NODE; +import static org.neo4j.kernel.api.txstate.TxStateVisitor.EMPTY; import static org.neo4j.kernel.impl.api.PropertyValueComparison.COMPARE_NUMBERS; import static org.neo4j.register.Registers.newDoubleLongRegister; @@ -1179,7 +1180,7 @@ public long countsForNode( final KernelStatement statement, int labelId ) CountsRecordState counts = new CountsRecordState(); try { - statement.txState().accept( new TransactionCountingStateVisitor( null, storeLayer, + statement.txState().accept( new TransactionCountingStateVisitor( EMPTY, storeLayer, statement.txState(), counts ) ); if ( counts.hasChanges() ) { @@ -1209,7 +1210,7 @@ public long countsForRelationship( KernelStatement statement, int startLabelId, CountsRecordState counts = new CountsRecordState(); try { - statement.txState().accept( new TransactionCountingStateVisitor( null, storeLayer, + statement.txState().accept( new TransactionCountingStateVisitor( EMPTY, storeLayer, statement.txState(), counts ) ); if ( counts.hasChanges() ) { diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/TxStateTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/TxStateTest.java index 77fe10f4456a8..baf54ce50ac3f 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/TxStateTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/TxStateTest.java @@ -49,16 +49,18 @@ import org.neo4j.test.RandomizedTestRule; import org.neo4j.test.RepeatRule; -import static java.util.Arrays.asList; -import static java.util.Collections.emptySet; -import static java.util.Collections.singleton; -import static java.util.Collections.singletonList; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; + +import static java.util.Arrays.asList; +import static java.util.Collections.emptySet; +import static java.util.Collections.singleton; +import static java.util.Collections.singletonList; + import static org.neo4j.helpers.Pair.of; import static org.neo4j.helpers.collection.IteratorUtil.asSet; import static org.neo4j.kernel.api.properties.Property.booleanProperty; @@ -1567,6 +1569,7 @@ private IndexUpdater addNodesToIndex( final IndexDescriptor descriptor ) { return new IndexUpdater() { + @Override public void withDefaultStringProperties( long... nodeIds ) { Collection> entries = new ArrayList<>( nodeIds.length ); @@ -1577,6 +1580,7 @@ public void withDefaultStringProperties( long... nodeIds ) withStringProperties( entries ); } + @Override public void withStringProperties( Collection> nodesWithValues ) { final int labelId = descriptor.getLabelId(); @@ -1593,6 +1597,7 @@ public void withStringProperties( Collection> nodesWithValues } } + @Override public void withNumberProperties( Collection> nodesWithValues ) { final int labelId = descriptor.getLabelId(); @@ -1609,6 +1614,7 @@ public void withNumberProperties( Collection> n } } + @Override public void withBooleanProperties( Collection> nodesWithValues ) { final int labelId = descriptor.getLabelId(); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/TxStateVisitorTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/TxStateVisitorTest.java index 7b9131bc7ecf0..8a6f0a9acf97a 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/TxStateVisitorTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/TxStateVisitorTest.java @@ -31,12 +31,14 @@ import org.neo4j.helpers.collection.IteratorUtil; import org.neo4j.kernel.api.properties.DefinedProperty; -import org.neo4j.kernel.api.txstate.TxStateVisitor; import org.neo4j.kernel.api.txstate.TransactionState; +import org.neo4j.kernel.api.txstate.TxStateVisitor; -import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; + +import static java.util.Arrays.asList; + import static org.neo4j.kernel.api.properties.Property.stringProperty; public class TxStateVisitorTest diff --git a/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/PropertyExistenceEnforcer.java b/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/PropertyExistenceEnforcer.java index 858245bba4a54..070bdf27d2924 100644 --- a/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/PropertyExistenceEnforcer.java +++ b/enterprise/kernel/src/main/java/org/neo4j/kernel/impl/enterprise/PropertyExistenceEnforcer.java @@ -44,7 +44,7 @@ import static java.lang.String.format; -class PropertyExistenceEnforcer extends TxStateVisitor.Adapter +class PropertyExistenceEnforcer extends TxStateVisitor.Delegator { private final EntityReadOperations readOperations; private final StoreReadLayer storeLayer;