From e290c4daba5657472df8d76ace3f437ecd0024f9 Mon Sep 17 00:00:00 2001 From: fickludd Date: Thu, 25 May 2017 23:34:01 +0200 Subject: [PATCH] Introduces Value as the property write type --- .../full/PropertyAndNodeIndexedCheck.java | 3 +- .../v2_3/TransactionBoundQueryContext.scala | 9 +- .../v3_1/TransactionBoundQueryContext.scala | 7 +- .../v3_2/TransactionBoundQueryContext.scala | 5 +- .../v3_3/TransactionBoundQueryContext.scala | 5 +- community/kernel/pom.xml | 5 + .../neo4j/kernel/api/DataWriteOperations.java | 15 ++- .../api/legacyindex/AutoIndexOperations.java | 13 +- .../neo4j/kernel/api/schema/IndexQuery.java | 10 +- .../kernel/api/txstate/TransactionState.java | 18 ++- .../ConstraintEnforcingEntityOperations.java | 50 ++++---- .../impl/api/GuardingStatementOperations.java | 24 ++-- .../impl/api/LockingStatementOperations.java | 27 ++-- .../kernel/impl/api/OperationsFacade.java | 21 ++-- .../api/StateHandlingStatementOperations.java | 117 ++++++++---------- .../InternalAutoIndexOperations.java | 28 ++--- .../api/operations/EntityWriteOperations.java | 15 ++- .../impl/api/state/IndexTxStateUpdater.java | 57 ++++----- .../api/state/PropertyContainerStateImpl.java | 91 +++++++------- .../neo4j/kernel/impl/api/state/TxState.java | 51 ++++---- .../impl/core/GraphPropertiesProxy.java | 6 +- .../org/neo4j/kernel/impl/core/NodeProxy.java | 6 +- .../kernel/impl/core/RelationshipProxy.java | 6 +- .../java/org/neo4j/helpers/ListenersTest.java | 14 +-- .../neo4j/kernel/api/CompositeIndexingIT.java | 12 +- .../CompositeIndexAccessorCompatibility.java | 3 +- .../CompositeIndexPopulatorCompatibility.java | 1 + .../kernel/api/index/IndexQueryHelper.java | 35 ++++++ .../SimpleIndexAccessorCompatibility.java | 1 - .../builtinprocs/SchemaProcedureIT.java | 4 +- .../impl/api/AutoIndexOperationsTest.java | 11 +- .../api/LockingStatementOperationsTest.java | 37 +++--- .../impl/api/index/IndexStatisticsTest.java | 6 +- ...ositeUniquenessConstraintValidationIT.java | 6 +- .../NodeGetUniqueFromIndexSeekIT.java | 33 ++--- .../impl/api/integrationtest/PropertyIT.java | 62 +++++----- .../UniquenessConstraintValidationIT.java | 28 ++--- ...nstraintEnforcingEntityOperationsTest.java | 4 +- .../state/IndexQueryTransactionStateTest.java | 34 ++--- .../api/state/IndexTxStateUpdaterTest.java | 16 ++- .../state/PropertyContainerStateImplTest.java | 19 +-- .../StateHandlingStatementOperationsTest.java | 25 ++-- .../StateOperationsAutoIndexingTest.java | 43 ++++--- .../kernel/impl/api/state/TxStateTest.java | 45 ++----- .../impl/api/state/TxStateVisitorTest.java | 9 +- .../TxStateTransactionDataViewTest.java | 30 +++-- .../locking/IndexEntryResourceTypesTest.java | 4 +- .../kernel/impl/locking/ResourceTypesIT.java | 1 + .../kernel/impl/store/NeoStoresTest.java | 24 ++-- ...orkSyncTransactionApplicationStressIT.java | 11 +- .../ConstraintIndexConcurrencyTest.java | 5 +- .../lucene/legacy/NonUniqueIndexTest.java | 1 + .../DatabaseCompositeIndexAccessorTest.java | 21 ++-- .../schema/DatabaseIndexAccessorTest.java | 2 +- .../reader/PartitionedIndexReaderTest.java | 1 + .../schema/reader/SimpleIndexReaderTest.java | 1 + community/values/pom.xml | 4 - .../PropertyConstraintValidationIT.java | 30 ++--- .../UniquenessConstraintCreationIT.java | 6 +- 59 files changed, 606 insertions(+), 572 deletions(-) create mode 100644 community/kernel/src/test/java/org/neo4j/kernel/api/index/IndexQueryHelper.java diff --git a/community/consistency-check/src/main/java/org/neo4j/consistency/checking/full/PropertyAndNodeIndexedCheck.java b/community/consistency-check/src/main/java/org/neo4j/consistency/checking/full/PropertyAndNodeIndexedCheck.java index 6be00ecfde4f5..0e9d7ac86bd8f 100644 --- a/community/consistency-check/src/main/java/org/neo4j/consistency/checking/full/PropertyAndNodeIndexedCheck.java +++ b/community/consistency-check/src/main/java/org/neo4j/consistency/checking/full/PropertyAndNodeIndexedCheck.java @@ -45,6 +45,7 @@ import org.neo4j.kernel.impl.store.record.PropertyRecord; import org.neo4j.kernel.impl.store.record.Record; import org.neo4j.storageengine.api.schema.IndexReader; +import org.neo4j.values.Values; import static java.lang.String.format; @@ -223,7 +224,7 @@ private IndexQuery[] seek( LabelSchemaDescriptor schema, Object[] propertyValues IndexQuery[] query = new IndexQuery[propertyValues.length]; for ( int i = 0; i < query.length; i++ ) { - query[i] = IndexQuery.exact( schema.getPropertyIds()[i], propertyValues[i] ); + query[i] = IndexQuery.exact( schema.getPropertyIds()[i], Values.of( propertyValues[i] ) ); } return query; } diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v2_3/TransactionBoundQueryContext.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v2_3/TransactionBoundQueryContext.scala index a01d1da10c709..2a385cf49e793 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v2_3/TransactionBoundQueryContext.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v2_3/TransactionBoundQueryContext.scala @@ -52,6 +52,7 @@ import org.neo4j.kernel.api.schema.index.IndexDescriptorFactory import org.neo4j.kernel.api.schema.{IndexQuery, SchemaDescriptorFactory} import org.neo4j.kernel.api.{exceptions, _} import org.neo4j.kernel.impl.core.NodeManager +import org.neo4j.values.Values import scala.collection.JavaConverters._ import scala.collection.{Iterator, mutable} @@ -130,7 +131,7 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapper) def indexSeek(index: SchemaTypes.IndexDescriptor, value: Any) = JavaConversionSupport.mapToScalaENFXSafe( - tc.statement.readOperations().indexQuery(index, IndexQuery.exact(index.propertyId, value)))(nodeOps.getById) + tc.statement.readOperations().indexQuery(index, IndexQuery.exact(index.propertyId, Values.of(value))))(nodeOps.getById) def indexSeekByRange(index: SchemaTypes.IndexDescriptor, value: Any) = value match { @@ -250,7 +251,7 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapper) mapToScalaENFXSafe(tc.statement.readOperations().indexQuery(index, IndexQuery.exists(index.propertyId)))(nodeOps.getById) override def lockingExactUniqueIndexSearch(index: SchemaTypes.IndexDescriptor, value: Any): Option[Node] = { - val nodeId: Long = tc.statement.readOperations().nodeGetFromUniqueIndexSeek(index, IndexQuery.exact(index.propertyId, value)) + val nodeId: Long = tc.statement.readOperations().nodeGetFromUniqueIndexSeek(index, IndexQuery.exact(index.propertyId, Values.of(value))) if (StatementConstants.NO_SUCH_NODE == nodeId) None else Some(nodeOps.getById(nodeId)) } @@ -325,7 +326,7 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapper) } def setProperty(id: Long, propertyKeyId: Int, value: Any) = try { - tc.statement.dataWriteOperations().nodeSetProperty(id, properties.Property.property(propertyKeyId, value) ) + tc.statement.dataWriteOperations().nodeSetProperty(id, propertyKeyId, Values.of(value)) } catch { case _: org.neo4j.kernel.api.exceptions.EntityNotFoundException => //ignore } @@ -395,7 +396,7 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapper) } override def setProperty(id: Long, propertyKeyId: Int, value: Any) = try { - tc.statement.dataWriteOperations().relationshipSetProperty(id, properties.Property.property(propertyKeyId, value)) + tc.statement.dataWriteOperations().relationshipSetProperty(id, propertyKeyId, Values.of(value)) } catch { case _: exceptions.EntityNotFoundException => //ignore } diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_1/TransactionBoundQueryContext.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_1/TransactionBoundQueryContext.scala index 35348394ab78e..601c337f2c142 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_1/TransactionBoundQueryContext.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_1/TransactionBoundQueryContext.scala @@ -58,6 +58,7 @@ import org.neo4j.kernel.api.schema.constaints.{ConstraintDescriptor, ConstraintD import org.neo4j.kernel.api.schema.index.IndexDescriptorFactory import org.neo4j.kernel.impl.core.NodeManager import org.neo4j.kernel.impl.locking.ResourceTypes +import org.neo4j.values.Values import scala.collection.Iterator import scala.collection.JavaConverters._ @@ -140,7 +141,7 @@ final class TransactionBoundQueryContext(txContext: TransactionalContextWrapper) override def indexSeek(index: IndexDescriptor, value: Any) = { indexSearchMonitor.indexSeek(index, value) - JavaConversionSupport.mapToScalaENFXSafe(txContext.statement.readOperations().indexQuery(index, IndexQuery.exact(index.propertyId, value)))(nodeOps.getById) + JavaConversionSupport.mapToScalaENFXSafe(txContext.statement.readOperations().indexQuery(index, IndexQuery.exact(index.propertyId, Values.of(value))))(nodeOps.getById) } override def indexSeekByRange(index: IndexDescriptor, value: Any) = value match { @@ -328,7 +329,7 @@ final class TransactionBoundQueryContext(txContext: TransactionalContextWrapper) override def setProperty(id: Long, propertyKeyId: Int, value: Any) { try { - txContext.statement.dataWriteOperations().nodeSetProperty(id, properties.Property.property(propertyKeyId, value) ) + txContext.statement.dataWriteOperations().nodeSetProperty(id, propertyKeyId, Values.of(value) ) } catch { case _: exceptions.EntityNotFoundException => //ignore } @@ -403,7 +404,7 @@ final class TransactionBoundQueryContext(txContext: TransactionalContextWrapper) override def setProperty(id: Long, propertyKeyId: Int, value: Any) { try { - txContext.statement.dataWriteOperations().relationshipSetProperty(id, properties.Property.property(propertyKeyId, value)) + txContext.statement.dataWriteOperations().relationshipSetProperty(id, propertyKeyId, Values.of(value) ) } catch { case _: exceptions.EntityNotFoundException => //ignore } diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_2/TransactionBoundQueryContext.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_2/TransactionBoundQueryContext.scala index 5abf51ad453ba..4aec65ae5d59e 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_2/TransactionBoundQueryContext.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_2/TransactionBoundQueryContext.scala @@ -56,6 +56,7 @@ import org.neo4j.kernel.api.schema.constaints.ConstraintDescriptorFactory import org.neo4j.kernel.api.schema.{IndexQuery, SchemaDescriptorFactory} import org.neo4j.kernel.impl.core.NodeManager import org.neo4j.kernel.impl.locking.ResourceTypes +import org.neo4j.values.Values import scala.collection.Iterator import scala.collection.JavaConverters._ @@ -335,7 +336,7 @@ final class TransactionBoundQueryContext(val transactionalContext: Transactional override def setProperty(id: Long, propertyKeyId: Int, value: Any) { try { - transactionalContext.statement.dataWriteOperations().nodeSetProperty(id, properties.Property.property(propertyKeyId, value) ) + transactionalContext.statement.dataWriteOperations().nodeSetProperty(id, propertyKeyId, Values.of(value)) } catch { case _: exceptions.EntityNotFoundException => //ignore } @@ -410,7 +411,7 @@ final class TransactionBoundQueryContext(val transactionalContext: Transactional override def setProperty(id: Long, propertyKeyId: Int, value: Any) { try { - transactionalContext.statement.dataWriteOperations().relationshipSetProperty(id, properties.Property.property(propertyKeyId, value)) + transactionalContext.statement.dataWriteOperations().relationshipSetProperty(id, propertyKeyId, Values.of(value)) } catch { case _: exceptions.EntityNotFoundException => //ignore } diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_3/TransactionBoundQueryContext.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_3/TransactionBoundQueryContext.scala index 62014f7bbacfb..5aff25a66dfb1 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_3/TransactionBoundQueryContext.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/spi/v3_3/TransactionBoundQueryContext.scala @@ -56,6 +56,7 @@ import org.neo4j.kernel.impl.locking.ResourceTypes import JavaConversionSupport._ import org.neo4j.cypher.internal.compatibility.v3_3.runtime.commands.expressions.{KernelPredicate, OnlyDirectionExpander, TypeAndDirectionExpander, UserDefinedAggregator} import org.neo4j.cypher.internal.compatibility.v3_3.runtime.commands.expressions +import org.neo4j.values.Values import scala.collection.Iterator import scala.collection.JavaConverters._ @@ -335,7 +336,7 @@ final class TransactionBoundQueryContext(val transactionalContext: Transactional override def setProperty(id: Long, propertyKeyId: Int, value: Any) { try { - transactionalContext.statement.dataWriteOperations().nodeSetProperty(id, properties.Property.property(propertyKeyId, value) ) + transactionalContext.statement.dataWriteOperations().nodeSetProperty(id, propertyKeyId, Values.of(value)) } catch { case _: exceptions.EntityNotFoundException => //ignore } @@ -409,7 +410,7 @@ final class TransactionBoundQueryContext(val transactionalContext: Transactional override def setProperty(id: Long, propertyKeyId: Int, value: Any) { try { - transactionalContext.statement.dataWriteOperations().relationshipSetProperty(id, properties.Property.property(propertyKeyId, value)) + transactionalContext.statement.dataWriteOperations().relationshipSetProperty(id, propertyKeyId, Values.of(value)) } catch { case _: exceptions.EntityNotFoundException => //ignore } diff --git a/community/kernel/pom.xml b/community/kernel/pom.xml index efaaeb3562830..4e82dbb0a62ab 100644 --- a/community/kernel/pom.xml +++ b/community/kernel/pom.xml @@ -160,6 +160,11 @@ the relevant Commercial Agreement. neo4j-common ${project.version} + + org.neo4j + neo4j-values + ${project.version} + org.neo4j neo4j-collections diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/DataWriteOperations.java b/community/kernel/src/main/java/org/neo4j/kernel/api/DataWriteOperations.java index bcef658eaef24..efb9bb19eaff1 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/DataWriteOperations.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/DataWriteOperations.java @@ -28,8 +28,7 @@ import org.neo4j.kernel.api.exceptions.legacyindex.AutoIndexingKernelException; import org.neo4j.kernel.api.exceptions.legacyindex.LegacyIndexNotFoundKernelException; import org.neo4j.kernel.api.exceptions.schema.ConstraintValidationException; -import org.neo4j.kernel.api.properties.DefinedProperty; -import org.neo4j.kernel.api.properties.Property; +import org.neo4j.values.Value; public interface DataWriteOperations { @@ -70,26 +69,26 @@ boolean nodeAddLabel( long nodeId, int labelId ) */ boolean nodeRemoveLabel( long nodeId, int labelId ) throws EntityNotFoundException; - Property nodeSetProperty( long nodeId, DefinedProperty property ) + Value nodeSetProperty( long nodeId, int propertyKeyId, Value value ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException, ConstraintValidationException; - Property relationshipSetProperty( long relationshipId, DefinedProperty property ) + Value relationshipSetProperty( long relationshipId, int propertyKeyId, Value value ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException; - Property graphSetProperty( DefinedProperty property ); + Value graphSetProperty( int propertyKeyId, Value value ); /** * Remove a node's property given the node's id and the property key id and return the value to which * it was set or null if it was not set on the node */ - Property nodeRemoveProperty( long nodeId, int propertyKeyId ) + Value nodeRemoveProperty( long nodeId, int propertyKeyId ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException; - Property relationshipRemoveProperty( long relationshipId, int propertyKeyId ) + Value relationshipRemoveProperty( long relationshipId, int propertyKeyId ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException; - Property graphRemoveProperty( int propertyKeyId ); + Value graphRemoveProperty( int propertyKeyId ); /** * Creates a legacy index in a separate transaction if not yet available. diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/legacyindex/AutoIndexOperations.java b/community/kernel/src/main/java/org/neo4j/kernel/api/legacyindex/AutoIndexOperations.java index 3ff50a99736b3..30c4da2b86e67 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/legacyindex/AutoIndexOperations.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/legacyindex/AutoIndexOperations.java @@ -23,7 +23,7 @@ import org.neo4j.kernel.api.DataWriteOperations; import org.neo4j.kernel.api.exceptions.legacyindex.AutoIndexingKernelException; -import org.neo4j.kernel.api.properties.Property; +import org.neo4j.values.Value; /** * Abstract interface for accessing legacy auto indexing facilities for a given type of entity (nodes or relationships) @@ -38,8 +38,8 @@ */ public interface AutoIndexOperations { - void propertyAdded( DataWriteOperations ops, long entityId, Property property ) throws AutoIndexingKernelException; - void propertyChanged( DataWriteOperations ops, long entityId, Property oldProperty, Property newProperty ) + void propertyAdded( DataWriteOperations ops, long entityId, int propertyKeyId, Value value ) throws AutoIndexingKernelException; + void propertyChanged( DataWriteOperations ops, long entityId, int propertyKeyId, Value oldValue, Value newValue ) throws AutoIndexingKernelException; void propertyRemoved( DataWriteOperations ops, long entityId, int propertyKey ) throws AutoIndexingKernelException; @@ -60,14 +60,15 @@ void propertyRemoved( DataWriteOperations ops, long entityId, int propertyKey ) AutoIndexOperations UNSUPPORTED = new AutoIndexOperations() { @Override - public void propertyAdded( DataWriteOperations ops, long entityId, Property property ) throws AutoIndexingKernelException + public void propertyAdded( DataWriteOperations ops, long entityId, int propertyKeyId, Value value ) + throws AutoIndexingKernelException { throw new UnsupportedOperationException(); } @Override - public void propertyChanged( DataWriteOperations ops, long entityId, Property oldProperty, - Property newProperty ) throws AutoIndexingKernelException + public void propertyChanged( DataWriteOperations ops, long entityId, int propertyKeyId, Value oldValue, + Value newValue ) throws AutoIndexingKernelException { throw new UnsupportedOperationException(); } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/schema/IndexQuery.java b/community/kernel/src/main/java/org/neo4j/kernel/api/schema/IndexQuery.java index 94128ce9cec90..29106fae5d4ec 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/schema/IndexQuery.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/schema/IndexQuery.java @@ -31,6 +31,8 @@ import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.kernel.impl.api.PropertyValueComparison; +import org.neo4j.values.Value; +import org.neo4j.values.Values; public abstract class IndexQuery implements Predicate { @@ -203,12 +205,12 @@ public boolean test( Object value ) public static final class ExactPredicate extends IndexQuery { - private final DefinedProperty exactValue; + private final Value exactValue; ExactPredicate( int propertyKeyId, Object value ) { super( propertyKeyId ); - this.exactValue = Property.property( propertyKeyId, value ); + this.exactValue = value instanceof Value ? (Value)value : Values.of( value ); } @Override @@ -220,12 +222,12 @@ public IndexQueryType type() @Override public boolean test( Object value ) { - return exactValue.valueEquals( value ); + return exactValue.equals( Values.of( value ) ); } public Object value() { - return exactValue.value(); + return exactValue.asPublic(); } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TransactionState.java b/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TransactionState.java index 20cff824af842..539f25adb02f6 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TransactionState.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TransactionState.java @@ -19,14 +19,13 @@ */ package org.neo4j.kernel.api.txstate; -import org.neo4j.kernel.api.properties.DefinedProperty; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.schema.LabelSchemaDescriptor; import org.neo4j.kernel.api.schema.OrderedPropertyValues; import org.neo4j.kernel.api.schema.constaints.ConstraintDescriptor; import org.neo4j.kernel.api.schema.constaints.IndexBackedConstraintDescriptor; import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.storageengine.api.txstate.ReadableTransactionState; +import org.neo4j.values.Value; /** * Kernel transaction state, please see {@link org.neo4j.kernel.impl.api.state.TxState} for implementation details. @@ -50,20 +49,19 @@ public interface TransactionState extends ReadableTransactionState void nodeDoDelete( long nodeId ); - void nodeDoAddProperty( long nodeId, DefinedProperty newProperty ); + void nodeDoAddProperty( long nodeId, int newPropertyKeyId, Value value ); - void nodeDoChangeProperty( long nodeId, DefinedProperty replacedProperty, DefinedProperty newProperty ); + void nodeDoChangeProperty( long nodeId, int propertyKeyId, Value replacedValue, Value newValue ); - void relationshipDoReplaceProperty( long relationshipId, - Property replacedProperty, DefinedProperty newProperty ); + void relationshipDoReplaceProperty( long relationshipId, int propertyKeyId, Value replacedValue, Value newValue ); - void graphDoReplaceProperty( Property replacedProperty, DefinedProperty newProperty ); + void graphDoReplaceProperty( int propertyKeyId, Value replacedValue, Value newValue ); - void nodeDoRemoveProperty( long nodeId, DefinedProperty removedProperty ); + void nodeDoRemoveProperty( long nodeId, int propertyKeyId, Value removedValue ); - void relationshipDoRemoveProperty( long relationshipId, DefinedProperty removedProperty ); + void relationshipDoRemoveProperty( long relationshipId, int propertyKeyId, Value removedValue ); - void graphDoRemoveProperty( DefinedProperty removedProperty ); + void graphDoRemoveProperty( int propertyKeyId, Value removedValue ); void nodeDoAddLabel( int labelId, long nodeId ); 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 9299d6a2b98a3..77929f9c046f3 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 @@ -30,6 +30,7 @@ import org.neo4j.cursor.Cursor; import org.neo4j.helpers.collection.CastingIterator; import org.neo4j.helpers.collection.Iterators; +import org.neo4j.kernel.api.StatementConstants; import org.neo4j.kernel.api.exceptions.EntityNotFoundException; import org.neo4j.kernel.api.exceptions.InvalidTransactionTypeKernelException; import org.neo4j.kernel.api.exceptions.KernelException; @@ -47,8 +48,6 @@ import org.neo4j.kernel.api.exceptions.schema.RepeatedPropertyInCompositeSchemaException; import org.neo4j.kernel.api.exceptions.schema.UnableToValidateConstraintException; import org.neo4j.kernel.api.exceptions.schema.UniquePropertyValueValidationException; -import org.neo4j.kernel.api.properties.DefinedProperty; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.schema.IndexQuery; import org.neo4j.kernel.api.schema.IndexQuery.ExactPredicate; import org.neo4j.kernel.api.schema.LabelSchemaDescriptor; @@ -76,6 +75,8 @@ import org.neo4j.storageengine.api.NodeItem; import org.neo4j.storageengine.api.PropertyItem; import org.neo4j.storageengine.api.RelationshipItem; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static java.lang.String.format; import static org.neo4j.kernel.api.StatementConstants.NO_SUCH_NODE; @@ -138,7 +139,7 @@ public boolean nodeAddLabel( KernelStatement state, long nodeId, int labelId ) } @Override - public Property nodeSetProperty( KernelStatement state, long nodeId, DefinedProperty property ) + public Value nodeSetProperty( KernelStatement state, long nodeId, int propertyKeyId, Value value ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException, ConstraintValidationException { @@ -146,30 +147,30 @@ public Property nodeSetProperty( KernelStatement state, long nodeId, DefinedProp { NodeItem node = cursor.get(); Iterator constraints = - getConstraintsInvolvingProperty( state, property.propertyKeyId() ); + getConstraintsInvolvingProperty( state, propertyKeyId ); Iterator uniquenessConstraints = new CastingIterator<>( constraints, IndexBackedConstraintDescriptor.class ); - nodeSchemaMatcher.onMatchingSchema( state, uniquenessConstraints, node, property.propertyKeyId(), + nodeSchemaMatcher.onMatchingSchema( state, uniquenessConstraints, node, propertyKeyId, ( constraint, propertyIds ) -> { - if ( propertyIds.contains( property.propertyKeyId() ) ) + if ( propertyIds.contains( propertyKeyId ) ) { - Object previousValue = nodeGetProperty( state, node, property.propertyKeyId() ); - if ( property.valueEquals( previousValue ) ) + Object previousValue = nodeGetProperty( state, node, propertyKeyId ); + if ( value.equals( Values.of( previousValue ) ) ) { // since we are changing to the same value, there is no need to check return; } } validateNoExistingNodeWithExactValues( state, constraint, - getAllPropertyValues( state, constraint.schema(), node, property ), + getAllPropertyValues( state, constraint.schema(), node, propertyKeyId, value ), node.id() ); } ); } - return entityWriteOperations.nodeSetProperty( state, nodeId, property ); + return entityWriteOperations.nodeSetProperty( state, nodeId, propertyKeyId, value ); } private Iterator getConstraintsInvolvingProperty( KernelStatement state, int propertyId ) @@ -181,7 +182,7 @@ private Iterator getConstraintsInvolvingProperty( KernelSt private ExactPredicate[] getAllPropertyValues( KernelStatement state, SchemaDescriptor schema, NodeItem node ) { - return getAllPropertyValues( state, schema, node, DefinedProperty.NO_SUCH_PROPERTY ); + return getAllPropertyValues( state, schema, node, StatementConstants.NO_SUCH_PROPERTY_KEY, Values.NO_VALUE ); } /** @@ -192,14 +193,13 @@ private ExactPredicate[] getAllPropertyValues( KernelStatement state, SchemaDesc * to change a property, and that to verify that the post-change values do not validate some constraint. */ private ExactPredicate[] getAllPropertyValues( KernelStatement state, SchemaDescriptor schema, NodeItem node, - DefinedProperty changedProperty ) + int changedPropertyKeyId, Value changedValue ) { int[] schemaPropertyIds = schema.getPropertyIds(); ExactPredicate[] values = new ExactPredicate[schemaPropertyIds.length]; int nMatched = 0; Cursor nodePropertyCursor = nodeGetProperties( state, node ); - int changedPropId = changedProperty.propertyKeyId(); while ( nodePropertyCursor.next() ) { PropertyItem property = nodePropertyCursor.get(); @@ -208,20 +208,20 @@ private ExactPredicate[] getAllPropertyValues( KernelStatement state, SchemaDesc int k = ArrayUtils.indexOf( schemaPropertyIds, nodePropertyId ); if ( k >= 0 ) { - if ( nodePropertyId != changedPropId ) + if ( nodePropertyId != changedPropertyKeyId ) { - values[k] = IndexQuery.exact( nodePropertyId, property.value() ); + values[k] = IndexQuery.exact( nodePropertyId, Values.of( property.value() ) ); } nMatched++; } } - if ( changedPropId != NO_SUCH_PROPERTY_KEY ) + if ( changedPropertyKeyId != NO_SUCH_PROPERTY_KEY ) { - int k = ArrayUtils.indexOf( schemaPropertyIds, changedPropId ); + int k = ArrayUtils.indexOf( schemaPropertyIds, changedPropertyKeyId ); if ( k >= 0 ) { - values[k] = IndexQuery.exact( changedPropId, changedProperty.value() ); + values[k] = IndexQuery.exact( changedPropertyKeyId, changedValue ); nMatched++; } } @@ -316,27 +316,27 @@ public boolean nodeRemoveLabel( KernelStatement state, long nodeId, int labelId } @Override - public Property relationshipSetProperty( KernelStatement state, long relationshipId, DefinedProperty property ) + public Value relationshipSetProperty( KernelStatement state, long relationshipId, int propertyKeyId, Value value ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { - return entityWriteOperations.relationshipSetProperty( state, relationshipId, property ); + return entityWriteOperations.relationshipSetProperty( state, relationshipId, propertyKeyId, value ); } @Override - public Property graphSetProperty( KernelStatement state, DefinedProperty property ) + public Value graphSetProperty( KernelStatement state, int propertyKeyId, Value value ) { - return entityWriteOperations.graphSetProperty( state, property ); + return entityWriteOperations.graphSetProperty( state, propertyKeyId, value ); } @Override - public Property nodeRemoveProperty( KernelStatement state, long nodeId, int propertyKeyId ) + public Value nodeRemoveProperty( KernelStatement state, long nodeId, int propertyKeyId ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { return entityWriteOperations.nodeRemoveProperty( state, nodeId, propertyKeyId ); } @Override - public Property relationshipRemoveProperty( KernelStatement state, + public Value relationshipRemoveProperty( KernelStatement state, long relationshipId, int propertyKeyId ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { @@ -344,7 +344,7 @@ public Property relationshipRemoveProperty( KernelStatement state, } @Override - public Property graphRemoveProperty( KernelStatement state, int propertyKeyId ) + public Value graphRemoveProperty( KernelStatement state, int propertyKeyId ) { return entityWriteOperations.graphRemoveProperty( state, propertyKeyId ); } 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 6f636860784e1..db9608420634c 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 @@ -32,8 +32,6 @@ import org.neo4j.kernel.api.exceptions.legacyindex.AutoIndexingKernelException; import org.neo4j.kernel.api.exceptions.schema.ConstraintValidationException; import org.neo4j.kernel.api.exceptions.schema.IndexBrokenKernelException; -import org.neo4j.kernel.api.properties.DefinedProperty; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.schema.IndexQuery; import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.kernel.guard.Guard; @@ -43,6 +41,7 @@ import org.neo4j.storageengine.api.NodeItem; import org.neo4j.storageengine.api.PropertyItem; import org.neo4j.storageengine.api.RelationshipItem; +import org.neo4j.values.Value; public class GuardingStatementOperations implements EntityWriteOperations, @@ -119,32 +118,31 @@ public boolean nodeRemoveLabel( KernelStatement statement, long nodeId, int labe } @Override - public Property nodeSetProperty( KernelStatement statement, long nodeId, DefinedProperty property ) + public Value nodeSetProperty( KernelStatement statement, long nodeId, int propertyKeyId, Value value ) throws ConstraintValidationException, EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { guard.check( statement ); - return entityWriteDelegate.nodeSetProperty( statement, nodeId, property ); + return entityWriteDelegate.nodeSetProperty( statement, nodeId, propertyKeyId, value ); } @Override - public Property relationshipSetProperty( KernelStatement statement, - long relationshipId, - DefinedProperty property ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException + public Value relationshipSetProperty( KernelStatement statement, long relationshipId, int propertyKeyId, + Value value ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { guard.check( statement ); - return entityWriteDelegate.relationshipSetProperty( statement, relationshipId, property ); + return entityWriteDelegate.relationshipSetProperty( statement, relationshipId, propertyKeyId, value ); } @Override - public Property graphSetProperty( KernelStatement statement, DefinedProperty property ) + public Value graphSetProperty( KernelStatement statement, int propertyKeyId, Value value ) { guard.check( statement ); - return entityWriteDelegate.graphSetProperty( statement, property ); + return entityWriteDelegate.graphSetProperty( statement, propertyKeyId, value ); } @Override - public Property nodeRemoveProperty( KernelStatement statement, long nodeId, int propertyKeyId ) + public Value nodeRemoveProperty( KernelStatement statement, long nodeId, int propertyKeyId ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { guard.check( statement ); @@ -152,7 +150,7 @@ public Property nodeRemoveProperty( KernelStatement statement, long nodeId, int } @Override - public Property relationshipRemoveProperty( KernelStatement statement, + public Value relationshipRemoveProperty( KernelStatement statement, long relationshipId, int propertyKeyId ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { @@ -161,7 +159,7 @@ public Property relationshipRemoveProperty( KernelStatement statement, } @Override - public Property graphRemoveProperty( KernelStatement statement, int propertyKeyId ) + public Value graphRemoveProperty( KernelStatement statement, int propertyKeyId ) { guard.check( statement ); return entityWriteDelegate.graphRemoveProperty( statement, propertyKeyId ); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/LockingStatementOperations.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/LockingStatementOperations.java index 0b19c5772cac7..89cc895db7221 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/LockingStatementOperations.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/LockingStatementOperations.java @@ -39,8 +39,6 @@ import org.neo4j.kernel.api.exceptions.schema.RepeatedPropertyInCompositeSchemaException; import org.neo4j.kernel.api.exceptions.schema.SchemaRuleNotFoundException; import org.neo4j.kernel.api.index.InternalIndexState; -import org.neo4j.kernel.api.properties.DefinedProperty; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.schema.LabelSchemaDescriptor; import org.neo4j.kernel.api.schema.RelationTypeSchemaDescriptor; import org.neo4j.kernel.api.schema.SchemaDescriptor; @@ -59,6 +57,7 @@ import org.neo4j.kernel.impl.locking.ResourceTypes; import org.neo4j.storageengine.api.lock.ResourceType; import org.neo4j.storageengine.api.schema.PopulationProgress; +import org.neo4j.values.Value; import static java.lang.Math.max; import static java.lang.Math.min; @@ -416,7 +415,7 @@ public void constraintDrop( KernelStatement state, ConstraintDescriptor constrai } @Override - public Property nodeSetProperty( KernelStatement state, long nodeId, DefinedProperty property ) + public Value nodeSetProperty( KernelStatement state, long nodeId, int propertyKeyId, Value value ) throws ConstraintValidationException, EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { @@ -435,11 +434,11 @@ public Property nodeSetProperty( KernelStatement state, long nodeId, DefinedProp acquireExclusiveNodeLock( state, nodeId ); state.assertOpen(); - return entityWriteDelegate.nodeSetProperty( state, nodeId, property ); + return entityWriteDelegate.nodeSetProperty( state, nodeId, propertyKeyId, value ); } @Override - public Property nodeRemoveProperty( KernelStatement state, long nodeId, int propertyKeyId ) + public Value nodeRemoveProperty( KernelStatement state, long nodeId, int propertyKeyId ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { acquireExclusiveNodeLock( state, nodeId ); @@ -448,19 +447,17 @@ public Property nodeRemoveProperty( KernelStatement state, long nodeId, int prop } @Override - public Property relationshipSetProperty( KernelStatement state, - long relationshipId, - DefinedProperty property ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException + public Value relationshipSetProperty( KernelStatement state, long relationshipId, int propertyKeyId, Value value ) + throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { acquireExclusiveRelationshipLock( state, relationshipId ); state.assertOpen(); - return entityWriteDelegate.relationshipSetProperty( state, relationshipId, property ); + return entityWriteDelegate.relationshipSetProperty( state, relationshipId, propertyKeyId, value ); } @Override - public Property relationshipRemoveProperty( KernelStatement state, - long relationshipId, - int propertyKeyId ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException + public Value relationshipRemoveProperty( KernelStatement state, long relationshipId, int propertyKeyId ) + throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { acquireExclusiveRelationshipLock( state, relationshipId ); state.assertOpen(); @@ -468,15 +465,15 @@ public Property relationshipRemoveProperty( KernelStatement state, } @Override - public Property graphSetProperty( KernelStatement state, DefinedProperty property ) + public Value graphSetProperty( KernelStatement state, int propertyKeyId, Value value ) { state.locks().optimistic().acquireExclusive( state.lockTracer(), ResourceTypes.GRAPH_PROPS, ResourceTypes.graphPropertyResource() ); state.assertOpen(); - return entityWriteDelegate.graphSetProperty( state, property ); + return entityWriteDelegate.graphSetProperty( state, propertyKeyId, value ); } @Override - public Property graphRemoveProperty( KernelStatement state, int propertyKeyId ) + public Value graphRemoveProperty( KernelStatement state, int propertyKeyId ) { state.locks().optimistic().acquireExclusive( state.lockTracer(), ResourceTypes.GRAPH_PROPS, ResourceTypes.graphPropertyResource() ); state.assertOpen(); 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 5c99cce6ceb98..b3c97be709846 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 @@ -72,8 +72,6 @@ import org.neo4j.kernel.api.proc.ProcedureSignature; import org.neo4j.kernel.api.proc.QualifiedName; import org.neo4j.kernel.api.proc.UserFunctionSignature; -import org.neo4j.kernel.api.properties.DefinedProperty; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.query.ExecutingQuery; import org.neo4j.kernel.api.schema.IndexQuery; import org.neo4j.kernel.api.schema.LabelSchemaDescriptor; @@ -112,6 +110,7 @@ import org.neo4j.storageengine.api.lock.ResourceType; import org.neo4j.storageengine.api.schema.PopulationProgress; import org.neo4j.storageengine.api.schema.SchemaRule; +import org.neo4j.values.Value; import static java.lang.String.format; import static org.neo4j.collection.primitive.PrimitiveIntCollections.deduplicate; @@ -875,31 +874,31 @@ public boolean nodeRemoveLabel( long nodeId, int labelId ) throws EntityNotFound } @Override - public Property nodeSetProperty( long nodeId, DefinedProperty property ) + public Value nodeSetProperty( long nodeId, int propertyKeyId, Value value ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException, ConstraintValidationException { statement.assertOpen(); - return dataWrite().nodeSetProperty( statement, nodeId, property ); + return dataWrite().nodeSetProperty( statement, nodeId, propertyKeyId, value ); } @Override - public Property relationshipSetProperty( long relationshipId, DefinedProperty property ) + public Value relationshipSetProperty( long relationshipId, int propertyKeyId, Value value ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { statement.assertOpen(); - return dataWrite().relationshipSetProperty( statement, relationshipId, property ); + return dataWrite().relationshipSetProperty( statement, relationshipId, propertyKeyId, value ); } @Override - public Property graphSetProperty( DefinedProperty property ) + public Value graphSetProperty( int propertyKeyId, Value value ) { statement.assertOpen(); - return dataWrite().graphSetProperty( statement, property ); + return dataWrite().graphSetProperty( statement, propertyKeyId, value ); } @Override - public Property nodeRemoveProperty( long nodeId, int propertyKeyId ) + public Value nodeRemoveProperty( long nodeId, int propertyKeyId ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { statement.assertOpen(); @@ -907,7 +906,7 @@ public Property nodeRemoveProperty( long nodeId, int propertyKeyId ) } @Override - public Property relationshipRemoveProperty( long relationshipId, int propertyKeyId ) + public Value relationshipRemoveProperty( long relationshipId, int propertyKeyId ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException { statement.assertOpen(); @@ -915,7 +914,7 @@ public Property relationshipRemoveProperty( long relationshipId, int propertyKey } @Override - public Property graphRemoveProperty( int propertyKeyId ) + public Value graphRemoveProperty( int propertyKeyId ) { statement.assertOpen(); return dataWrite().graphRemoveProperty( statement, propertyKeyId ); 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 417713230e8c3..d9631a04f06f7 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 @@ -104,6 +104,10 @@ import org.neo4j.storageengine.api.schema.PopulationProgress; import org.neo4j.storageengine.api.txstate.NodeState; import org.neo4j.storageengine.api.txstate.ReadableDiffSets; +import org.neo4j.storageengine.api.txstate.ReadableTransactionState; +import org.neo4j.storageengine.api.txstate.RelationshipState; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static java.lang.String.format; import static org.neo4j.collection.primitive.PrimitiveIntCollections.filter; @@ -114,7 +118,6 @@ import static org.neo4j.helpers.collection.Iterators.iterator; import static org.neo4j.helpers.collection.Iterators.singleOrNull; import static org.neo4j.kernel.api.StatementConstants.NO_SUCH_NODE; -import static org.neo4j.kernel.api.properties.DefinedProperty.NO_SUCH_PROPERTY; import static org.neo4j.kernel.impl.api.state.IndexTxStateUpdater.LabelChangeType.ADDED_LABEL; import static org.neo4j.kernel.impl.api.state.IndexTxStateUpdater.LabelChangeType.REMOVED_LABEL; import static org.neo4j.kernel.impl.util.Cursors.count; @@ -1012,167 +1015,151 @@ private PrimitiveLongIterator filterIndexStateChangesForRangeSeekByPrefix( Kerne } @Override - public Property nodeSetProperty( KernelStatement state, long nodeId, DefinedProperty property ) + public Value nodeSetProperty( KernelStatement state, long nodeId, int propertyKeyId, Value value ) throws EntityNotFoundException, InvalidTransactionTypeKernelException, AutoIndexingKernelException { DataWriteOperations ops = state.dataWriteOperations(); try ( Cursor cursor = nodeCursorById( state, nodeId ) ) { NodeItem node = cursor.get(); - DefinedProperty existingProperty = NO_SUCH_PROPERTY; - try ( Cursor properties = nodeGetPropertyCursor( state, node, property.propertyKeyId() ) ) + Value existingValue = Values.NO_VALUE; + try ( Cursor properties = nodeGetPropertyCursor( state, node, propertyKeyId ) ) { if ( !properties.next() ) { - autoIndexing.nodes().propertyAdded( ops, nodeId, property ); + autoIndexing.nodes().propertyAdded( ops, nodeId, propertyKeyId, value ); } else { - existingProperty = Property.property( properties.get().propertyKeyId(), properties.get().value() ); - autoIndexing.nodes().propertyChanged( ops, nodeId, existingProperty, property ); + existingValue = Values.of( properties.get().value() ); + autoIndexing.nodes().propertyChanged( ops, nodeId, propertyKeyId, existingValue, value ); } } - if ( existingProperty == NO_SUCH_PROPERTY ) + if ( existingValue == Values.NO_VALUE ) { - state.txState().nodeDoAddProperty( node.id(), property ); - indexTxStateUpdater.onPropertyAdd( state, node, property ); - return Property.noProperty( property.propertyKeyId(), EntityType.NODE, node.id() ); + state.txState().nodeDoAddProperty( node.id(), propertyKeyId, value ); + indexTxStateUpdater.onPropertyAdd( state, node, propertyKeyId, value ); + return Values.NO_VALUE; } else { - if ( !property.equals( existingProperty ) ) + if ( !value.equals( existingValue ) ) { - state.txState().nodeDoChangeProperty( node.id(), existingProperty, property ); - indexTxStateUpdater.onPropertyChange( state, node, existingProperty, property ); + state.txState().nodeDoChangeProperty( node.id(), propertyKeyId, existingValue, value ); + indexTxStateUpdater.onPropertyChange( state, node, propertyKeyId, existingValue, value ); } - return existingProperty; + return existingValue; } } } @Override - public Property relationshipSetProperty( KernelStatement state, - long relationshipId, - DefinedProperty property ) + public Value relationshipSetProperty( KernelStatement state, long relationshipId, int propertyKeyId, Value value ) throws EntityNotFoundException, InvalidTransactionTypeKernelException, AutoIndexingKernelException { DataWriteOperations ops = state.dataWriteOperations(); try ( Cursor cursor = relationshipCursorById( state, relationshipId ) ) { RelationshipItem relationship = cursor.get(); - Property existingProperty; - try ( Cursor properties = relationshipGetPropertyCursor( state, relationship, - property.propertyKeyId() ) ) + Value existingValue = Values.NO_VALUE; + try ( Cursor properties = relationshipGetPropertyCursor( state, relationship, propertyKeyId ) ) { if ( !properties.next() ) { - autoIndexing.relationships().propertyAdded( ops, relationshipId, property ); - existingProperty = - Property.noProperty( property.propertyKeyId(), EntityType.RELATIONSHIP, relationship.id() ); + autoIndexing.relationships().propertyAdded( ops, relationshipId, propertyKeyId, value ); } else { - existingProperty = Property.property( properties.get().propertyKeyId(), properties.get().value() ); - autoIndexing.relationships().propertyChanged( ops, relationshipId, existingProperty, property ); + existingValue = Values.of( properties.get().value() ); + autoIndexing.relationships().propertyChanged( + ops, relationshipId, propertyKeyId, existingValue, value ); } } - if ( !property.equals( existingProperty ) ) + if ( !value.equals( existingValue ) ) { - state.txState().relationshipDoReplaceProperty( relationship.id(), existingProperty, property ); + state.txState().relationshipDoReplaceProperty( + relationship.id(), propertyKeyId, existingValue, value ); } - return existingProperty; + return existingValue; } } @Override - public Property graphSetProperty( KernelStatement state, DefinedProperty property ) + public Value graphSetProperty( KernelStatement state, int propertyKeyId, Value value ) { - Object existingPropertyValue = graphGetProperty( state, property.propertyKeyId() ); - Property existingProperty = existingPropertyValue == null ? - Property.noGraphProperty( property.propertyKeyId() ) : - Property.property( property.propertyKeyId(), existingPropertyValue ); + Object existingPropertyValue = graphGetProperty( state, propertyKeyId ); + Value existingValue = existingPropertyValue == null ? Values.NO_VALUE : Values.of( existingPropertyValue ); - if ( !property.equals( existingProperty ) ) + if ( !value.equals( existingValue ) ) { - state.txState().graphDoReplaceProperty( existingProperty, property ); + state.txState().graphDoReplaceProperty( propertyKeyId, existingValue, value ); } - return existingProperty; + return existingValue; } @Override - public Property nodeRemoveProperty( KernelStatement state, long nodeId, int propertyKeyId ) + public Value nodeRemoveProperty( KernelStatement state, long nodeId, int propertyKeyId ) throws EntityNotFoundException, InvalidTransactionTypeKernelException, AutoIndexingKernelException { DataWriteOperations ops = state.dataWriteOperations(); try ( Cursor cursor = nodeCursorById( state, nodeId ) ) { NodeItem node = cursor.get(); - DefinedProperty existingProperty = NO_SUCH_PROPERTY; + Value existingValue = Values.NO_VALUE; try ( Cursor properties = nodeGetPropertyCursor( state, node, propertyKeyId ) ) { if ( properties.next() ) { - existingProperty = Property.property( properties.get().propertyKeyId(), properties.get().value() ); + existingValue = Values.of( properties.get().value() ); autoIndexing.nodes().propertyRemoved( ops, nodeId, propertyKeyId ); - state.txState().nodeDoRemoveProperty( node.id(), existingProperty ); + state.txState().nodeDoRemoveProperty( node.id(), propertyKeyId, existingValue ); - indexTxStateUpdater.onPropertyRemove( state, node, existingProperty ); + indexTxStateUpdater.onPropertyRemove( state, node, propertyKeyId, existingValue ); } } - - if ( existingProperty == NO_SUCH_PROPERTY ) - { - return Property.noProperty( propertyKeyId, EntityType.NODE, node.id() ); - } - return existingProperty; + return existingValue; } } @Override - public Property relationshipRemoveProperty( KernelStatement state, - long relationshipId, - int propertyKeyId ) + public Value relationshipRemoveProperty( KernelStatement state, long relationshipId, int propertyKeyId ) throws EntityNotFoundException, InvalidTransactionTypeKernelException, AutoIndexingKernelException { DataWriteOperations ops = state.dataWriteOperations(); try ( Cursor cursor = relationshipCursorById( state, relationshipId ) ) { RelationshipItem relationship = cursor.get(); - Property existingProperty; + Value existingValue = Values.NO_VALUE; try ( Cursor properties = relationshipGetPropertyCursor( state, relationship, propertyKeyId ) ) { - if ( !properties.next() ) - { - existingProperty = Property.noProperty( propertyKeyId, EntityType.RELATIONSHIP, relationship.id() ); - } - else + if ( properties.next() ) { - existingProperty = Property.property( properties.get().propertyKeyId(), properties.get().value() ); + existingValue = Values.of( properties.get().value() ); autoIndexing.relationships().propertyRemoved( ops, relationshipId, propertyKeyId ); state.txState() - .relationshipDoRemoveProperty( relationship.id(), (DefinedProperty) existingProperty ); + .relationshipDoRemoveProperty( relationship.id(), propertyKeyId, existingValue ); } } - return existingProperty; + return existingValue; } } @Override - public Property graphRemoveProperty( KernelStatement state, int propertyKeyId ) + public Value graphRemoveProperty( KernelStatement state, int propertyKeyId ) { Object existingPropertyValue = graphGetProperty( state, propertyKeyId ); if ( existingPropertyValue != null ) { - DefinedProperty existingProperty = Property.property( propertyKeyId, existingPropertyValue ); - state.txState().graphDoRemoveProperty( existingProperty ); - return existingProperty; + Value existingValue = Values.of( existingPropertyValue ); + state.txState().graphDoRemoveProperty( propertyKeyId, existingValue ); + return existingValue; } - return Property.noGraphProperty( propertyKeyId ); + return Values.NO_VALUE; } @Override diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/legacyindex/InternalAutoIndexOperations.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/legacyindex/InternalAutoIndexOperations.java index a0cb594e27b9a..4094dbb2d44dc 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/legacyindex/InternalAutoIndexOperations.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/legacyindex/InternalAutoIndexOperations.java @@ -28,13 +28,12 @@ import org.neo4j.kernel.api.DataWriteOperations; import org.neo4j.kernel.api.exceptions.EntityNotFoundException; import org.neo4j.kernel.api.exceptions.PropertyKeyIdNotFoundKernelException; -import org.neo4j.kernel.api.exceptions.PropertyNotFoundException; import org.neo4j.kernel.api.exceptions.legacyindex.AutoIndexingKernelException; import org.neo4j.kernel.api.exceptions.legacyindex.LegacyIndexNotFoundKernelException; import org.neo4j.kernel.api.legacyindex.AutoIndexOperations; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.impl.core.PropertyKeyTokenHolder; import org.neo4j.kernel.impl.core.TokenNotFoundException; +import org.neo4j.values.Value; public class InternalAutoIndexOperations implements AutoIndexOperations { @@ -150,21 +149,21 @@ public InternalAutoIndexOperations( PropertyKeyTokenHolder propertyKeyLookup, En } @Override - public void propertyAdded( DataWriteOperations ops, long entityId, Property property ) throws + public void propertyAdded( DataWriteOperations ops, long entityId, int propertyKeyId, Value value ) throws AutoIndexingKernelException { if ( enabled ) { try { - String name = propertyKeyLookup.getTokenById( property.propertyKeyId() ).name(); + String name = propertyKeyLookup.getTokenById( propertyKeyId ).name(); if ( propertyKeysToInclude.get().contains( name ) ) { ensureIndexExists( ops ); - type.add( ops, entityId, name, property.value() ); + type.add( ops, entityId, name, value.asPublic() ); } } - catch ( LegacyIndexNotFoundKernelException | EntityNotFoundException | PropertyNotFoundException e ) + catch ( LegacyIndexNotFoundKernelException | EntityNotFoundException e ) { throw new AutoIndexingKernelException( e ); } @@ -172,29 +171,29 @@ public void propertyAdded( DataWriteOperations ops, long entityId, Property prop { // TODO: TokenNotFoundException was added before there was a kernel. It should be converted to a // KernelException now - throw new AutoIndexingKernelException( new PropertyKeyIdNotFoundKernelException( property - .propertyKeyId(), e ) ); + throw new AutoIndexingKernelException( new PropertyKeyIdNotFoundKernelException( propertyKeyId, e ) ); } } } @Override - public void propertyChanged( DataWriteOperations ops, long entityId, Property oldProperty, Property newProperty ) + public void propertyChanged( DataWriteOperations ops, long entityId, int propertyKeyId, Value oldValue, + Value newValue ) throws AutoIndexingKernelException { if ( enabled ) { try { - String name = propertyKeyLookup.getTokenById( oldProperty.propertyKeyId() ).name(); + String name = propertyKeyLookup.getTokenById( propertyKeyId ).name(); if ( propertyKeysToInclude.get().contains( name ) ) { ensureIndexExists( ops ); - type.remove( ops, entityId, name, oldProperty.value() ); - type.add( ops, entityId, name, newProperty.value() ); + type.remove( ops, entityId, name, oldValue.asPublic() ); + type.add( ops, entityId, name, newValue.asPublic() ); } } - catch ( LegacyIndexNotFoundKernelException | EntityNotFoundException | PropertyNotFoundException e ) + catch ( LegacyIndexNotFoundKernelException | EntityNotFoundException e ) { throw new AutoIndexingKernelException( e ); } @@ -202,8 +201,7 @@ public void propertyChanged( DataWriteOperations ops, long entityId, Property ol { // TODO: TokenNotFoundException was added before there was a kernel. It should be converted to a // KernelException now - throw new AutoIndexingKernelException( new PropertyKeyIdNotFoundKernelException( oldProperty - .propertyKeyId(), e ) ); + throw new AutoIndexingKernelException( new PropertyKeyIdNotFoundKernelException( propertyKeyId, e ) ); } } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/operations/EntityWriteOperations.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/operations/EntityWriteOperations.java index 0a2356ef82ea9..7860327299cc9 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/operations/EntityWriteOperations.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/operations/EntityWriteOperations.java @@ -24,9 +24,8 @@ import org.neo4j.kernel.api.exceptions.KernelException; import org.neo4j.kernel.api.exceptions.legacyindex.AutoIndexingKernelException; import org.neo4j.kernel.api.exceptions.schema.ConstraintValidationException; -import org.neo4j.kernel.api.properties.DefinedProperty; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.impl.api.KernelStatement; +import org.neo4j.values.Value; public interface EntityWriteOperations { @@ -66,24 +65,24 @@ boolean nodeAddLabel( KernelStatement state, long nodeId, int labelId ) */ boolean nodeRemoveLabel( KernelStatement state, long nodeId, int labelId ) throws EntityNotFoundException; - Property nodeSetProperty( KernelStatement state, long nodeId, DefinedProperty property ) + Value nodeSetProperty( KernelStatement state, long nodeId, int propertyKeyId, Value value ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException, ConstraintValidationException; - Property relationshipSetProperty( KernelStatement state, long relationshipId, DefinedProperty property ) + Value relationshipSetProperty( KernelStatement state, long relationshipId, int propertyKeyId, Value value ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException; - Property graphSetProperty( KernelStatement state, DefinedProperty property ); + Value graphSetProperty( KernelStatement state, int propertyKeyId, Value value ); /** * Remove a node's property given the node's id and the property key id and return the value to which * it was set or null if it was not set on the node */ - Property nodeRemoveProperty( KernelStatement state, long nodeId, int propertyKeyId ) + Value nodeRemoveProperty( KernelStatement state, long nodeId, int propertyKeyId ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException; - Property relationshipRemoveProperty( KernelStatement state, long relationshipId, int propertyKeyId ) + Value relationshipRemoveProperty( KernelStatement state, long relationshipId, int propertyKeyId ) throws EntityNotFoundException, AutoIndexingKernelException, InvalidTransactionTypeKernelException; - Property graphRemoveProperty( KernelStatement state, int propertyKeyId ); + Value graphRemoveProperty( KernelStatement state, int propertyKeyId ); } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/state/IndexTxStateUpdater.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/state/IndexTxStateUpdater.java index c0f41f44b7a5c..1bc25e9a927ae 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/state/IndexTxStateUpdater.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/state/IndexTxStateUpdater.java @@ -38,8 +38,10 @@ import org.neo4j.storageengine.api.NodeItem; import org.neo4j.storageengine.api.PropertyItem; import org.neo4j.storageengine.api.StoreReadLayer; +import org.neo4j.values.Value; +import org.neo4j.values.Values; -import static org.neo4j.kernel.api.properties.DefinedProperty.NO_SUCH_PROPERTY; +import static org.neo4j.kernel.api.StatementConstants.NO_SUCH_PROPERTY_KEY; public class IndexTxStateUpdater { @@ -103,48 +105,46 @@ private boolean noSchemaChangedInTx( KernelStatement state ) // PROPERTY CHANGES - public void onPropertyAdd( KernelStatement state, NodeItem node, DefinedProperty after ) + public void onPropertyAdd( KernelStatement state, NodeItem node, int propertyKeyId, Value value ) throws EntityNotFoundException { assert noSchemaChangedInTx( state ); Iterator indexes = - storeReadLayer.indexesGetRelatedToProperty( after.propertyKeyId() ); - nodeIndexMatcher.onMatchingSchema( state, indexes, node, after.propertyKeyId(), + storeReadLayer.indexesGetRelatedToProperty( propertyKeyId ); + nodeIndexMatcher.onMatchingSchema( state, indexes, node, propertyKeyId, ( index, propertyKeyIds ) -> { - Validators.INDEX_VALUE_VALIDATOR.validate( after.value() ); + Validators.INDEX_VALUE_VALIDATOR.validate( value ); OrderedPropertyValues values = - getOrderedPropertyValues( state, node, after, index.schema().getPropertyIds() ); + getOrderedPropertyValues( state, node, propertyKeyId, value, index.schema().getPropertyIds() ); state.txState().indexDoUpdateEntry( index.schema(), node.id(), null, values ); } ); } - public void onPropertyRemove( KernelStatement state, NodeItem node, DefinedProperty before ) + public void onPropertyRemove( KernelStatement state, NodeItem node, int propertyKeyId, Value value ) throws EntityNotFoundException { assert noSchemaChangedInTx( state ); Iterator indexes = - storeReadLayer.indexesGetRelatedToProperty( before.propertyKeyId() ); - nodeIndexMatcher.onMatchingSchema( state, indexes, node, before.propertyKeyId(), + storeReadLayer.indexesGetRelatedToProperty( propertyKeyId ); + nodeIndexMatcher.onMatchingSchema( state, indexes, node, propertyKeyId, ( index, propertyKeyIds ) -> { OrderedPropertyValues values = - getOrderedPropertyValues( state, node, before, index.schema().getPropertyIds() ); + getOrderedPropertyValues( state, node, propertyKeyId, value, index.schema().getPropertyIds() ); state.txState().indexDoUpdateEntry( index.schema(), node.id(), values, null ); }); } - public void onPropertyChange( KernelStatement state, NodeItem node, DefinedProperty before, DefinedProperty after ) + public void onPropertyChange( KernelStatement state, NodeItem node, int propertyKeyId, Value beforeValue, Value afterValue ) throws EntityNotFoundException { assert noSchemaChangedInTx( state ); - assert before.propertyKeyId() == after.propertyKeyId(); - Iterator indexes = - storeReadLayer.indexesGetRelatedToProperty( before.propertyKeyId() ); - nodeIndexMatcher.onMatchingSchema( state, indexes, node, before.propertyKeyId(), + Iterator indexes = storeReadLayer.indexesGetRelatedToProperty( propertyKeyId ); + nodeIndexMatcher.onMatchingSchema( state, indexes, node, propertyKeyId, ( index, propertyKeyIds ) -> { - Validators.INDEX_VALUE_VALIDATOR.validate( after.value() ); + Validators.INDEX_VALUE_VALIDATOR.validate( afterValue ); int[] indexPropertyIds = index.schema().getPropertyIds(); Object[] valuesBefore = new Object[indexPropertyIds.length]; @@ -152,10 +152,10 @@ public void onPropertyChange( KernelStatement state, NodeItem node, DefinedPrope for ( int i = 0; i < indexPropertyIds.length; i++ ) { int indexPropertyId = indexPropertyIds[i]; - if ( indexPropertyId == before.propertyKeyId() ) + if ( indexPropertyId == propertyKeyId ) { - valuesBefore[i] = before.value(); - valuesAfter[i] = after.value(); + valuesBefore[i] = beforeValue.asPublic(); + valuesAfter[i] = afterValue.asPublic(); } else { @@ -165,7 +165,8 @@ public void onPropertyChange( KernelStatement state, NodeItem node, DefinedPrope } } state.txState().indexDoUpdateEntry( index.schema(), node.id(), - OrderedPropertyValues.ofUndefined( valuesBefore ), OrderedPropertyValues.ofUndefined( valuesAfter ) ); + OrderedPropertyValues.ofUndefined( valuesBefore ), OrderedPropertyValues.ofUndefined( + valuesAfter ) ); }); } @@ -174,11 +175,11 @@ public void onPropertyChange( KernelStatement state, NodeItem node, DefinedPrope private OrderedPropertyValues getOrderedPropertyValues( KernelStatement state, NodeItem node, int[] indexPropertyIds ) { - return getOrderedPropertyValues( state, node, NO_SUCH_PROPERTY, indexPropertyIds ); + return getOrderedPropertyValues( state, node, NO_SUCH_PROPERTY_KEY, Values.NO_VALUE, indexPropertyIds ); } private OrderedPropertyValues getOrderedPropertyValues( KernelStatement state, NodeItem node, - DefinedProperty changedProperty, int[] indexPropertyIds ) + int changedPropertyKeyId, Value changedValue, int[] indexPropertyIds ) { DefinedProperty[] values = new DefinedProperty[indexPropertyIds.length]; Cursor propertyCursor = readOps.nodeGetProperties( state, node ); @@ -188,18 +189,18 @@ private OrderedPropertyValues getOrderedPropertyValues( KernelStatement state, N int k = ArrayUtils.indexOf( indexPropertyIds, property.propertyKeyId() ); if ( k >= 0 ) { - values[k] = indexPropertyIds[k] == changedProperty.propertyKeyId() - ? changedProperty - : Property.property( indexPropertyIds[k], property.value() ); + values[k] = indexPropertyIds[k] == changedPropertyKeyId + ? Property.property( property.propertyKeyId(), changedValue.asPublic() ) + : Property.property( property.propertyKeyId(), property.value() ); } } - if ( changedProperty != NO_SUCH_PROPERTY ) + if ( changedPropertyKeyId != NO_SUCH_PROPERTY_KEY ) { - int k = ArrayUtils.indexOf( indexPropertyIds, changedProperty.propertyKeyId() ); + int k = ArrayUtils.indexOf( indexPropertyIds, changedPropertyKeyId ); if ( k >= 0 ) { - values[k] = changedProperty; + values[k] = Property.property( changedPropertyKeyId, changedValue.asPublic() ); } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/state/PropertyContainerStateImpl.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/state/PropertyContainerStateImpl.java index 5655d8a1da530..fdaa9b43e4ee0 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/state/PropertyContainerStateImpl.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/state/PropertyContainerStateImpl.java @@ -19,17 +19,18 @@ */ package org.neo4j.kernel.impl.api.state; +import java.util.Collections; import java.util.Iterator; import java.util.function.Predicate; -import org.neo4j.helpers.collection.CombiningIterator; -import org.neo4j.helpers.collection.FilteringIterator; import org.neo4j.helpers.collection.Iterators; import org.neo4j.kernel.api.exceptions.schema.ConstraintValidationException; import org.neo4j.kernel.api.properties.DefinedProperty; +import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.impl.util.VersionedHashMap; import org.neo4j.storageengine.api.StorageProperty; import org.neo4j.storageengine.api.txstate.PropertyContainerState; +import org.neo4j.values.Value; import static java.util.Collections.emptyIterator; @@ -37,9 +38,9 @@ public class PropertyContainerStateImpl implements PropertyContainerState { private final long id; - private VersionedHashMap addedProperties; - private VersionedHashMap changedProperties; - private VersionedHashMap removedProperties; + private VersionedHashMap addedProperties; + private VersionedHashMap changedProperties; + private VersionedHashMap removedProperties; private final Predicate excludePropertiesWeKnowAbout = new Predicate() { @@ -78,13 +79,13 @@ public void clear() } } - public void changeProperty( DefinedProperty property ) + public void changeProperty( int propertyKeyId, Value value ) { if ( addedProperties != null ) { - if ( addedProperties.containsKey( property.propertyKeyId() ) ) + if ( addedProperties.containsKey( propertyKeyId ) ) { - addedProperties.put( property.propertyKeyId(), property ); + addedProperties.put( propertyKeyId, value ); return; } } @@ -93,23 +94,24 @@ public void changeProperty( DefinedProperty property ) { changedProperties = new VersionedHashMap<>(); } - changedProperties.put( property.propertyKeyId(), property ); + changedProperties.put( propertyKeyId, value ); + if ( removedProperties != null ) { - removedProperties.remove( property.propertyKeyId() ); + removedProperties.remove( propertyKeyId ); } } - public void addProperty( DefinedProperty property ) + public void addProperty( int propertyKeyId, Value value ) { if ( removedProperties != null ) { - StorageProperty removed = removedProperties.remove( property.propertyKeyId() ); + Value removed = removedProperties.remove( propertyKeyId ); if ( removed != null ) { // This indicates the user did remove+add as two discrete steps, which should be translated to // a single change operation. - changeProperty( property ); + changeProperty( propertyKeyId, value ); return; } } @@ -117,14 +119,14 @@ public void addProperty( DefinedProperty property ) { addedProperties = new VersionedHashMap<>(); } - addedProperties.put( property.propertyKeyId(), property ); + addedProperties.put( propertyKeyId, value ); } - public void removeProperty( DefinedProperty property ) + public void removeProperty( int propertyKeyId, Value value ) { if ( addedProperties != null ) { - if ( addedProperties.remove( property.propertyKeyId() ) != null ) + if ( addedProperties.remove( propertyKeyId ) != null ) { return; } @@ -133,53 +135,43 @@ public void removeProperty( DefinedProperty property ) { removedProperties = new VersionedHashMap<>(); } - removedProperties.put( property.propertyKeyId(), property ); + removedProperties.put( propertyKeyId, value ); if ( changedProperties != null ) { - changedProperties.remove( property.propertyKeyId() ); + changedProperties.remove( propertyKeyId ); } } @Override public Iterator addedProperties() { - return addedProperties != null ? addedProperties.values().iterator() : emptyIterator(); + return toPropertyIterator( addedProperties ); } @Override public Iterator changedProperties() { - return changedProperties != null ? changedProperties.values().iterator() : emptyIterator(); + return toPropertyIterator( changedProperties ); } @Override public Iterator removedProperties() { - return removedProperties != null ? removedProperties.keySet().iterator() - : emptyIterator(); + return removedProperties != null ? removedProperties.keySet().iterator() : emptyIterator(); } @Override public Iterator addedAndChangedProperties() { - Iterator out = null; - if ( addedProperties != null ) + if ( addedProperties == null ) { - out = addedProperties.values().iterator(); + return toPropertyIterator( changedProperties ); } - if ( changedProperties != null ) + if ( changedProperties == null ) { - if ( out != null ) - { - out = new CombiningIterator<>( - Iterators.iterator( out, changedProperties.values().iterator() ) ); - } - else - { - out = changedProperties.values().iterator(); - } + return toPropertyIterator( addedProperties ); } - return out != null ? out : emptyIterator(); + return Iterators.concat( toPropertyIterator( addedProperties ), toPropertyIterator( changedProperties ) ); } @Override @@ -187,17 +179,15 @@ public Iterator augmentProperties( Iterator it { if ( removedProperties != null || addedProperties != null || changedProperties != null ) { - iterator = new FilteringIterator<>( iterator, excludePropertiesWeKnowAbout ); + iterator = Iterators.filter( excludePropertiesWeKnowAbout, iterator ); if ( addedProperties != null && !addedProperties.isEmpty() ) { - iterator = new CombiningIterator<>( - Iterators.iterator( iterator, addedProperties.values().iterator() ) ); + iterator = Iterators.concat( iterator, toPropertyIterator( addedProperties ) ); } if ( changedProperties != null && !changedProperties.isEmpty() ) { - iterator = new CombiningIterator<>( - Iterators.iterator( iterator, changedProperties.values().iterator() ) ); + iterator = Iterators.concat( iterator, toPropertyIterator( changedProperties ) ); } } @@ -222,13 +212,13 @@ public boolean hasChanges() @Override public StorageProperty getChangedProperty( int propertyKeyId ) { - return changedProperties != null ? changedProperties.get( propertyKeyId ) : null; + return changedProperties == null ? null : getPropertyOrNull( changedProperties, propertyKeyId ); } @Override public StorageProperty getAddedProperty( int propertyKeyId ) { - return addedProperties != null ? addedProperties.get( propertyKeyId ) : null; + return addedProperties == null ? null : getPropertyOrNull( addedProperties, propertyKeyId ); } @Override @@ -236,4 +226,19 @@ public boolean isPropertyRemoved( int propertyKeyId ) { return removedProperties != null && removedProperties.containsKey( propertyKeyId ); } + + private Iterator toPropertyIterator( VersionedHashMap propertyMap ) + { + return propertyMap == null ? Collections.emptyIterator() : + Iterators.map( + entry -> Property.property( entry.getKey(), entry.getValue().asPublic() ), + propertyMap.entrySet().iterator() + ); + } + + private DefinedProperty getPropertyOrNull( VersionedHashMap propertyMap, int propertyKeyId ) + { + Value value = propertyMap.get( propertyKeyId ); + return value == null ? null : Property.property( propertyKeyId, value.asPublic() ); + } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/state/TxState.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/state/TxState.java index 667f764f4adcb..98770ef106ff2 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/state/TxState.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/state/TxState.java @@ -35,8 +35,6 @@ import org.neo4j.helpers.collection.Iterables; import org.neo4j.kernel.api.exceptions.schema.ConstraintValidationException; import org.neo4j.kernel.api.exceptions.schema.CreateConstraintFailureException; -import org.neo4j.kernel.api.properties.DefinedProperty; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.schema.LabelSchemaDescriptor; import org.neo4j.kernel.api.schema.OrderedPropertyValues; import org.neo4j.kernel.api.schema.SchemaDescriptor; @@ -69,6 +67,8 @@ import org.neo4j.storageengine.api.txstate.ReadableTransactionState; import org.neo4j.storageengine.api.txstate.RelationshipState; import org.neo4j.storageengine.api.txstate.TxStateVisitor; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static org.neo4j.collection.primitive.PrimitiveLongCollections.toPrimitiveIterator; import static org.neo4j.helpers.collection.Iterables.map; @@ -586,73 +586,70 @@ public boolean relationshipIsDeletedInThisTx( long relationshipId ) } @Override - public void nodeDoAddProperty( long nodeId, DefinedProperty newProperty ) + public void nodeDoAddProperty( long nodeId, int newPropertyKeyId, Value value ) { NodeStateImpl nodeState = getOrCreateNodeState( nodeId ); - nodeState.addProperty( newProperty ); - nodePropertyChanges().addProperty( nodeId, newProperty.propertyKeyId(), newProperty.value() ); + nodeState.addProperty( newPropertyKeyId, value ); + nodePropertyChanges().addProperty( nodeId, newPropertyKeyId, value ); dataChanged(); } @Override - public void nodeDoChangeProperty( long nodeId, DefinedProperty replacedProperty, DefinedProperty newProperty ) + public void nodeDoChangeProperty( long nodeId, int propertyKeyId, Value replacedValue, Value newValue ) { - getOrCreateNodeState( nodeId ).changeProperty( newProperty ); - nodePropertyChanges().changeProperty( nodeId, replacedProperty.propertyKeyId(), - replacedProperty.value(), newProperty.value() ); + getOrCreateNodeState( nodeId ).changeProperty( propertyKeyId, newValue ); + nodePropertyChanges().changeProperty( nodeId, propertyKeyId, replacedValue, newValue ); dataChanged(); } @Override - public void relationshipDoReplaceProperty( long relationshipId, - Property replacedProperty, - DefinedProperty newProperty ) + public void relationshipDoReplaceProperty( long relationshipId, int propertyKeyId, Value replacedValue, + Value newValue ) { - if ( replacedProperty.isDefined() ) + if ( replacedValue != Values.NO_VALUE ) { - getOrCreateRelationshipState( relationshipId ).changeProperty( newProperty ); + getOrCreateRelationshipState( relationshipId ).changeProperty( propertyKeyId, newValue ); } else { - getOrCreateRelationshipState( relationshipId ).addProperty( newProperty ); + getOrCreateRelationshipState( relationshipId ).addProperty( propertyKeyId, newValue ); } dataChanged(); } @Override - public void graphDoReplaceProperty( Property replacedProperty, DefinedProperty newProperty ) + public void graphDoReplaceProperty( int propertyKeyId, Value replacedValue, Value newValue ) { - if ( replacedProperty.isDefined() ) + if ( replacedValue != Values.NO_VALUE ) { - getOrCreateGraphState().changeProperty( newProperty ); + getOrCreateGraphState().changeProperty( propertyKeyId, newValue ); } else { - getOrCreateGraphState().addProperty( newProperty ); + getOrCreateGraphState().addProperty( propertyKeyId, newValue ); } dataChanged(); } @Override - public void nodeDoRemoveProperty( long nodeId, DefinedProperty removedProperty ) + public void nodeDoRemoveProperty( long nodeId, int propertyKeyId, Value removedValue ) { - getOrCreateNodeState( nodeId ).removeProperty( removedProperty ); - nodePropertyChanges().removeProperty( nodeId, removedProperty.propertyKeyId(), - removedProperty.value() ); + getOrCreateNodeState( nodeId ).removeProperty( propertyKeyId, removedValue ); + nodePropertyChanges().removeProperty( nodeId, propertyKeyId, removedValue ); dataChanged(); } @Override - public void relationshipDoRemoveProperty( long relationshipId, DefinedProperty removedProperty ) + public void relationshipDoRemoveProperty( long relationshipId, int propertyKeyId, Value removedValue ) { - getOrCreateRelationshipState( relationshipId ).removeProperty( removedProperty ); + getOrCreateRelationshipState( relationshipId ).removeProperty( propertyKeyId, removedValue ); dataChanged(); } @Override - public void graphDoRemoveProperty( DefinedProperty removedProperty ) + public void graphDoRemoveProperty( int propertyKeyId, Value removedValue ) { - getOrCreateGraphState().removeProperty( removedProperty ); + getOrCreateGraphState().removeProperty( propertyKeyId, removedValue ); dataChanged(); } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/core/GraphPropertiesProxy.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/core/GraphPropertiesProxy.java index 4381424956c3e..b0b25393a92b4 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/core/GraphPropertiesProxy.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/core/GraphPropertiesProxy.java @@ -35,9 +35,9 @@ import org.neo4j.kernel.api.exceptions.PropertyKeyIdNotFoundKernelException; import org.neo4j.kernel.api.exceptions.PropertyNotFoundException; import org.neo4j.kernel.api.exceptions.schema.IllegalTokenNameException; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.impl.api.operations.KeyReadOperations; import org.neo4j.storageengine.api.EntityType; +import org.neo4j.values.Values; import static java.lang.String.format; @@ -139,7 +139,7 @@ public void setProperty( String key, Object value ) int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( key ); try { - statement.dataWriteOperations().graphSetProperty( Property.property( propertyKeyId, value ) ); + statement.dataWriteOperations().graphSetProperty( propertyKeyId, Values.of( value ) ); } catch ( IllegalArgumentException e ) { @@ -164,7 +164,7 @@ public Object removeProperty( String key ) try ( Statement statement = actions.statement() ) { int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( key ); - return statement.dataWriteOperations().graphRemoveProperty( propertyKeyId ).value( null ); + return statement.dataWriteOperations().graphRemoveProperty( propertyKeyId ).asPublic(); } catch ( IllegalTokenNameException e ) { 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 6377949b6bcb7..81170d16ebbea 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 @@ -52,11 +52,11 @@ import org.neo4j.kernel.api.exceptions.schema.ConstraintValidationException; import org.neo4j.kernel.api.exceptions.schema.IllegalTokenNameException; import org.neo4j.kernel.api.exceptions.schema.TooManyLabelsException; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.impl.api.operations.KeyReadOperations; import org.neo4j.storageengine.api.EntityType; import org.neo4j.storageengine.api.NodeItem; import org.neo4j.storageengine.api.PropertyItem; +import org.neo4j.values.Values; import static java.lang.String.format; import static org.neo4j.collection.primitive.PrimitiveIntCollections.map; @@ -274,7 +274,7 @@ public void setProperty( String key, Object value ) int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( key ); try { - statement.dataWriteOperations().nodeSetProperty( nodeId, Property.property( propertyKeyId, value ) ); + statement.dataWriteOperations().nodeSetProperty( nodeId, propertyKeyId, Values.of( value ) ); } catch ( ConstraintValidationException e ) { @@ -313,7 +313,7 @@ public Object removeProperty( String key ) throws NotFoundException try ( Statement statement = actions.statement() ) { int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( key ); - return statement.dataWriteOperations().nodeRemoveProperty( nodeId, propertyKeyId ).value( null ); + return statement.dataWriteOperations().nodeRemoveProperty( nodeId, propertyKeyId ).asPublic(); } catch ( EntityNotFoundException e ) { diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/core/RelationshipProxy.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/core/RelationshipProxy.java index 43fd8cd751a7f..a63e8b43e4e3d 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/core/RelationshipProxy.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/core/RelationshipProxy.java @@ -43,13 +43,13 @@ import org.neo4j.kernel.api.exceptions.PropertyNotFoundException; import org.neo4j.kernel.api.exceptions.legacyindex.AutoIndexingKernelException; import org.neo4j.kernel.api.exceptions.schema.IllegalTokenNameException; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.impl.api.RelationshipVisitor; import org.neo4j.kernel.impl.api.operations.KeyReadOperations; import org.neo4j.kernel.impl.store.record.AbstractBaseRecord; import org.neo4j.storageengine.api.EntityType; import org.neo4j.storageengine.api.PropertyItem; import org.neo4j.storageengine.api.RelationshipItem; +import org.neo4j.values.Values; import static java.lang.String.format; @@ -399,7 +399,7 @@ public void setProperty( String key, Object value ) try ( Statement statement = actions.statement() ) { int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( key ); - statement.dataWriteOperations().relationshipSetProperty( getId(), Property.property( propertyKeyId, value ) ); + statement.dataWriteOperations().relationshipSetProperty( getId(), propertyKeyId, Values.of( value ) ); } catch ( IllegalArgumentException e ) { @@ -433,7 +433,7 @@ public Object removeProperty( String key ) try ( Statement statement = actions.statement() ) { int propertyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( key ); - return statement.dataWriteOperations().relationshipRemoveProperty( getId(), propertyId ).value( null ); + return statement.dataWriteOperations().relationshipRemoveProperty( getId(), propertyId ).asPublic(); } catch ( EntityNotFoundException e ) { diff --git a/community/kernel/src/test/java/org/neo4j/helpers/ListenersTest.java b/community/kernel/src/test/java/org/neo4j/helpers/ListenersTest.java index 7cf5f06bee5f0..e26b19f43d861 100644 --- a/community/kernel/src/test/java/org/neo4j/helpers/ListenersTest.java +++ b/community/kernel/src/test/java/org/neo4j/helpers/ListenersTest.java @@ -38,7 +38,7 @@ public class ListenersTest { - @Test( expected = NullPointerException.class ) + @Test( expected = IllegalArgumentException.class ) public void copyConstructorWithNull() { new Listeners<>( null ); @@ -54,7 +54,7 @@ public void copyConstructor() assertEquals( Iterables.asList( original ), Iterables.asList( copy ) ); } - @Test( expected = NullPointerException.class ) + @Test( expected = IllegalArgumentException.class ) public void addNull() { new Listeners<>().add( null ); @@ -70,7 +70,7 @@ public void add() assertArrayEquals( listenersArray, Iterables.asArray( Listener.class, listeners ) ); } - @Test( expected = NullPointerException.class ) + @Test( expected = IllegalArgumentException.class ) public void removeNull() { new Listeners<>().remove( null ); @@ -94,7 +94,7 @@ public void remove() assertEquals( singletonList( listener2 ), Iterables.asList( listeners ) ); } - @Test( expected = NullPointerException.class ) + @Test( expected = IllegalArgumentException.class ) public void notifyWithNullNotification() { new Listeners<>().notify( null ); @@ -118,19 +118,19 @@ public void notifyWithNotification() assertEquals( currentThread().getName(), listener2.threadName ); } - @Test( expected = NullPointerException.class ) + @Test( expected = IllegalArgumentException.class ) public void notifyWithNullExecutorAndNullNotification() { new Listeners<>().notify( null, null ); } - @Test( expected = NullPointerException.class ) + @Test( expected = IllegalArgumentException.class ) public void notifyWithNullExecutorAndNotification() { new Listeners().notify( null, listener -> listener.process( "foo" ) ); } - @Test( expected = NullPointerException.class ) + @Test( expected = IllegalArgumentException.class ) public void notifyWithExecutorAndNullNotification() { new Listeners().notify( newSingleThreadExecutor(), null ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/api/CompositeIndexingIT.java b/community/kernel/src/test/java/org/neo4j/kernel/api/CompositeIndexingIT.java index 3e263e1f26376..2a98c9820afae 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/api/CompositeIndexingIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/api/CompositeIndexingIT.java @@ -45,7 +45,6 @@ import org.neo4j.kernel.api.exceptions.legacyindex.AutoIndexingKernelException; import org.neo4j.kernel.api.exceptions.schema.ConstraintValidationException; import org.neo4j.kernel.api.index.InternalIndexState; -import org.neo4j.kernel.api.properties.DefinedProperty; import org.neo4j.kernel.api.schema.IndexQuery; import org.neo4j.kernel.api.schema.constaints.ConstraintDescriptorFactory; import org.neo4j.kernel.api.schema.index.IndexDescriptor; @@ -53,6 +52,7 @@ import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge; import org.neo4j.kernel.internal.GraphDatabaseAPI; import org.neo4j.test.rule.ImpermanentDatabaseRule; +import org.neo4j.values.Values; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; @@ -158,7 +158,7 @@ public void shouldSeeNodeAddedByPropertyToIndexInTranslation() throws Exception writeOperations.nodeAddLabel( nodeID, LABEL_ID ); for ( int propID : index.schema().getPropertyIds() ) { - writeOperations.nodeSetProperty( nodeID, DefinedProperty.intProperty( propID, propID ) ); + writeOperations.nodeSetProperty( nodeID, propID, Values.intValue( propID ) ); } PrimitiveLongIterator resultIterator = seek(); assertThat( resultIterator.next(), equalTo( nodeID ) ); @@ -175,7 +175,7 @@ public void shouldSeeNodeAddedToByLabelIndexInTransaction() throws Exception long nodeID = writeOperations.nodeCreate(); for ( int propID : index.schema().getPropertyIds() ) { - writeOperations.nodeSetProperty( nodeID, DefinedProperty.intProperty( propID, propID ) ); + writeOperations.nodeSetProperty( nodeID, propID, Values.intValue( propID ) ); } writeOperations.nodeAddLabel( nodeID, LABEL_ID ); PrimitiveLongIterator resultIterator = seek(); @@ -263,7 +263,7 @@ public void shouldNotSeeNodesLackingOneProperty() throws Exception for ( int i = 0; i < index.schema().getPropertyIds().length - 1; i++ ) { int propID = index.schema().getPropertyIds()[i]; - writeOperations.nodeSetProperty( irrelevantNodeID, DefinedProperty.intProperty( propID, propID ) ); + writeOperations.nodeSetProperty( irrelevantNodeID, propID, Values.intValue( propID ) ); } PrimitiveLongIterator resultIterator = seek(); Set result = PrimitiveLongCollections.toSet( resultIterator ); @@ -283,7 +283,7 @@ private long createNode() writeOperations.nodeAddLabel( nodeID, LABEL_ID ); for ( int propID : index.schema().getPropertyIds() ) { - writeOperations.nodeSetProperty( nodeID, DefinedProperty.intProperty( propID, propID ) ); + writeOperations.nodeSetProperty( nodeID, propID, Values.intValue( propID ) ); } tx.success(); } @@ -301,7 +301,7 @@ private IndexQuery[] exactQuery() for ( int i = 0; i < query.length; i++ ) { int propID = index.schema().getPropertyIds()[i]; - query[i] = IndexQuery.exact( propID, propID ); + query[i] = IndexQuery.exact( propID, Values.of( propID ) ); } return query; } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/api/index/CompositeIndexAccessorCompatibility.java b/community/kernel/src/test/java/org/neo4j/kernel/api/index/CompositeIndexAccessorCompatibility.java index f98097fd70fcb..adff48bbbd792 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/api/index/CompositeIndexAccessorCompatibility.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/api/index/CompositeIndexAccessorCompatibility.java @@ -29,10 +29,9 @@ import static java.util.Collections.singletonList; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; -import static org.neo4j.kernel.api.schema.IndexQuery.exact; +import static org.neo4j.kernel.api.index.IndexQueryHelper.exact; import static org.neo4j.kernel.api.schema.IndexQuery.exists; - @Ignore( "Not a test. This is a compatibility suite that provides test cases for verifying" + " SchemaIndexProvider implementations. Each index provider that is to be tested by this suite" + " must create their own test class extending IndexProviderCompatibilityTestSuite." + diff --git a/community/kernel/src/test/java/org/neo4j/kernel/api/index/CompositeIndexPopulatorCompatibility.java b/community/kernel/src/test/java/org/neo4j/kernel/api/index/CompositeIndexPopulatorCompatibility.java index 8216af1a93557..1082cb671acb2 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/api/index/CompositeIndexPopulatorCompatibility.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/api/index/CompositeIndexPopulatorCompatibility.java @@ -34,6 +34,7 @@ import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingConfig; import org.neo4j.storageengine.api.schema.IndexReader; +import org.neo4j.values.Values; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; diff --git a/community/kernel/src/test/java/org/neo4j/kernel/api/index/IndexQueryHelper.java b/community/kernel/src/test/java/org/neo4j/kernel/api/index/IndexQueryHelper.java new file mode 100644 index 0000000000000..4666c5209853c --- /dev/null +++ b/community/kernel/src/test/java/org/neo4j/kernel/api/index/IndexQueryHelper.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2002-2017 "Neo Technology," + * Network Engine for Objects in Lund AB [http://neotechnology.com] + * + * This file is part of Neo4j. + * + * Neo4j is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.neo4j.kernel.api.index; + +import org.neo4j.kernel.api.schema.IndexQuery; +import org.neo4j.values.Values; + +public class IndexQueryHelper +{ + private IndexQueryHelper() + { + } + + public static IndexQuery exact( int propertyKeyId, Object value ) + { + return IndexQuery.exact( propertyKeyId, Values.of( value ) ); + } +} diff --git a/community/kernel/src/test/java/org/neo4j/kernel/api/index/SimpleIndexAccessorCompatibility.java b/community/kernel/src/test/java/org/neo4j/kernel/api/index/SimpleIndexAccessorCompatibility.java index b64a1a0f099c0..23a73a9a574f6 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/api/index/SimpleIndexAccessorCompatibility.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/api/index/SimpleIndexAccessorCompatibility.java @@ -40,7 +40,6 @@ import static org.neo4j.kernel.api.schema.IndexQuery.stringPrefix; import static org.neo4j.kernel.api.schema.IndexQuery.stringSuffix; - @Ignore( "Not a test. This is a compatibility suite that provides test cases for verifying" + " SchemaIndexProvider implementations. Each index provider that is to be tested by this suite" + " must create their own test class extending IndexProviderCompatibilityTestSuite." + diff --git a/community/kernel/src/test/java/org/neo4j/kernel/builtinprocs/SchemaProcedureIT.java b/community/kernel/src/test/java/org/neo4j/kernel/builtinprocs/SchemaProcedureIT.java index 6f121618e23b1..184f138109c2b 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/builtinprocs/SchemaProcedureIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/builtinprocs/SchemaProcedureIT.java @@ -34,10 +34,10 @@ import org.neo4j.kernel.api.SchemaWriteOperations; import org.neo4j.kernel.api.Statement; import org.neo4j.kernel.api.exceptions.ProcedureException; -import org.neo4j.kernel.api.properties.DefinedProperty; import org.neo4j.kernel.api.schema.SchemaDescriptorFactory; import org.neo4j.kernel.api.security.AnonymousContext; import org.neo4j.kernel.impl.api.integrationtest.KernelIntegrationTest; +import org.neo4j.values.Values; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; @@ -77,7 +77,7 @@ public void testLabelIndex() throws Throwable int propertyIdName = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "name" ); int propertyIdAge = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "age" ); statement.dataWriteOperations() - .nodeSetProperty( nodeId, DefinedProperty.stringProperty( propertyIdName, "Emil" ) ); + .nodeSetProperty( nodeId, propertyIdName, Values.of( "Emil" ) ); commit(); SchemaWriteOperations schemaOps = schemaWriteOperationsInNewTransaction(); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/AutoIndexOperationsTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/AutoIndexOperationsTest.java index a1f5507fdb650..bc26bc8407c46 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/AutoIndexOperationsTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/AutoIndexOperationsTest.java @@ -24,18 +24,17 @@ import org.neo4j.kernel.api.DataWriteOperations; import org.neo4j.kernel.api.legacyindex.AutoIndexOperations; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.impl.api.legacyindex.InternalAutoIndexOperations; import org.neo4j.kernel.impl.core.PropertyKeyTokenHolder; import org.neo4j.kernel.impl.core.TokenNotFoundException; import org.neo4j.storageengine.api.Token; +import org.neo4j.values.Values; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; -import static org.neo4j.kernel.api.properties.Property.property; import static org.neo4j.kernel.impl.api.legacyindex.InternalAutoIndexing.NODE_AUTO_INDEX; public class AutoIndexOperationsTest @@ -82,8 +81,8 @@ public void shouldRemoveSpecificValueFromIndexForAutoIndexedProperty() throws Ex int value2 = 2; index.startAutoIndexingProperty( indexedPropertyName ); index.startAutoIndexingProperty( indexedPropertyName2 ); - index.propertyAdded( ops, nodeId, Property.intProperty( indexedProperty, value1 ) ); - index.propertyAdded( ops, nodeId, Property.intProperty( indexedProperty2, value2 ) ); + index.propertyAdded( ops, nodeId, indexedProperty, Values.of( value1 ) ); + index.propertyAdded( ops, nodeId, indexedProperty2, Values.of( value2 ) ); // When reset( ops ); @@ -100,7 +99,7 @@ public void shouldNotAddToIndexForNonAutoIndexedProperty() throws Exception index.startAutoIndexingProperty( indexedPropertyName ); // When - index.propertyAdded( ops, 11, property( nonIndexedProperty, "Hello!" ) ); + index.propertyAdded( ops, 11, nonIndexedProperty, Values.of( "Hello!" ) ); // Then verifyZeroInteractions( ops ); @@ -113,7 +112,7 @@ public void shouldNotAddOrRemoveFromIndexForNonAutoIndexedProperty() throws Exce index.startAutoIndexingProperty( indexedPropertyName ); // When - index.propertyChanged( ops, 11, property( nonIndexedProperty, "Goodbye!" ), property( nonIndexedProperty, "Hello!" ) ); + index.propertyChanged( ops, 11, nonIndexedProperty, Values.of( "Goodbye!" ), Values.of( "Hello!" ) ); // Then verifyZeroInteractions( ops ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/LockingStatementOperationsTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/LockingStatementOperationsTest.java index 0c14fc0bb580f..9385712ebff27 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/LockingStatementOperationsTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/LockingStatementOperationsTest.java @@ -57,6 +57,8 @@ import org.neo4j.kernel.impl.locking.SimpleStatementLocks; import org.neo4j.kernel.impl.proc.Procedures; import org.neo4j.storageengine.api.StorageStatement; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static java.util.Collections.emptyIterator; import static org.hamcrest.MatcherAssert.assertThat; @@ -146,14 +148,15 @@ public void shouldAcquireSchemaReadLockBeforeAddingLabelToNode() throws Exceptio public void shouldAcquireEntityWriteLockBeforeSettingPropertyOnNode() throws Exception { // given - DefinedProperty property = Property.property( 8, 9 ); + int propertyKeyId = 8; + Value value = Values.of( 9 ); // when - lockingOps.nodeSetProperty( state, 123, property ); + lockingOps.nodeSetProperty( state, 123, propertyKeyId, value ); // then order.verify( locks ).acquireExclusive( LockTracer.NONE, ResourceTypes.NODE, 123 ); - order.verify( entityWriteOps ).nodeSetProperty( state, 123, property ); + order.verify( entityWriteOps ).nodeSetProperty( state, 123, propertyKeyId, value ); } @Test @@ -161,28 +164,30 @@ public void shouldNotAcquireEntityWriteLockBeforeSettingPropertyOnJustCreatedNod { // given txState.nodeDoCreate( 123 ); - DefinedProperty property = Property.property( 8, 9 ); + int propertyKeyId = 8; + Value value = Values.of( 9 ); // when - lockingOps.nodeSetProperty( state, 123, property ); + lockingOps.nodeSetProperty( state, 123, propertyKeyId, value ); // then order.verify( locks, never() ).acquireExclusive( LockTracer.NONE, ResourceTypes.NODE, 123 ); - order.verify( entityWriteOps ).nodeSetProperty( state, 123, property ); + order.verify( entityWriteOps ).nodeSetProperty( state, 123, propertyKeyId, value ); } @Test public void shouldAcquireSchemaReadLockBeforeSettingPropertyOnNode() throws Exception { // given - DefinedProperty property = Property.property( 8, 9 ); + int propertyKeyId = 8; + Value value = Values.of( 9 ); // when - lockingOps.nodeSetProperty( state, 123, property ); + lockingOps.nodeSetProperty( state, 123, propertyKeyId, value ); // then order.verify( locks ).acquireShared( LockTracer.NONE, ResourceTypes.SCHEMA, schemaResource() ); - order.verify( entityWriteOps ).nodeSetProperty( state, 123, property ); + order.verify( entityWriteOps ).nodeSetProperty( state, 123, propertyKeyId, value ); } @Test @@ -469,14 +474,15 @@ public void shouldAcquireNodeLocksWhenDeletingRelationshipInOrderOfAscendingId() public void shouldAcquireEntityWriteLockBeforeSettingPropertyOnRelationship() throws Exception { // given - DefinedProperty property = Property.property( 8, 9 ); + int propertyKeyId = 8; + Value value = Values.of( 9 ); // when - lockingOps.relationshipSetProperty( state, 123, property ); + lockingOps.relationshipSetProperty( state, 123, propertyKeyId, value ); // then order.verify( locks ).acquireExclusive( LockTracer.NONE, ResourceTypes.RELATIONSHIP, 123 ); - order.verify( entityWriteOps ).relationshipSetProperty( state, 123, property ); + order.verify( entityWriteOps ).relationshipSetProperty( state, 123, propertyKeyId, value ); } @Test @@ -484,14 +490,15 @@ public void shouldNotAcquireEntityWriteLockBeforeSettingPropertyOnJustCreatedRel { // given txState.relationshipDoCreate( 123, 1, 2, 3 ); - DefinedProperty property = Property.property( 8, 9 ); + int propertyKeyId = 8; + Value value = Values.of( 9 ); // when - lockingOps.relationshipSetProperty( state, 123, property ); + lockingOps.relationshipSetProperty( state, 123, propertyKeyId, value ); // then order.verify( locks, never() ).acquireExclusive( LockTracer.NONE, ResourceTypes.RELATIONSHIP, 123 ); - order.verify( entityWriteOps ).relationshipSetProperty( state, 123, property ); + order.verify( entityWriteOps ).relationshipSetProperty( state, 123, propertyKeyId, value ); } @Test diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexStatisticsTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexStatisticsTest.java index e50228b96e6ff..1ee57a4ac6534 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexStatisticsTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/index/IndexStatisticsTest.java @@ -48,7 +48,6 @@ import org.neo4j.kernel.api.exceptions.EntityNotFoundException; import org.neo4j.kernel.api.exceptions.KernelException; import org.neo4j.kernel.api.exceptions.index.IndexNotFoundKernelException; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.schema.LabelSchemaDescriptor; import org.neo4j.kernel.api.schema.SchemaDescriptorFactory; import org.neo4j.kernel.api.schema.index.IndexDescriptor; @@ -63,6 +62,7 @@ import org.neo4j.register.Registers; import org.neo4j.test.rule.DatabaseRule; import org.neo4j.test.rule.EmbeddedDatabaseRule; +import org.neo4j.values.Values; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -326,7 +326,7 @@ private void changeName( long nodeId, String propertyKeyName, Object newValue ) { Statement statement = bridge.get(); int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( propertyKeyName ); - statement.dataWriteOperations().nodeSetProperty( nodeId, Property.property( propertyKeyId, newValue ) ); + statement.dataWriteOperations().nodeSetProperty( nodeId, propertyKeyId, Values.of( newValue ) ); tx.success(); } } @@ -463,7 +463,7 @@ private long createNode( Statement statement, String labelName, String propertyK int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( propertyKeyName ); long nodeId = statement.dataWriteOperations().nodeCreate(); statement.dataWriteOperations().nodeAddLabel( nodeId, labelId ); - statement.dataWriteOperations().nodeSetProperty( nodeId, Property.property( propertyKeyId, value ) ); + statement.dataWriteOperations().nodeSetProperty( nodeId, propertyKeyId, Values.of( value ) ); return nodeId; } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/CompositeUniquenessConstraintValidationIT.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/CompositeUniquenessConstraintValidationIT.java index eb7382b0d41d8..9b3aff9166e8d 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/CompositeUniquenessConstraintValidationIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/CompositeUniquenessConstraintValidationIT.java @@ -44,9 +44,9 @@ import org.neo4j.kernel.api.security.SecurityContext; import org.neo4j.kernel.internal.GraphDatabaseAPI; import org.neo4j.test.rule.ImpermanentDatabaseRule; +import org.neo4j.values.Values; import static org.junit.Assert.fail; -import static org.neo4j.kernel.api.properties.Property.property; import static org.neo4j.kernel.api.schema.SchemaDescriptorFactory.forLabel; import static org.neo4j.test.assertion.Assert.assertException; @@ -195,7 +195,7 @@ public void shouldAllowRemoveAndAddConflictingDataInOneTransaction_ChangePropert // when newTransaction(); - statement.dataWriteOperations().nodeSetProperty( node, property( 0, "Alive!" ) ); + statement.dataWriteOperations().nodeSetProperty( node, 0, Values.of( "Alive!" ) ); long newNode = createLabeledNode( label ); setProperties( newNode, aValues ); @@ -352,7 +352,7 @@ private void addLabel( long nodeId, int labelId ) throws KernelException private void setProperty( long nodeId, int propertyId, Object value ) throws KernelException { - statement.dataWriteOperations().nodeSetProperty( nodeId, property( propertyId, value ) ); + statement.dataWriteOperations().nodeSetProperty( nodeId, propertyId, Values.of( value ) ); } private long createNode() throws KernelException diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/NodeGetUniqueFromIndexSeekIT.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/NodeGetUniqueFromIndexSeekIT.java index c06479c9d1fff..0cad90508fbfa 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/NodeGetUniqueFromIndexSeekIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/NodeGetUniqueFromIndexSeekIT.java @@ -32,12 +32,13 @@ import org.neo4j.kernel.api.exceptions.index.IndexNotApplicableKernelException; import org.neo4j.kernel.api.exceptions.index.IndexNotFoundKernelException; import org.neo4j.kernel.api.exceptions.schema.IndexBrokenKernelException; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.schema.LabelSchemaDescriptor; import org.neo4j.kernel.api.schema.SchemaDescriptorFactory; import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.kernel.api.security.SecurityContext; import org.neo4j.test.DoubleLatch; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static org.junit.Assert.assertTrue; import static org.neo4j.kernel.api.schema.IndexQuery.exact; @@ -80,7 +81,7 @@ public void shouldFindMatchingNode() throws Exception { // given IndexDescriptor index = createUniquenessConstraint( labelId, propertyId1 ); - String value = "value"; + Value value = Values.of( "value" ); long nodeId = createNodeWithValue( value ); // when looking for it @@ -98,8 +99,8 @@ public void shouldNotFindNonMatchingNode() throws Exception { // given IndexDescriptor index = createUniquenessConstraint( labelId, propertyId1 ); - String value = "value"; - createNodeWithValue( "other_" + value ); + Value value = Values.of( "value" ); + createNodeWithValue( Values.of( "other_" + value ) ); // when looking for it ReadOperations readOperations = readOperationsInNewTransaction(); @@ -115,8 +116,8 @@ public void shouldCompositeFindMatchingNode() throws Exception { // given IndexDescriptor index = createUniquenessConstraint( labelId, propertyId1, propertyId2 ); - String value1 = "value1"; - String value2 = "value2"; + Value value1 = Values.of( "value1" ); + Value value2 = Values.of( "value2" ); long nodeId = createNodeWithValues( value1, value2 ); // when looking for it @@ -135,9 +136,9 @@ public void shouldNotCompositeFindNonMatchingNode() throws Exception { // given IndexDescriptor index = createUniquenessConstraint( labelId, propertyId1, propertyId2 ); - String value1 = "value1"; - String value2 = "value2"; - createNodeWithValues( "other_" + value1, "other_" + value2 ); + Value value1 = Values.of( "value1" ); + Value value2 = Values.of( "value2" ); + createNodeWithValues( Values.of( "other_" + value1 ), Values.of( "other_" + value2 ) ); // when looking for it ReadOperations readOperations = readOperationsInNewTransaction(); @@ -171,14 +172,14 @@ public void shouldBlockUniqueIndexSeekFromCompetingTransaction() throws Exceptio final DoubleLatch latch = new DoubleLatch(); final IndexDescriptor index = createUniquenessConstraint( labelId, propertyId1 ); - final String value = "value"; + final Value value = Values.of( "value" ); DataWriteOperations dataStatement = dataWriteOperationsInNewTransaction(); long nodeId = dataStatement.nodeCreate(); dataStatement.nodeAddLabel( nodeId, labelId ); // This adds the node to the unique index and should take an index write lock - dataStatement.nodeSetProperty( nodeId, Property.stringProperty( propertyId1, value ) ); + dataStatement.nodeSetProperty( nodeId, propertyId1, value ); Runnable runnableForThread2 = () -> { @@ -224,23 +225,23 @@ private boolean isNoSuchNode( long foundId ) return StatementConstants.NO_SUCH_NODE == foundId; } - private long createNodeWithValue( String value ) throws KernelException + private long createNodeWithValue( Value value ) throws KernelException { DataWriteOperations dataStatement = dataWriteOperationsInNewTransaction(); long nodeId = dataStatement.nodeCreate(); dataStatement.nodeAddLabel( nodeId, labelId ); - dataStatement.nodeSetProperty( nodeId, Property.stringProperty( propertyId1, value ) ); + dataStatement.nodeSetProperty( nodeId, propertyId1, value ); commit(); return nodeId; } - private long createNodeWithValues( String value1, String value2 ) throws KernelException + private long createNodeWithValues( Value value1, Value value2 ) throws KernelException { DataWriteOperations dataStatement = dataWriteOperationsInNewTransaction(); long nodeId = dataStatement.nodeCreate(); dataStatement.nodeAddLabel( nodeId, labelId ); - dataStatement.nodeSetProperty( nodeId, Property.stringProperty( propertyId1, value1 ) ); - dataStatement.nodeSetProperty( nodeId, Property.stringProperty( propertyId2, value2 ) ); + dataStatement.nodeSetProperty( nodeId, propertyId1, value1 ); + dataStatement.nodeSetProperty( nodeId, propertyId2, value2 ); commit(); return nodeId; } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/PropertyIT.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/PropertyIT.java index f4d323cb546bc..4efaebd2b2efa 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/PropertyIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/PropertyIT.java @@ -21,18 +21,18 @@ import org.junit.Test; +import java.util.Collections; import java.util.Iterator; import org.neo4j.kernel.api.DataWriteOperations; import org.neo4j.kernel.api.ReadOperations; import org.neo4j.kernel.api.Statement; import org.neo4j.kernel.api.exceptions.EntityNotFoundException; -import org.neo4j.kernel.api.properties.DefinedProperty; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.security.AnonymousContext; import org.neo4j.storageengine.api.Token; +import org.neo4j.values.Value; +import org.neo4j.values.Values; -import static java.util.Arrays.asList; import static junit.framework.TestCase.fail; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; @@ -40,13 +40,11 @@ import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.core.IsCollectionContaining.hasItems; 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.neo4j.collection.primitive.PrimitiveIntCollections.toList; import static org.neo4j.helpers.collection.Iterators.asCollection; -import static org.neo4j.kernel.api.properties.Property.byteArrayProperty; -import static org.neo4j.kernel.api.properties.Property.property; -import static org.neo4j.kernel.api.properties.Property.stringProperty; +import static org.neo4j.values.Values.NO_VALUE; public class PropertyIT extends KernelIntegrationTest { @@ -59,8 +57,7 @@ public void shouldBeAbleToSetAndReadLargeByteArray() throws Exception // WHEN int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "clown" ); - DefinedProperty property = byteArrayProperty( propertyKeyId, new byte[100_000] ); - statement.dataWriteOperations().nodeSetProperty( nodeId, property ); + statement.dataWriteOperations().nodeSetProperty( nodeId, propertyKeyId, Values.of( new byte[100_000] ) ); // WHEN commit(); @@ -81,7 +78,7 @@ public void shouldSetNodePropertyValue() throws Exception // WHEN int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "clown" ); - statement.dataWriteOperations().nodeSetProperty( nodeId, stringProperty( propertyKeyId, value ) ); + statement.dataWriteOperations().nodeSetProperty( nodeId, propertyKeyId, Values.stringValue( value ) ); // THEN assertEquals( value, statement.readOperations().nodeGetProperty( nodeId, propertyKeyId ) ); @@ -102,7 +99,7 @@ public void shouldRemoveSetNodeProperty() throws Exception long nodeId = statement.dataWriteOperations().nodeCreate(); int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "clown" ); - statement.dataWriteOperations().nodeSetProperty( nodeId, stringProperty( propertyKeyId, "bozo" ) ); + statement.dataWriteOperations().nodeSetProperty( nodeId, propertyKeyId, Values.stringValue( "bozo" ) ); // WHEN statement.dataWriteOperations().nodeRemoveProperty( nodeId, propertyKeyId ); @@ -128,17 +125,17 @@ public void shouldRemoveSetNodePropertyAcrossTransactions() throws Exception Statement statement = statementInNewTransaction( AnonymousContext.writeToken() ); nodeId = statement.dataWriteOperations().nodeCreate(); propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "clown" ); - statement.dataWriteOperations().nodeSetProperty( nodeId, stringProperty( propertyKeyId, "bozo" ) ); + statement.dataWriteOperations().nodeSetProperty( nodeId, propertyKeyId, Values.stringValue( "bozo" ) ); commit(); } { Statement statement = statementInNewTransaction( AnonymousContext.writeToken() ); // WHEN - Object previous = statement.dataWriteOperations().nodeRemoveProperty( nodeId, propertyKeyId ).value(); + Value previous = statement.dataWriteOperations().nodeRemoveProperty( nodeId, propertyKeyId ); // THEN - assertEquals( "bozo", previous ); + assertTrue( previous.equals( "bozo" ) ); assertThat( statement.readOperations().nodeGetProperty( nodeId, propertyKeyId ), nullValue() ); // WHEN @@ -162,22 +159,21 @@ public void shouldRemoveSetExistingProperty() throws Exception Statement statement = statementInNewTransaction( AnonymousContext.writeToken() ); nodeId = statement.dataWriteOperations().nodeCreate(); propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "clown" ); - statement.dataWriteOperations().nodeSetProperty( nodeId, stringProperty( propertyKeyId, "bozo" ) ); + statement.dataWriteOperations().nodeSetProperty( nodeId, propertyKeyId, Values.stringValue( "bozo" ) ); commit(); } - DefinedProperty newProperty = stringProperty( propertyKeyId, "ozob" ); + Value newValue = Values.stringValue( "ozob" ); { Statement statement = statementInNewTransaction( AnonymousContext.writeToken() ); // WHEN statement.dataWriteOperations().nodeRemoveProperty( nodeId, propertyKeyId ); - statement.dataWriteOperations().nodeSetProperty( nodeId, newProperty ); + statement.dataWriteOperations().nodeSetProperty( nodeId, propertyKeyId, newValue ); // THEN - assertThat( statement.readOperations().nodeGetProperty( nodeId, propertyKeyId ), - equalTo( newProperty.value() ) ); + assertThat( statement.readOperations().nodeGetProperty( nodeId, propertyKeyId ), equalTo( newValue.asPublic() ) ); // WHEN commit(); @@ -186,9 +182,9 @@ public void shouldRemoveSetExistingProperty() throws Exception // THEN { ReadOperations readOperations = readOperationsInNewTransaction(); - assertThat( readOperations.nodeGetProperty( nodeId, propertyKeyId ), equalTo( newProperty.value() ) ); + assertThat( readOperations.nodeGetProperty( nodeId, propertyKeyId ), equalTo( newValue.asPublic() ) ); assertThat( toList( readOperations.nodeGetPropertyKeys( nodeId ) ), - equalTo( asList( newProperty.propertyKeyId() ) ) ); + equalTo( Collections.singletonList( propertyKeyId ) ) ); } } @@ -208,10 +204,10 @@ public void shouldSilentlyNotRemoveMissingNodeProperty() throws Exception DataWriteOperations statement = dataWriteOperationsInNewTransaction(); // WHEN - Property result = statement.nodeRemoveProperty( nodeId, propertyId ); + Value result = statement.nodeRemoveProperty( nodeId, propertyId ); // THEN - assertFalse( "Return no property if removing missing", result.isDefined() ); + assertTrue( "Return no property if removing missing", result == NO_VALUE ); } } @@ -224,7 +220,7 @@ public void nodeHasPropertyIfSet() throws Exception // WHEN int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "clown" ); - statement.dataWriteOperations().nodeSetProperty( nodeId, stringProperty( propertyKeyId, "bozo" ) ); + statement.dataWriteOperations().nodeSetProperty( nodeId, propertyKeyId, Values.stringValue( "bozo" ) ); // THEN assertThat( statement.readOperations().nodeHasProperty( nodeId, propertyKeyId ), is( true ) ); @@ -274,7 +270,7 @@ public void shouldRollbackSetNodePropertyValue() throws Exception // WHEN DataWriteOperations dataWriteOperations = dataWriteOperationsInNewTransaction(); - dataWriteOperations.nodeSetProperty( nodeId, stringProperty( propertyKeyId, "bozo" ) ); + dataWriteOperations.nodeSetProperty( nodeId, propertyKeyId, Values.stringValue( "bozo" ) ); rollback(); // THEN @@ -290,12 +286,12 @@ public void shouldUpdateNodePropertyValue() throws Exception Statement statement = statementInNewTransaction( AnonymousContext.writeToken() ); long nodeId = statement.dataWriteOperations().nodeCreate(); int propertyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "clown" ); - statement.dataWriteOperations().nodeSetProperty( nodeId, stringProperty( propertyId, "bozo" ) ); + statement.dataWriteOperations().nodeSetProperty( nodeId, propertyId, Values.stringValue( "bozo" ) ); commit(); // WHEN DataWriteOperations dataWriteOperations = dataWriteOperationsInNewTransaction(); - dataWriteOperations.nodeSetProperty( nodeId, Property.intProperty( propertyId, 42 ) ); + dataWriteOperations.nodeSetProperty( nodeId, propertyId, Values.of( 42 ) ); commit(); // THEN @@ -338,7 +334,7 @@ public void shouldNotAllowModifyingPropertiesOnDeletedNode() throws Exception int prop1 = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "prop1" ); long node = statement.dataWriteOperations().nodeCreate(); - statement.dataWriteOperations().nodeSetProperty( node, stringProperty( prop1, "As" ) ); + statement.dataWriteOperations().nodeSetProperty( node, prop1, Values.stringValue( "As" ) ); statement.dataWriteOperations().nodeDelete( node ); // When @@ -364,7 +360,7 @@ public void shouldNotAllowModifyingPropertiesOnDeletedRelationship() throws Exce long endNodeId = statement.dataWriteOperations().nodeCreate(); long rel = statement.dataWriteOperations().relationshipCreate( type, startNodeId, endNodeId ); - statement.dataWriteOperations().relationshipSetProperty( rel, stringProperty( prop1, "As" ) ); + statement.dataWriteOperations().relationshipSetProperty( rel, prop1, Values.stringValue( "As" ) ); statement.dataWriteOperations().relationshipDelete( rel ); // When @@ -387,14 +383,14 @@ public void shouldBeAbleToRemoveResetAndTwiceRemovePropertyOnNode() throws Excep int prop = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "foo" ); long node = statement.dataWriteOperations().nodeCreate(); - statement.dataWriteOperations().nodeSetProperty( node, property( prop, "bar" ) ); + statement.dataWriteOperations().nodeSetProperty( node, prop, Values.of( "bar" ) ); commit(); // when DataWriteOperations dataWriteOperations = dataWriteOperationsInNewTransaction(); dataWriteOperations.nodeRemoveProperty( node, prop ); - dataWriteOperations.nodeSetProperty( node, property( prop, "bar" ) ); + dataWriteOperations.nodeSetProperty( node, prop, Values.of( "bar" ) ); dataWriteOperations.nodeRemoveProperty( node, prop ); dataWriteOperations.nodeRemoveProperty( node, prop ); @@ -416,14 +412,14 @@ public void shouldBeAbleToRemoveResetAndTwiceRemovePropertyOnRelationship() thro long startNodeId = statement.dataWriteOperations().nodeCreate(); long endNodeId = statement.dataWriteOperations().nodeCreate(); long rel = statement.dataWriteOperations().relationshipCreate( type, startNodeId, endNodeId ); - statement.dataWriteOperations().relationshipSetProperty( rel, property( prop, "bar" ) ); + statement.dataWriteOperations().relationshipSetProperty( rel, prop, Values.of( "bar" ) ); commit(); // when DataWriteOperations dataWriteOperations = dataWriteOperationsInNewTransaction(); dataWriteOperations.relationshipRemoveProperty( rel, prop ); - dataWriteOperations.relationshipSetProperty( rel, property( prop, "bar" ) ); + dataWriteOperations.relationshipSetProperty( rel, prop, Values.of( "bar" ) ); dataWriteOperations.relationshipRemoveProperty( rel, prop ); dataWriteOperations.relationshipRemoveProperty( rel, prop ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintValidationIT.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintValidationIT.java index 9c0c07fc16f3a..a7c656932a895 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintValidationIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintValidationIT.java @@ -29,10 +29,10 @@ import org.neo4j.kernel.api.TokenWriteOperations; import org.neo4j.kernel.api.exceptions.KernelException; import org.neo4j.kernel.api.exceptions.schema.UniquePropertyValueValidationException; -import org.neo4j.kernel.api.properties.DefinedProperty; import org.neo4j.kernel.api.schema.SchemaDescriptorFactory; import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.kernel.api.security.AnonymousContext; +import org.neo4j.values.Values; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.Matchers.equalTo; @@ -41,7 +41,6 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; import static org.neo4j.collection.primitive.PrimitiveLongCollections.count; -import static org.neo4j.kernel.api.properties.Property.property; import static org.neo4j.kernel.api.schema.IndexQuery.exact; import static org.neo4j.kernel.api.schema.SchemaDescriptorFactory.forLabel; @@ -59,8 +58,8 @@ public void shouldEnforceOnSetProperty() throws Exception long node = createLabeledNode( statement, "Label1" ); try { - statement.dataWriteOperations().nodeSetProperty( node, property( - statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "key1" ), "value1" ) ); + int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "key1" ); + statement.dataWriteOperations().nodeSetProperty( node, propertyKeyId, Values.of( "value1" ) ); fail( "should have thrown exception" ); } @@ -89,9 +88,8 @@ public void roundingErrorsFromLongToDoubleShouldNotPreventTxFromCommitting() thr // a new node with the same constraint is added, with a value not equal but which would be mapped to the same double propertyValue++; // note how propertyValue is definitely not equal to propertyValue++ but they do equal if they are cast to double - DefinedProperty prop = - property( statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "key1" ), propertyValue ); - statement.dataWriteOperations().nodeSetProperty( node, prop ); + int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "key1" ); + statement.dataWriteOperations().nodeSetProperty( node, propertyKeyId, Values.of( propertyValue ) ); // Then // the commit should still succeed @@ -201,8 +199,8 @@ public void shouldAllowRemoveAndAddConflictingDataInOneTransaction_ChangePropert Statement statement = statementInNewTransaction( AnonymousContext.writeToken() ); // when - int key = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "key1" ); - statement.dataWriteOperations().nodeSetProperty( node, property( key, "value2" ) ); + int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "key1" ); + statement.dataWriteOperations().nodeSetProperty( node, propertyKeyId, Values.of( "value2" ) ); createLabeledNode( statement, "Label1", "key1", "value1" ); commit(); } @@ -240,7 +238,7 @@ public void shouldAllowNoopPropertyUpdate() throws KernelException // when int key = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "key1" ); - statement.dataWriteOperations().nodeSetProperty( node, property( key, "value1" ) ); + statement.dataWriteOperations().nodeSetProperty( node, key, Values.of( "value1" ) ); // then should not throw exception } @@ -306,7 +304,7 @@ public void unrelatedNodesWithSamePropertyShouldNotInterfereWithUniquenessCheck( createLabeledNode( statement, "Item", "id", 2 ); // then I should find the original node - assertThat( readOps.nodeGetFromUniqueIndexSeek( idx, exact( propId, 1 ) ), equalTo( ourNode ) ); + assertThat( readOps.nodeGetFromUniqueIndexSeek( idx, exact( propId, Values.of( 1 ) ) ), equalTo( ourNode ) ); } @Test @@ -332,7 +330,7 @@ public void addingUniqueNodeWithUnrelatedValueShouldNotAffectLookup() throws Exc createLabeledNode( statement, "Person", "id", 2 ); // then I should find the original node - assertThat( readOps.nodeGetFromUniqueIndexSeek( idx, exact( propId, 1 ) ), equalTo( ourNode )); + assertThat( readOps.nodeGetFromUniqueIndexSeek( idx, exact( propId, Values.of( 1 ) ) ), equalTo( ourNode )); } private TokenNameLookup tokenLookup( Statement statement ) @@ -352,7 +350,7 @@ private long createNode( Statement statement, String key, Object value ) throws { long node = statement.dataWriteOperations().nodeCreate(); int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( key ); - statement.dataWriteOperations().nodeSetProperty( node, property( propertyKeyId, value ) ); + statement.dataWriteOperations().nodeSetProperty( node, propertyKeyId, Values.of( value ) ); return node; } @@ -361,7 +359,7 @@ private long createLabeledNode( Statement statement, String label, String key, O { long node = createLabeledNode( statement, label ); int propertyKeyId = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( key ); - statement.dataWriteOperations().nodeSetProperty( node, property( propertyKeyId, value ) ); + statement.dataWriteOperations().nodeSetProperty( node, propertyKeyId, Values.of( value ) ); return node; } @@ -375,7 +373,7 @@ private long constrainedNode( String labelName, String propertyKey, Object prope node = statement.dataWriteOperations().nodeCreate(); statement.dataWriteOperations().nodeAddLabel( node, label ); int key = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( propertyKey ); - statement.dataWriteOperations().nodeSetProperty( node, property( key, propertyValue ) ); + statement.dataWriteOperations().nodeSetProperty( node, key, Values.of( propertyValue ) ); commit(); } createConstraint( labelName, propertyKey ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/operations/ConstraintEnforcingEntityOperationsTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/operations/ConstraintEnforcingEntityOperationsTest.java index 18056436405de..db2cfcaf68187 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/operations/ConstraintEnforcingEntityOperationsTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/operations/ConstraintEnforcingEntityOperationsTest.java @@ -32,6 +32,8 @@ import org.neo4j.kernel.impl.locking.LockTracer; import org.neo4j.kernel.impl.locking.Locks; import org.neo4j.kernel.impl.locking.SimpleStatementLocks; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; @@ -48,7 +50,7 @@ public class ConstraintEnforcingEntityOperationsTest { private final int labelId = 1; private final int propertyKeyId = 2; - private final String value = "value"; + private final Value value = Values.of( "value" ); private final long resourceId = indexEntryResourceId( labelId, exact( propertyKeyId, value ) ); private final IndexDescriptor index = IndexDescriptorFactory.uniqueForLabel( labelId, propertyKeyId ); private final IndexQuery.ExactPredicate withValue = IndexQuery.exact( propertyKeyId, value ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/IndexQueryTransactionStateTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/IndexQueryTransactionStateTest.java index ada5632f912be..398b1118b7882 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/IndexQueryTransactionStateTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/IndexQueryTransactionStateTest.java @@ -48,6 +48,10 @@ import org.neo4j.storageengine.api.NodeItem; import org.neo4j.storageengine.api.StoreReadLayer; import org.neo4j.storageengine.api.schema.IndexReader; +import org.neo4j.storageengine.api.txstate.PropertyContainerState; +import org.neo4j.storageengine.api.txstate.ReadableTransactionState; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static java.util.Arrays.asList; import static org.hamcrest.Matchers.equalTo; @@ -58,8 +62,7 @@ import static org.mockito.Mockito.when; import static org.neo4j.helpers.collection.Iterators.asSet; import static org.neo4j.kernel.api.StatementConstants.NO_SUCH_NODE; -import static org.neo4j.kernel.api.properties.Property.intProperty; -import static org.neo4j.kernel.api.properties.Property.stringProperty; +import static org.neo4j.kernel.api.properties.Property.property; import static org.neo4j.kernel.impl.api.state.StubCursors.asNodeCursor; import static org.neo4j.kernel.impl.api.state.StubCursors.asPropertyCursor; import static org.neo4j.kernel.impl.api.state.StubCursors.labels; @@ -68,12 +71,12 @@ public class IndexQueryTransactionStateTest { - int labelId = 2; - int propertyKeyId = 3; - String value = "My Value"; - IndexDescriptor indexDescriptor = IndexDescriptorFactory.forLabel( labelId, propertyKeyId ); - List indexes = Collections.singletonList( indexDescriptor ); - IndexQuery.ExactPredicate withValue = IndexQuery.exact( propertyKeyId, value ); + private int labelId = 2; + private int propertyKeyId = 3; + private Value value = Values.of( "My Value" ); + private IndexDescriptor indexDescriptor = IndexDescriptorFactory.forLabel( labelId, propertyKeyId ); + private List indexes = Collections.singletonList( indexDescriptor ); + private IndexQuery.ExactPredicate withValue = IndexQuery.exact( propertyKeyId, value ); private StoreReadLayer store; private StoreStatement statement; @@ -152,7 +155,7 @@ public void shouldExcludeChangedNodesWithMissingLabelFromIndexQuery() throws Exc // Given when( indexReader.query( withValue ) ).then( answerAsPrimitiveLongIteratorFrom( asList( 2L, 3L ) ) ); - state.txState().nodeDoAddProperty( 1L, intProperty( propertyKeyId, 10 ) ); + state.txState().nodeDoAddProperty( 1L, propertyKeyId, Values.of( 10 ) ); // When PrimitiveLongIterator result = txContext.indexQuery( state, indexDescriptor, withValue ); @@ -166,7 +169,7 @@ public void shouldExcludeChangedNodeWithMissingLabelFromUniqueIndexQuery() throw { // Given when( indexReader.query( withValue ) ).thenReturn( asPrimitiveResourceIterator() ); - state.txState().nodeDoAddProperty( 1L, intProperty( propertyKeyId, 10 ) ); + state.txState().nodeDoAddProperty( 1L, propertyKeyId, Values.of( 10 ) ); // When long result = txContext.nodeGetFromUniqueIndexSeek( state, indexDescriptor, withValue ); @@ -182,8 +185,7 @@ public void shouldIncludeCreatedNodesWithCorrectLabelAndProperty() throws Except when( indexReader.query( withValue ) ).then( answerAsPrimitiveLongIteratorFrom( asList( 2L, 3L ) ) ); long nodeId = 1L; - state.txState().nodeDoAddProperty( nodeId, stringProperty( propertyKeyId, value ) ); - + state.txState().nodeDoAddProperty( nodeId, propertyKeyId, value ); when( statement.acquireSingleNodeCursor( nodeId ) ).thenReturn( asNodeCursor( nodeId, 40L ) ); mockStoreProperty(); @@ -204,7 +206,7 @@ public void shouldIncludeUniqueCreatedNodeWithCorrectLabelAndProperty() throws E when( indexReader.query( withValue ) ).thenReturn( asPrimitiveResourceIterator() ); long nodeId = 1L; - state.txState().nodeDoAddProperty( nodeId, stringProperty( propertyKeyId, value ) ); + state.txState().nodeDoAddProperty( nodeId, propertyKeyId, value ); when( statement.acquireSingleNodeCursor( nodeId ) ).thenReturn( asNodeCursor( nodeId, 40L ) ); mockStoreProperty(); @@ -308,7 +310,7 @@ public void shouldExcludeNodesWithRemovedProperty() throws Exception when( indexReader.query( withValue ) ).then( answerAsPrimitiveLongIteratorFrom( asList( 2L, 3L ) ) ); long nodeId = 1L; - state.txState().nodeDoAddProperty( nodeId, intProperty( propertyKeyId, 10 ) ); + state.txState().nodeDoAddProperty( nodeId, propertyKeyId, Values.of( 10 ) ); when( statement.acquireSingleNodeCursor( nodeId ) ) .thenReturn( asNodeCursor( nodeId, labels( labelId ) ) ); @@ -345,10 +347,10 @@ public void shouldExcludeUniqueNodeWithRemovedProperty() throws Exception private void mockStoreProperty() { when( store.nodeGetProperties( eq( statement ), any( NodeItem.class ), any( AssertOpen.class ) ) ) - .thenReturn( asPropertyCursor( stringProperty( propertyKeyId, value ) ) ); + .thenReturn( asPropertyCursor( property( propertyKeyId, value.asPublic() ) ) ); when( store.nodeGetProperty( eq( statement ), any( NodeItem.class ), eq( propertyKeyId ), any( AssertOpen.class ) ) ) - .thenReturn( asPropertyCursor( stringProperty( propertyKeyId, value ) ) ); + .thenReturn( asPropertyCursor( property( propertyKeyId, value.asPublic() ) ) ); } private void assertNoSuchNode( long node ) diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/IndexTxStateUpdaterTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/IndexTxStateUpdaterTest.java index 55ee0b8111d82..744b7b93ea6fd 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/IndexTxStateUpdaterTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/IndexTxStateUpdaterTest.java @@ -40,6 +40,7 @@ import org.neo4j.kernel.impl.api.operations.EntityReadOperations; import org.neo4j.storageengine.api.NodeItem; import org.neo4j.storageengine.api.StoreReadLayer; +import org.neo4j.values.Values; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; @@ -49,7 +50,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.neo4j.helpers.collection.Iterators.filter; -import static org.neo4j.kernel.api.properties.Property.property; import static org.neo4j.kernel.api.schema.SchemaDescriptorPredicates.hasLabel; import static org.neo4j.kernel.api.schema.SchemaDescriptorPredicates.hasProperty; import static org.neo4j.kernel.impl.api.state.IndexTxStateUpdater.LabelChangeType.ADDED_LABEL; @@ -161,10 +161,9 @@ public void shouldUpdateIndexesOnRemovedLabel() throws EntityNotFoundException public void shouldNotUpdateIndexesOnChangedIrrelevantProperty() throws EntityNotFoundException { // WHEN - indexTxUpdater.onPropertyAdd( state, node, property( unIndexedPropId, "whAt" ) ); - indexTxUpdater.onPropertyRemove( state, node, property( unIndexedPropId, "whAt" ) ); - indexTxUpdater.onPropertyChange( state, node, - property( unIndexedPropId, "whAt" ), property( unIndexedPropId, "whAt2" ) ); + indexTxUpdater.onPropertyAdd( state, node, unIndexedPropId, Values.of( "whAt" ) ); + indexTxUpdater.onPropertyRemove( state, node, unIndexedPropId, Values.of( "whAt" ) ); + indexTxUpdater.onPropertyChange( state, node, unIndexedPropId, Values.of( "whAt" ), Values.of( "whAt2" ) ); // THEN verify( txState, times( 0 ) ).indexDoUpdateEntry( any(), anyInt(), any(), any() ); @@ -174,7 +173,7 @@ public void shouldNotUpdateIndexesOnChangedIrrelevantProperty() throws EntityNot public void shouldUpdateIndexesOnAddedProperty() throws EntityNotFoundException { // WHEN - indexTxUpdater.onPropertyAdd( state, node, property( newPropId, "newHi" ) ); + indexTxUpdater.onPropertyAdd( state, node, newPropId, Values.of( "newHi" ) ); // THEN verifyIndexUpdate( indexOn2_new.schema(), node.id(), null, values( "newHi" ) ); @@ -186,7 +185,7 @@ public void shouldUpdateIndexesOnAddedProperty() throws EntityNotFoundException public void shouldUpdateIndexesOnRemovedProperty() throws EntityNotFoundException { // WHEN - indexTxUpdater.onPropertyRemove( state, node, property( propId2, "hi2" ) ); + indexTxUpdater.onPropertyRemove( state, node, propId2, Values.of( "hi2" ) ); // THEN verifyIndexUpdate( uniqueOn1_2.schema(), node.id(), values( "hi2" ), null ); @@ -198,8 +197,7 @@ public void shouldUpdateIndexesOnRemovedProperty() throws EntityNotFoundExceptio public void shouldUpdateIndexesOnChangesProperty() throws EntityNotFoundException { // WHEN - indexTxUpdater.onPropertyChange( state, node, - property( propId2, "hi2" ), property( propId2, "new2" ) ); + indexTxUpdater.onPropertyChange( state, node, propId2, Values.of( "hi2" ), Values.of( "new2" ) ); // THEN verifyIndexUpdate( uniqueOn1_2.schema(), node.id(), values( "hi2" ), values( "new2" ) ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/PropertyContainerStateImplTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/PropertyContainerStateImplTest.java index b7200e37981c9..66877eef211de 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/PropertyContainerStateImplTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/PropertyContainerStateImplTest.java @@ -24,7 +24,10 @@ import java.util.Iterator; import org.neo4j.helpers.collection.Iterators; +import org.neo4j.kernel.api.properties.DefinedProperty; import org.neo4j.storageengine.api.StorageProperty; +import org.neo4j.test.Property; +import org.neo4j.values.Values; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.equalTo; @@ -39,9 +42,9 @@ public void shouldListAddedProperties() throws Exception { // Given PropertyContainerStateImpl state = new PropertyContainerStateImpl( 1 ); - state.addProperty( stringProperty( 1, "Hello" ) ); - state.addProperty( stringProperty( 2, "Hello" ) ); - state.removeProperty( stringProperty( 1, "Hello" ) ); + state.addProperty( 1, Values.of( "Hello" ) ); + state.addProperty( 2, Values.of( "Hello" ) ); + state.removeProperty( 1, Values.of( "Hello" ) ); // When Iterator added = state.addedProperties(); @@ -56,9 +59,9 @@ public void shouldListAddedPropertiesEvenIfPropertiesHaveBeenReplaced() throws E { // Given PropertyContainerStateImpl state = new PropertyContainerStateImpl( 1 ); - state.addProperty( stringProperty( 1, "Hello" ) ); - state.addProperty( stringProperty( 1, "WAT" ) ); - state.addProperty( stringProperty( 2, "Hello" ) ); + state.addProperty( 1, Values.of( "Hello" ) ); + state.addProperty( 1, Values.of( "WAT" ) ); + state.addProperty( 2, Values.of( "Hello" ) ); // When Iterator added = state.addedProperties(); @@ -75,8 +78,8 @@ public void shouldConvertAddRemoveToChange() throws Exception PropertyContainerStateImpl state = new PropertyContainerStateImpl( 1 ); // When - state.removeProperty( stringProperty( 4, "a value" ) ); - state.addProperty( stringProperty( 4, "another value" ) ); + state.removeProperty( 4, Values.of( "a value" ) ); + state.addProperty( 4, Values.of( "another value" ) ); // Then assertThat( Iterators.asList( state.changedProperties() ), diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/StateHandlingStatementOperationsTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/StateHandlingStatementOperationsTest.java index 6f0edead6b7a9..986bfe8c8f2bf 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/StateHandlingStatementOperationsTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/StateHandlingStatementOperationsTest.java @@ -33,7 +33,6 @@ import org.neo4j.kernel.api.exceptions.index.IndexNotFoundKernelException; import org.neo4j.kernel.api.legacyindex.AutoIndexOperations; import org.neo4j.kernel.api.legacyindex.AutoIndexing; -import org.neo4j.kernel.api.properties.DefinedProperty; import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.schema.IndexQuery; import org.neo4j.kernel.api.schema.LabelSchemaDescriptor; @@ -58,6 +57,8 @@ import org.neo4j.storageengine.api.StoreReadLayer; import org.neo4j.storageengine.api.schema.IndexReader; import org.neo4j.storageengine.api.txstate.PropertyContainerState; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static java.util.Collections.emptyIterator; import static org.junit.Assert.assertEquals; @@ -522,14 +523,15 @@ public void shouldNotRecordNodeSetPropertyOnSameValue() throws Exception StateHandlingStatementOperations operations = newTxStateOps( storeReadLayer, autoIndexing ); // WHEN - DefinedProperty newProperty = Property.stringProperty( propertyKeyId, value ); - operations.nodeSetProperty( kernelStatement, nodeId, newProperty ); + Value newValue = Values.of( value ); + operations.nodeSetProperty( kernelStatement, nodeId, propertyKeyId, newValue ); // THEN assertFalse( kernelStatement.hasTxStateWithChanges() ); // although auto-indexing should still be notified - verify( autoIndexOps ).propertyChanged( any( DataWriteOperations.class ), eq( nodeId ), - eq( Property.stringProperty( propertyKeyId, value ) ), eq( newProperty ) ); + verify( autoIndexOps ).propertyChanged( + any( DataWriteOperations.class ), eq( nodeId ), + eq( propertyKeyId ), eq( Values.of( value ) ), eq( newValue ) ); } @Test @@ -555,14 +557,15 @@ public void shouldNotRecordRelationshipSetPropertyOnSameValue() throws Exception StateHandlingStatementOperations operations = newTxStateOps( storeReadLayer, autoIndexing ); // WHEN - DefinedProperty newProperty = Property.stringProperty( propertyKeyId, value ); - operations.relationshipSetProperty( kernelStatement, relationshipId, newProperty ); + Value newValue = Values.of( value ); + operations.relationshipSetProperty( kernelStatement, relationshipId, propertyKeyId, newValue ); // THEN assertFalse( kernelStatement.hasTxStateWithChanges() ); // although auto-indexing should still be notified - verify( autoIndexOps ).propertyChanged( any( DataWriteOperations.class ), eq( relationshipId ), - eq( newProperty ), eq( newProperty ) ); + verify( autoIndexOps ).propertyChanged( + any( DataWriteOperations.class ), eq( relationshipId ), + eq( propertyKeyId ), eq( newValue ), eq( newValue ) ); } @Test @@ -578,8 +581,8 @@ public void shouldNotRecordGraphSetPropertyOnSameValue() throws Exception StateHandlingStatementOperations operations = newTxStateOps( inner ); // WHEN - DefinedProperty newProperty = Property.stringProperty( propertyKeyId, value ); - operations.graphSetProperty( kernelStatement, newProperty ); + Value newValue = Values.of( value ); + operations.graphSetProperty( kernelStatement, propertyKeyId, newValue ); // THEN assertFalse( kernelStatement.hasTxStateWithChanges() ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/StateOperationsAutoIndexingTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/StateOperationsAutoIndexingTest.java index a28eec00e8e48..74592f9209bb4 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/StateOperationsAutoIndexingTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/state/StateOperationsAutoIndexingTest.java @@ -27,8 +27,6 @@ import org.neo4j.kernel.api.DataWriteOperations; import org.neo4j.kernel.api.exceptions.InvalidTransactionTypeKernelException; import org.neo4j.kernel.api.legacyindex.AutoIndexing; -import org.neo4j.kernel.api.properties.DefinedProperty; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.impl.api.KernelStatement; import org.neo4j.kernel.impl.api.StateHandlingStatementOperations; import org.neo4j.kernel.impl.api.legacyindex.InternalAutoIndexOperations; @@ -39,6 +37,10 @@ import org.neo4j.storageengine.api.RelationshipItem; import org.neo4j.storageengine.api.StorageStatement; import org.neo4j.storageengine.api.StoreReadLayer; +import org.neo4j.storageengine.api.txstate.PropertyContainerState; +import org.neo4j.storageengine.api.txstate.ReadableTransactionState; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; @@ -46,7 +48,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.neo4j.kernel.api.properties.Property.property; import static org.neo4j.kernel.impl.api.state.StubCursors.cursor; import static org.neo4j.kernel.impl.util.Cursors.empty; @@ -102,20 +103,21 @@ public void shouldSignalRelationshipRemovedToAutoIndex() throws Exception public void shouldSignalNodePropertyAddedToAutoIndex() throws Exception { // Given - DefinedProperty property = property( 1, "Hello!" ); + int propertyKeyId = 1; + Value value = Values.of( "Hello!" ); NodeItem node = mock( NodeItem.class ); when( node.labels() ).thenReturn( PrimitiveIntCollections.emptySet() ); when( storeStmt.acquireSingleNodeCursor( 1337 ) ).thenReturn( cursor( node ) ); - when( storeLayer.nodeGetProperty( eq( storeStmt ), any( NodeItem.class ), eq( property.propertyKeyId() ), + when( storeLayer.nodeGetProperty( eq( storeStmt ), any( NodeItem.class ), eq( propertyKeyId ), any( AssertOpen.class ) ) ) .thenReturn( cursor() ); // When - context.nodeSetProperty( stmt, 1337, property ); + context.nodeSetProperty( stmt, 1337, propertyKeyId, value ); // Then - verify( nodeOps ).propertyAdded( writeOps, 1337, property ); + verify( nodeOps ).propertyAdded( writeOps, 1337, propertyKeyId, value ); } @Test @@ -123,7 +125,7 @@ public void shouldSignalRelationshipPropertyAddedToAutoIndex() throws Exception { // Given int propertyKeyId = 1; - DefinedProperty property = property( propertyKeyId, "Hello!" ); + Value value = Values.of( "Hello!" ); RelationshipItem relationship = mock( RelationshipItem.class ); when( storeStmt.acquireSingleRelationshipCursor( 1337 ) ).thenReturn( cursor( relationship ) ); @@ -131,34 +133,36 @@ public void shouldSignalRelationshipPropertyAddedToAutoIndex() throws Exception .thenReturn( empty() ); // When - context.relationshipSetProperty( stmt, 1337, property ); + context.relationshipSetProperty( stmt, 1337, propertyKeyId, value ); // Then - verify( relOps ).propertyAdded( writeOps, 1337, property ); + verify( relOps ).propertyAdded( writeOps, 1337, propertyKeyId, value ); } @Test public void shouldSignalNodePropertyChangedToAutoIndex() throws Exception { // Given - DefinedProperty property = property( 1, "Hello!" ); + int propertyKeyId = 1; + Value value = Values.of( "Hello!" ); PropertyItem existingProperty = mock( PropertyItem.class ); - when(existingProperty.propertyKeyId()).thenReturn( property.propertyKeyId() ); + when(existingProperty.propertyKeyId()).thenReturn( propertyKeyId ); when(existingProperty.value()).thenReturn( "Goodbye!" ); NodeItem node = mock( NodeItem.class ); when( node.labels() ).thenReturn( PrimitiveIntCollections.emptySet() ); when( storeStmt.acquireSingleNodeCursor( 1337 ) ).thenReturn( cursor( node ) ); - when( storeLayer.nodeGetProperty( eq( storeStmt ), any( NodeItem.class ), eq( property.propertyKeyId() ), + when( storeLayer.nodeGetProperty( eq( storeStmt ), any( NodeItem.class ), eq( propertyKeyId ), any( AssertOpen.class ) ) ) .thenReturn( cursor( existingProperty ) ); // When - context.nodeSetProperty( stmt, 1337, property ); + context.nodeSetProperty( stmt, 1337, propertyKeyId, value ); // Then - verify( nodeOps ).propertyChanged( eq(writeOps), eq(1337L), any(Property.class), eq(property) ); + verify( nodeOps ).propertyChanged( eq(writeOps), eq(1337L), + eq( propertyKeyId ), any( Value.class ), eq( value ) ); } @Test @@ -166,10 +170,10 @@ public void shouldSignalRelationshipPropertyChangedToAutoIndex() throws Exceptio { // Given int propertyKeyId = 1; - DefinedProperty property = property( propertyKeyId, "Hello!" ); + Value value = Values.of( "Hello!" ); PropertyItem existingProperty = mock( PropertyItem.class ); - when(existingProperty.propertyKeyId()).thenReturn( property.propertyKeyId() ); + when(existingProperty.propertyKeyId()).thenReturn( propertyKeyId ); when(existingProperty.value()).thenReturn( "Goodbye!" ); RelationshipItem relationship = mock( RelationshipItem.class ); @@ -178,10 +182,11 @@ public void shouldSignalRelationshipPropertyChangedToAutoIndex() throws Exceptio .thenReturn( cursor( existingProperty ) ); // When - context.relationshipSetProperty( stmt, 1337, property ); + context.relationshipSetProperty( stmt, 1337, propertyKeyId, value ); // Then - verify( relOps ).propertyChanged( eq(writeOps), eq(1337L), any(Property.class), eq(property) ); + verify( relOps ).propertyChanged( eq( writeOps ), eq( 1337L ), + eq( propertyKeyId ), any( Value.class ), eq( value ) ); } @Test 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 48bd0d9df26fc..ada93eff21189 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 @@ -38,7 +38,6 @@ import org.neo4j.cursor.Cursor; import org.neo4j.helpers.collection.Iterables; import org.neo4j.helpers.collection.Pair; -import org.neo4j.kernel.api.properties.DefinedProperty; import org.neo4j.kernel.api.schema.OrderedPropertyValues; import org.neo4j.kernel.api.schema.constaints.ConstraintDescriptor; import org.neo4j.kernel.api.schema.constaints.ConstraintDescriptorFactory; @@ -52,6 +51,8 @@ import org.neo4j.storageengine.api.txstate.TxStateVisitor; import org.neo4j.test.rule.RandomRule; import org.neo4j.test.rule.RepeatRule; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static java.util.Arrays.asList; import static java.util.Collections.emptySet; @@ -67,9 +68,6 @@ import static org.neo4j.collection.primitive.PrimitiveIntCollections.toList; import static org.neo4j.helpers.collection.Iterators.asSet; import static org.neo4j.helpers.collection.Pair.of; -import static org.neo4j.kernel.api.properties.Property.booleanProperty; -import static org.neo4j.kernel.api.properties.Property.numberProperty; -import static org.neo4j.kernel.api.properties.Property.stringProperty; import static org.neo4j.kernel.impl.api.state.StubCursors.cursor; import static org.neo4j.kernel.impl.api.state.StubCursors.relationship; @@ -1664,51 +1662,34 @@ public void withDefaultStringProperties( long... nodeIds ) @Override public void withStringProperties( Collection> nodesWithValues ) { - final int labelId = descriptor.schema().getLabelId(); - final int propertyKeyId = descriptor.schema().getPropertyId(); - for ( Pair entry : nodesWithValues ) - { - long nodeId = entry.first(); - state.nodeDoCreate( nodeId ); - state.nodeDoAddLabel( labelId, nodeId ); - DefinedProperty propertyAfter = stringProperty( propertyKeyId, entry.other() ); - state.nodeDoAddProperty( nodeId, propertyAfter ); - state.indexDoUpdateEntry( descriptor.schema(), nodeId, null, - OrderedPropertyValues.ofUndefined( propertyAfter.value() ) ); - } + withProperties( nodesWithValues ); } @Override public void withNumberProperties( Collection> nodesWithValues ) { - final int labelId = descriptor.schema().getLabelId(); - final int propertyKeyId = descriptor.schema().getPropertyId(); - for ( Pair entry : nodesWithValues ) - { - long nodeId = entry.first(); - state.nodeDoCreate( nodeId ); - state.nodeDoAddLabel( labelId, nodeId ); - DefinedProperty propertyAfter = numberProperty( propertyKeyId, entry.other() ); - state.nodeDoAddProperty( nodeId, propertyAfter ); - state.indexDoUpdateEntry( descriptor.schema(), nodeId, null, - OrderedPropertyValues.ofUndefined( propertyAfter.value() ) ); - } + withProperties( nodesWithValues ); } @Override public void withBooleanProperties( Collection> nodesWithValues ) + { + withProperties( nodesWithValues ); + } + + private void withProperties( Collection> nodesWithValues ) { final int labelId = descriptor.schema().getLabelId(); final int propertyKeyId = descriptor.schema().getPropertyId(); - for ( Pair entry : nodesWithValues ) + for ( Pair entry : nodesWithValues ) { long nodeId = entry.first(); state.nodeDoCreate( nodeId ); state.nodeDoAddLabel( labelId, nodeId ); - DefinedProperty propertyAfter = booleanProperty( propertyKeyId, entry.other() ); - state.nodeDoAddProperty( nodeId, propertyAfter ); + Value valueAfter = Values.of( entry.other() ); + state.nodeDoAddProperty( nodeId, propertyKeyId, valueAfter ); state.indexDoUpdateEntry( descriptor.schema(), nodeId, null, - OrderedPropertyValues.ofUndefined( propertyAfter.value() ) ); + OrderedPropertyValues.ofUndefined( valueAfter.asPublic() ) ); } } }; 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 7eb0bd47158cd..7e002c30d36a0 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 @@ -35,11 +35,13 @@ import org.neo4j.kernel.api.txstate.TransactionState; import org.neo4j.storageengine.api.StorageProperty; import org.neo4j.storageengine.api.txstate.TxStateVisitor; +import org.neo4j.test.Property; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; -import static org.neo4j.kernel.api.properties.Property.stringProperty; public class TxStateVisitorTest { @@ -50,13 +52,14 @@ public void shouldSeeAddedRelationshipProperties() throws Exception long relId = 1L; int propKey = 2; GatheringVisitor visitor = new GatheringVisitor(); - DefinedProperty prop = stringProperty( propKey, "hello" ); - state.relationshipDoReplaceProperty( relId, stringProperty( propKey, "" ), prop ); + Value value = Values.of( "hello" ); + state.relationshipDoReplaceProperty( relId, propKey, Values.of( "" ), value ); // When state.accept( visitor ); // Then + DefinedProperty prop = DefinedProperty.stringProperty( propKey, "hello" ); assertThat(visitor.relPropertyChanges, contains( propChange( relId, noProperty, asList( prop ), noRemoved ) ) ); } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/coreapi/TxStateTransactionDataViewTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/coreapi/TxStateTransactionDataViewTest.java index bc325d9c1099f..61570b3e3ba60 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/coreapi/TxStateTransactionDataViewTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/coreapi/TxStateTransactionDataViewTest.java @@ -33,7 +33,6 @@ import org.neo4j.kernel.api.AssertOpen; import org.neo4j.kernel.api.KernelTransaction; import org.neo4j.kernel.api.Statement; -import org.neo4j.kernel.api.properties.DefinedProperty; import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.security.AccessMode; import org.neo4j.kernel.api.security.AnonymousContext; @@ -48,6 +47,11 @@ import org.neo4j.kernel.impl.core.ThreadToStatementContextBridge; import org.neo4j.kernel.impl.locking.Lock; import org.neo4j.storageengine.api.StoreReadLayer; +import org.neo4j.storageengine.api.txstate.NodeState; +import org.neo4j.storageengine.api.txstate.ReadableTransactionState; +import org.neo4j.storageengine.api.txstate.RelationshipState; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.equalTo; @@ -195,15 +199,15 @@ public void shouldListAddedNodePropertiesProperties() throws Exception { // Given int propertyKeyId = 1; - DefinedProperty prevProp = stringProperty( propertyKeyId, "prevValue" ); - state.nodeDoChangeProperty( 1L, prevProp, stringProperty( propertyKeyId, "newValue" ) ); + Value prevValue = Values.of( "prevValue" ); + state.nodeDoChangeProperty( 1L, propertyKeyId, prevValue, Values.of( "newValue" ) ); when( ops.propertyKeyGetName( propertyKeyId ) ).thenReturn( "theKey" ); long propertyId = 20L; when( storeStatement.acquireSingleNodeCursor( 1L ) ).thenReturn( asNodeCursor( 1L, propertyId, labels() ) ); when( storeStatement .acquireSinglePropertyCursor( propertyId, propertyKeyId, NO_LOCK, AssertOpen.ALWAYS_OPEN ) ) - .thenReturn( asPropertyCursor( prevProp ) ); + .thenReturn( asPropertyCursor( Property.property( propertyKeyId, prevValue.asPublic() ) ) ); // When Iterable> propertyEntries = snapshot().assignedNodeProperties(); @@ -221,15 +225,15 @@ public void shouldListRemovedNodeProperties() throws Exception { // Given int propertyKeyId = 1; - DefinedProperty prevProp = stringProperty( propertyKeyId, "prevValue" ); - state.nodeDoRemoveProperty( 1L, prevProp ); + Value prevValue = Values.of( "prevValue" ); + state.nodeDoRemoveProperty( 1L, propertyKeyId, prevValue ); when( ops.propertyKeyGetName( propertyKeyId ) ).thenReturn( "theKey" ); long propertyId = 20L; when( storeStatement.acquireSingleNodeCursor( 1L ) ).thenReturn( asNodeCursor( 1L, propertyId, labels() ) ); when( storeStatement .acquireSinglePropertyCursor( propertyId, propertyKeyId, NO_LOCK, AssertOpen.ALWAYS_OPEN ) ) - .thenReturn( asPropertyCursor( prevProp ) ); + .thenReturn( asPropertyCursor( Property.property( propertyKeyId, prevValue.asPublic() ) ) ); // When Iterable> propertyEntries = snapshot().removedNodeProperties(); @@ -246,15 +250,15 @@ public void shouldListRemovedRelationshipProperties() throws Exception { // Given int propertyKeyId = 1; - DefinedProperty prevValue = stringProperty( propertyKeyId, "prevValue" ); - state.relationshipDoRemoveProperty( 1L, prevValue ); + Value prevValue = Values.of( "prevValue" ); + state.relationshipDoRemoveProperty( 1L, propertyKeyId, prevValue ); when( ops.propertyKeyGetName( propertyKeyId ) ).thenReturn( "theKey" ); long propertyId = 40L; when( storeStatement.acquireSingleRelationshipCursor( 1 ) ) .thenReturn( asRelationshipCursor( 1, 0, 0, 0, propertyId ) ); when( storeStatement .acquireSinglePropertyCursor( propertyId, propertyKeyId, NO_LOCK, AssertOpen.ALWAYS_OPEN ) ) - .thenReturn( asPropertyCursor( prevValue ) ); + .thenReturn( asPropertyCursor( Property.property( propertyKeyId, prevValue.asPublic() ) ) ); // When Iterable> propertyEntries = snapshot().removedRelationshipProperties(); @@ -271,8 +275,8 @@ public void shouldListAddedRelationshipProperties() throws Exception { // Given int propertyKeyId = 1; - DefinedProperty prevProp = stringProperty( propertyKeyId, "prevValue" ); - state.relationshipDoReplaceProperty( 1L, prevProp, stringProperty( propertyKeyId, "newValue" ) ); + Value prevValue = Values.of( "prevValue" ); + state.relationshipDoReplaceProperty( 1L, propertyKeyId, prevValue, Values.of( "newValue" ) ); when( ops.propertyKeyGetName( propertyKeyId ) ).thenReturn( "theKey" ); long propertyId = 40L; @@ -280,7 +284,7 @@ public void shouldListAddedRelationshipProperties() throws Exception asRelationshipCursor( 1, 0, 0, 0, propertyId ) ); when( storeStatement .acquireSinglePropertyCursor( propertyId, propertyKeyId, NO_LOCK, AssertOpen.ALWAYS_OPEN ) ) - .thenReturn( asPropertyCursor( prevProp ) ); + .thenReturn( asPropertyCursor( Property.property( propertyKeyId, prevValue.asPublic() ) ) ); // When Iterable> propertyEntries = snapshot().assignedRelationshipProperties(); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/locking/IndexEntryResourceTypesTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/locking/IndexEntryResourceTypesTest.java index 4a2a59e25f990..92000fcdaa390 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/locking/IndexEntryResourceTypesTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/locking/IndexEntryResourceTypesTest.java @@ -28,6 +28,8 @@ import org.neo4j.helpers.collection.Iterables; import org.neo4j.kernel.api.schema.IndexQuery; import org.neo4j.kernel.api.schema.IndexQuery.ExactPredicate; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; @@ -38,7 +40,7 @@ public class IndexEntryResourceTypesTest public static final int labelId = 1; public static final int propertyId = 2; - public static final String value = "value"; + public static final Value value = Values.of( "value" ); @Test public void shouldProduceBackwardsCompatibleId() diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/locking/ResourceTypesIT.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/locking/ResourceTypesIT.java index 69e154f09ac92..1a181396a1d4c 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/locking/ResourceTypesIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/locking/ResourceTypesIT.java @@ -23,6 +23,7 @@ import org.neo4j.collection.primitive.Primitive; import org.neo4j.collection.primitive.PrimitiveLongLongMap; +import org.neo4j.values.Values; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/NeoStoresTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/NeoStoresTest.java index 19d19e23a814c..fe376fc53a216 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/store/NeoStoresTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/store/NeoStoresTest.java @@ -90,6 +90,8 @@ import org.neo4j.test.rule.PageCacheRule; import org.neo4j.test.rule.TestDirectory; import org.neo4j.test.rule.fs.EphemeralFileSystemRule; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static java.util.Collections.singletonMap; import static org.junit.Assert.assertArrayEquals; @@ -315,11 +317,11 @@ private DefinedProperty nodeAddProperty( long nodeId, int key, Object value ) if ( oldProperty == NO_SUCH_PROPERTY ) { - transaction.nodeDoAddProperty( nodeId, property ); + transaction.nodeDoAddProperty( nodeId, key, Values.of( value ) ); } else { - transaction.nodeDoChangeProperty( nodeId, oldProperty, property ); + transaction.nodeDoChangeProperty( nodeId, key, Values.of( oldProperty.value() ), Values.of( value ) ); } return property; } @@ -327,21 +329,21 @@ private DefinedProperty nodeAddProperty( long nodeId, int key, Object value ) private DefinedProperty relAddProperty( long relationshipId, int key, Object value ) { DefinedProperty property = Property.property( key, value ); - Property oldProperty = Property.noRelationshipProperty( relationshipId, key ); + Value oldValue = Values.NO_VALUE; try ( StorageStatement statement = storeLayer.newStatement(); Cursor cursor = statement.acquireSingleRelationshipCursor( relationshipId ) ) { if ( cursor.next() ) { - Property fetched = getProperty( key, statement, cursor.get().nextPropertyId() ); + DefinedProperty fetched = getProperty( key, statement, cursor.get().nextPropertyId() ); if ( fetched != null ) { - oldProperty = fetched; + oldValue = Values.of( fetched.value() ); } } } - transaction.relationshipDoReplaceProperty( relationshipId, oldProperty, property ); + transaction.relationshipDoReplaceProperty( relationshipId, key, oldValue, Values.of( value ) ); return property; } @@ -503,7 +505,7 @@ public void testProps1() throws Exception initializeStores( storeDir, stringMap() ); startTx(); DefinedProperty prop2 = nodeAddProperty( nodeId, prop.propertyKeyId(), 5 ); - transaction.nodeDoRemoveProperty( nodeId, prop2 ); + transaction.nodeDoRemoveProperty( nodeId, prop2.propertyKeyId(), Values.of( prop2.value() ) ); transaction.nodeDoDelete( nodeId ); commitTx(); ds.stop(); @@ -1313,7 +1315,7 @@ else if ( data.propertyKeyId() == prop3.propertyKeyId() ) assertEquals( "prop3", MyPropertyKeyToken.getIndexFor( keyId ).name() ); assertEquals( false, data.value() ); - transaction.relationshipDoRemoveProperty( rel, prop3 ); + transaction.relationshipDoRemoveProperty( rel, prop3.propertyKeyId(), Values.of( prop3.value() ) ); } else { @@ -1374,7 +1376,7 @@ else if ( data.propertyKeyId() == prop3.propertyKeyId() ) assertEquals( "prop3", MyPropertyKeyToken.getIndexFor( keyId ).name() ); assertEquals( true, data.value() ); - transaction.relationshipDoRemoveProperty( rel, prop3 ); + transaction.relationshipDoRemoveProperty( rel, prop3.propertyKeyId(), Values.of( prop3.value() ) ); } else { @@ -1440,7 +1442,7 @@ else if ( data.propertyKeyId() == prop3.propertyKeyId() ) assertEquals( "prop3", MyPropertyKeyToken.getIndexFor( keyId ).name() ); assertEquals( false, data.value() ); - transaction.nodeDoRemoveProperty( node, prop3 ); + transaction.nodeDoRemoveProperty( node, prop3.propertyKeyId(), Values.of( prop3.value() ) ); } else { @@ -1486,7 +1488,7 @@ else if ( data.propertyKeyId() == prop3.propertyKeyId() ) assertEquals( "prop3", MyPropertyKeyToken.getIndexFor( keyId ).name() ); assertEquals( true, data.value() ); - transaction.nodeDoRemoveProperty( node, prop3 ); + transaction.nodeDoRemoveProperty( node, prop3.propertyKeyId(), Values.of( prop3.value() ) ); } else { diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/command/IndexWorkSyncTransactionApplicationStressIT.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/command/IndexWorkSyncTransactionApplicationStressIT.java index beacec5cc0d71..deb1922464d65 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/command/IndexWorkSyncTransactionApplicationStressIT.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/command/IndexWorkSyncTransactionApplicationStressIT.java @@ -57,11 +57,12 @@ import org.neo4j.test.rule.TestDirectory; import org.neo4j.test.rule.fs.DefaultFileSystemRule; import org.neo4j.unsafe.impl.batchimport.cache.idmapping.string.Workers; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static java.util.Collections.singletonList; import static org.junit.Assert.assertEquals; import static org.neo4j.helpers.TimeUtil.parseTimeMillis; -import static org.neo4j.kernel.api.properties.Property.property; import static org.neo4j.kernel.impl.transaction.command.Commands.createIndexRule; import static org.neo4j.kernel.impl.transaction.command.Commands.transactionRepresentation; import static org.neo4j.kernel.impl.transaction.log.Commitment.NO_COMMITMENT; @@ -126,9 +127,9 @@ private void awaitOnline( IndexProxy index ) throws InterruptedException } } - private static Object propertyValue( int id, int progress ) + private static Value propertyValue( int id, int progress ) { - return id + "_" + progress; + return Values.of( id + "_" + progress ); } private static TransactionToApply tx( Collection commands ) @@ -192,7 +193,7 @@ private TransactionToApply createNodeAndProperty( int progress ) throws Exceptio long nodeId = nodeIds.nextId(); txState.nodeDoCreate( nodeId ); txState.nodeDoAddLabel( descriptor.getLabelId(), nodeId ); - txState.nodeDoAddProperty( nodeId, property( descriptor.getPropertyId(), propertyValue( id, progress ) ) ); + txState.nodeDoAddProperty( nodeId, descriptor.getPropertyId(), propertyValue( id, progress ) ); Collection commands = new ArrayList<>(); try ( StorageStatement statement = storageEngine.storeReadLayer().newStatement() ) { @@ -210,7 +211,7 @@ private void verifyIndex( TransactionToApply tx ) throws Exception { tx.transactionRepresentation().accept( visitor.clear() ); - Object propertyValue = propertyValue( id, base + i ); + Value propertyValue = propertyValue( id, base + i ); IndexQuery.ExactPredicate query = IndexQuery.exact( descriptor.getPropertyId(), propertyValue ); PrimitiveLongIterator hits = reader.query( query ); assertEquals( "Index doesn't contain " + visitor.nodeId + " " + propertyValue, diff --git a/community/lucene-index/src/test/java/org/neo4j/concurrencytest/ConstraintIndexConcurrencyTest.java b/community/lucene-index/src/test/java/org/neo4j/concurrencytest/ConstraintIndexConcurrencyTest.java index 52d74044d98e0..420c27e12b12d 100644 --- a/community/lucene-index/src/test/java/org/neo4j/concurrencytest/ConstraintIndexConcurrencyTest.java +++ b/community/lucene-index/src/test/java/org/neo4j/concurrencytest/ConstraintIndexConcurrencyTest.java @@ -39,11 +39,12 @@ import org.neo4j.test.rule.DatabaseRule; import org.neo4j.test.rule.ImpermanentDatabaseRule; import org.neo4j.test.rule.concurrent.ThreadingRule; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import static org.neo4j.graphdb.Label.label; -import static org.neo4j.kernel.api.properties.Property.property; public class ConstraintIndexConcurrencyTest { @@ -100,7 +101,7 @@ public void shouldNotAllowConcurrentViolationOfConstraint() throws Exception statement.dataWriteOperations().nodeAddLabel( node, labelId ); try { - statement.dataWriteOperations().nodeSetProperty( node, property( propertyKeyId, conflictingValue ) ); + statement.dataWriteOperations().nodeSetProperty( node, propertyKeyId, Values.of( conflictingValue ) ); fail( "exception expected" ); } diff --git a/community/lucene-index/src/test/java/org/neo4j/index/impl/lucene/legacy/NonUniqueIndexTest.java b/community/lucene-index/src/test/java/org/neo4j/index/impl/lucene/legacy/NonUniqueIndexTest.java index ae965aef4f979..a95c81a87ddb6 100644 --- a/community/lucene-index/src/test/java/org/neo4j/index/impl/lucene/legacy/NonUniqueIndexTest.java +++ b/community/lucene-index/src/test/java/org/neo4j/index/impl/lucene/legacy/NonUniqueIndexTest.java @@ -54,6 +54,7 @@ import org.neo4j.storageengine.api.schema.IndexReader; import org.neo4j.test.rule.TestDirectory; import org.neo4j.test.rule.fs.DefaultFileSystemRule; +import org.neo4j.values.Values; import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.equalTo; diff --git a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/DatabaseCompositeIndexAccessorTest.java b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/DatabaseCompositeIndexAccessorTest.java index f1035fc724736..7a7898c9f0f13 100644 --- a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/DatabaseCompositeIndexAccessorTest.java +++ b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/DatabaseCompositeIndexAccessorTest.java @@ -58,6 +58,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import static org.neo4j.helpers.collection.Iterators.asSet; +import static org.neo4j.kernel.api.schema.IndexQuery.exact; import static org.neo4j.test.rule.concurrent.ThreadingRule.waitingWhileIn; @RunWith( Parameterized.class ) @@ -152,7 +153,7 @@ public void indexReaderShouldSupportScan() throws Exception // THEN assertEquals( asSet( nodeId, nodeId2 ), PrimitiveLongCollections.toSet( results ) ); assertEquals( asSet( nodeId ), PrimitiveLongCollections.toSet( reader - .query( IndexQuery.exact( PROP_ID1, values[0] ), IndexQuery.exact( PROP_ID2, values[1] ) ) ) ); + .query( exact( PROP_ID1, values[0] ), exact( PROP_ID2, values[1] ) ) ) ); reader.close(); } @@ -167,13 +168,13 @@ public void multipleIndexReadersFromDifferentPointsInTimeCanSeeDifferentResults( // THEN assertEquals( asSet( nodeId ), PrimitiveLongCollections.toSet( firstReader - .query( IndexQuery.exact( PROP_ID1, values[0] ), IndexQuery.exact( PROP_ID2, values[1] ) ) ) ); + .query( exact( PROP_ID1, values[0] ), exact( PROP_ID2, values[1] ) ) ) ); assertEquals( asSet(), PrimitiveLongCollections.toSet( firstReader - .query( IndexQuery.exact( PROP_ID1, values2[0] ), IndexQuery.exact( PROP_ID2, values2[1] ) ) ) ); + .query( exact( PROP_ID1, values2[0] ), exact( PROP_ID2, values2[1] ) ) ) ); assertEquals( asSet( nodeId ), PrimitiveLongCollections.toSet( secondReader - .query( IndexQuery.exact( PROP_ID1, values[0] ), IndexQuery.exact( PROP_ID2, values[1] ) ) ) ); + .query( exact( PROP_ID1, values[0] ), exact( PROP_ID2, values[1] ) ) ) ); assertEquals( asSet( nodeId2 ), PrimitiveLongCollections.toSet( secondReader - .query( IndexQuery.exact( PROP_ID1, values2[0] ), IndexQuery.exact( PROP_ID2, values2[1] ) ) ) ); + .query( exact( PROP_ID1, values2[0] ), exact( PROP_ID2, values2[1] ) ) ) ); firstReader.close(); secondReader.close(); } @@ -187,7 +188,7 @@ public void canAddNewData() throws Exception // THEN assertEquals( asSet( nodeId ), PrimitiveLongCollections.toSet( reader - .query( IndexQuery.exact( PROP_ID1, values[0] ), IndexQuery.exact( PROP_ID2, values[1] ) ) ) ); + .query( exact( PROP_ID1, values[0] ), exact( PROP_ID2, values[1] ) ) ) ); reader.close(); } @@ -203,9 +204,9 @@ public void canChangeExistingData() throws Exception // THEN assertEquals( asSet( nodeId ), PrimitiveLongCollections.toSet( reader - .query( IndexQuery.exact( PROP_ID1, values2[0] ), IndexQuery.exact( PROP_ID2, values2[1] ) ) ) ); + .query( exact( PROP_ID1, values2[0] ), exact( PROP_ID2, values2[1] ) ) ) ); assertEquals( emptySet(), PrimitiveLongCollections.toSet( reader - .query( IndexQuery.exact( PROP_ID1, values[0] ), IndexQuery.exact( PROP_ID2, values[1] ) ) ) ); + .query( exact( PROP_ID1, values[0] ), exact( PROP_ID2, values[1] ) ) ) ); reader.close(); } @@ -221,9 +222,9 @@ public void canRemoveExistingData() throws Exception // THEN assertEquals( asSet( nodeId2 ), PrimitiveLongCollections.toSet( reader - .query( IndexQuery.exact( PROP_ID1, values2[0] ), IndexQuery.exact( PROP_ID2, values2[1] ) ) ) ); + .query( exact( PROP_ID1, values2[0] ), exact( PROP_ID2, values2[1] ) ) ) ); assertEquals( asSet(), PrimitiveLongCollections.toSet( reader - .query( IndexQuery.exact( PROP_ID1, values[0] ), IndexQuery.exact( PROP_ID2, values[1] ) ) ) ); + .query( exact( PROP_ID1, values[0] ), exact( PROP_ID2, values[1] ) ) ) ); reader.close(); } diff --git a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/DatabaseIndexAccessorTest.java b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/DatabaseIndexAccessorTest.java index b285c89186a00..cc956122e5007 100644 --- a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/DatabaseIndexAccessorTest.java +++ b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/DatabaseIndexAccessorTest.java @@ -155,7 +155,7 @@ public void indexReaderShouldSupportScan() throws Exception // THEN assertEquals( asSet( nodeId, nodeId2 ), PrimitiveLongCollections.toSet( results ) ); assertEquals( asSet( nodeId ), - PrimitiveLongCollections.toSet( reader.query( IndexQuery.exact( PROP_ID, value ) ) ) ); + PrimitiveLongCollections.toSet( reader.query( exact( PROP_ID, value ) ) ) ); reader.close(); } diff --git a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/reader/PartitionedIndexReaderTest.java b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/reader/PartitionedIndexReaderTest.java index 8a87f8874ca3f..56ac23e9d686c 100644 --- a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/reader/PartitionedIndexReaderTest.java +++ b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/reader/PartitionedIndexReaderTest.java @@ -39,6 +39,7 @@ import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingConfig; import org.neo4j.storageengine.api.schema.IndexSample; import org.neo4j.storageengine.api.schema.IndexSampler; +import org.neo4j.values.Values; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/reader/SimpleIndexReaderTest.java b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/reader/SimpleIndexReaderTest.java index b4f958f88ec47..527907f84c792 100644 --- a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/reader/SimpleIndexReaderTest.java +++ b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/reader/SimpleIndexReaderTest.java @@ -42,6 +42,7 @@ import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.impl.api.index.sampling.IndexSamplingConfig; import org.neo4j.storageengine.api.schema.IndexReader; +import org.neo4j.values.Values; import static org.hamcrest.Matchers.instanceOf; import static org.mockito.Matchers.any; diff --git a/community/values/pom.xml b/community/values/pom.xml index cbdd1e33f989d..98552ef6719a9 100644 --- a/community/values/pom.xml +++ b/community/values/pom.xml @@ -50,10 +50,6 @@ the relevant Commercial Agreement. - - com.google.code.findbugs - annotations - junit junit diff --git a/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/PropertyConstraintValidationIT.java b/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/PropertyConstraintValidationIT.java index 800d3f78be67d..0525c69550aa5 100644 --- a/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/PropertyConstraintValidationIT.java +++ b/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/PropertyConstraintValidationIT.java @@ -43,16 +43,16 @@ import org.neo4j.kernel.api.exceptions.KernelException; import org.neo4j.kernel.api.exceptions.Status; import org.neo4j.kernel.api.exceptions.TransactionFailureException; -import org.neo4j.kernel.api.properties.DefinedProperty; import org.neo4j.kernel.api.security.AnonymousContext; import org.neo4j.test.TestEnterpriseGraphDatabaseFactory; import org.neo4j.test.assertion.Assert; +import org.neo4j.values.Value; +import org.neo4j.values.Values; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; -import static org.neo4j.kernel.api.properties.Property.property; import static org.neo4j.kernel.api.schema.SchemaDescriptorFactory.forLabel; import static org.neo4j.kernel.api.schema.SchemaDescriptorFactory.forRelType; import static org.neo4j.kernel.impl.api.integrationtest.PropertyConstraintValidationIT.NodeKeyConstraintValidationIT; @@ -162,7 +162,7 @@ long createEntity( Statement statement, String property, String value ) throws E { long node = statement.dataWriteOperations().nodeCreate(); int propertyKey = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( property ); - statement.dataWriteOperations().nodeSetProperty( node, property( propertyKey, value ) ); + statement.dataWriteOperations().nodeSetProperty( node, propertyKey, Values.of( value ) ); return node; } @@ -171,7 +171,7 @@ long createEntity( Statement statement, String type, String property, String val { long node = createEntity( statement, type ); int propertyKey = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( property ); - statement.dataWriteOperations().nodeSetProperty( node, property( propertyKey, value ) ); + statement.dataWriteOperations().nodeSetProperty( node, propertyKey, Values.of( value ) ); return node; } @@ -183,7 +183,7 @@ long createConstraintAndEntity( String type, String property, String value ) thr long node = statement.dataWriteOperations().nodeCreate(); statement.dataWriteOperations().nodeAddLabel( node, label ); int propertyKey = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( property ); - statement.dataWriteOperations().nodeSetProperty( node, property( propertyKey, value ) ); + statement.dataWriteOperations().nodeSetProperty( node, propertyKey, Values.of( value ) ); commit(); createConstraint( type, property ); @@ -192,9 +192,9 @@ long createConstraintAndEntity( String type, String property, String value ) thr } @Override - void setProperty( DataWriteOperations writeOps, long entityId, DefinedProperty property ) throws Exception + void setProperty( DataWriteOperations writeOps, long entityId, int propertyKeyId, Value value ) throws Exception { - writeOps.nodeSetProperty( entityId, property ); + writeOps.nodeSetProperty( entityId, propertyKeyId, value ); } @Override @@ -248,7 +248,7 @@ long createEntity( Statement statement, String property, String value ) throws E long relationship = statement.dataWriteOperations().relationshipCreate( relType, start, end ); int propertyKey = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( property ); - statement.dataWriteOperations().relationshipSetProperty( relationship, property( propertyKey, value ) ); + statement.dataWriteOperations().relationshipSetProperty( relationship, propertyKey, Values.of( value ) ); return relationship; } @@ -257,7 +257,7 @@ long createEntity( Statement statement, String type, String property, String val { long relationship = createEntity( statement, type ); int propertyKey = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( property ); - statement.dataWriteOperations().relationshipSetProperty( relationship, property( propertyKey, value ) ); + statement.dataWriteOperations().relationshipSetProperty( relationship, propertyKey, Values.of( value ) ); return relationship; } @@ -270,7 +270,7 @@ long createConstraintAndEntity( String type, String property, String value ) thr long end = statement.dataWriteOperations().nodeCreate(); long relationship = statement.dataWriteOperations().relationshipCreate( relType, start, end ); int propertyKey = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( property ); - statement.dataWriteOperations().relationshipSetProperty( relationship, property( propertyKey, value ) ); + statement.dataWriteOperations().relationshipSetProperty( relationship, propertyKey, Values.of( value ) ); commit(); createConstraint( type, property ); @@ -279,9 +279,9 @@ long createConstraintAndEntity( String type, String property, String value ) thr } @Override - void setProperty( DataWriteOperations writeOps, long entityId, DefinedProperty property ) throws Exception + void setProperty( DataWriteOperations writeOps, long entityId, int propertyKeyId, Value value ) throws Exception { - writeOps.relationshipSetProperty( entityId, property ); + writeOps.relationshipSetProperty( entityId, propertyKeyId, value ); } @Override @@ -313,7 +313,7 @@ abstract long createEntity( Statement statement, String type, String property, S abstract long createConstraintAndEntity( String type, String property, String value ) throws Exception; - abstract void setProperty( DataWriteOperations writeOps, long entityId, DefinedProperty property ) + abstract void setProperty( DataWriteOperations writeOps, long entityId, int propertyKeyId, Value value ) throws Exception; abstract void removeProperty( DataWriteOperations writeOps, long entityId, int propertyKey ) throws Exception; @@ -386,7 +386,7 @@ public void shouldAllowTemporaryViolationsWithinTransactions() throws Exception int key = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "key1" ); //remove and put back removeProperty( statement.dataWriteOperations(), entity, key ); - setProperty( statement.dataWriteOperations(), entity, property( key, "value2" ) ); + setProperty( statement.dataWriteOperations(), entity, key, Values.of( "value2" ) ); commit(); } @@ -401,7 +401,7 @@ public void shouldAllowNoopPropertyUpdate() throws Exception // when int key = statement.tokenWriteOperations().propertyKeyGetOrCreateForName( "key1" ); - setProperty( statement.dataWriteOperations(), entity, property( key, "value1" ) ); + setProperty( statement.dataWriteOperations(), entity, key, Values.of( "value1" ) ); // then should not throw exception } diff --git a/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintCreationIT.java b/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintCreationIT.java index e9df355ef0abb..a9ba656e94552 100644 --- a/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintCreationIT.java +++ b/enterprise/kernel/src/test/java/org/neo4j/kernel/impl/api/integrationtest/UniquenessConstraintCreationIT.java @@ -38,7 +38,6 @@ import org.neo4j.kernel.api.exceptions.schema.CreateConstraintFailureException; import org.neo4j.kernel.api.exceptions.schema.DropConstraintFailureException; import org.neo4j.kernel.api.exceptions.schema.NoSuchConstraintException; -import org.neo4j.kernel.api.properties.Property; import org.neo4j.kernel.api.schema.LabelSchemaDescriptor; import org.neo4j.kernel.api.schema.SchemaDescriptorFactory; import org.neo4j.kernel.api.schema.constaints.ConstraintDescriptor; @@ -53,6 +52,7 @@ import org.neo4j.kernel.impl.store.SchemaStorage; import org.neo4j.kernel.impl.store.record.ConstraintRule; import org.neo4j.kernel.impl.store.record.IndexRule; +import org.neo4j.values.Values; import static java.util.Collections.emptySet; import static org.hamcrest.Matchers.instanceOf; @@ -139,12 +139,12 @@ public void shouldAbortConstraintCreationWhenDuplicatesExist() throws Exception long node1 = statement.dataWriteOperations().nodeCreate(); statement.dataWriteOperations().nodeAddLabel( node1, foo ); - statement.dataWriteOperations().nodeSetProperty( node1, Property.stringProperty( name, "foo" ) ); + statement.dataWriteOperations().nodeSetProperty( node1, name, Values.of( "foo" ) ); long node2 = statement.dataWriteOperations().nodeCreate(); statement.dataWriteOperations().nodeAddLabel( node2, foo ); - statement.dataWriteOperations().nodeSetProperty( node2, Property.stringProperty( name, "foo" ) ); + statement.dataWriteOperations().nodeSetProperty( node2, name, Values.of( "foo" ) ); commit(); // when