Skip to content

Commit

Permalink
Fix NodeKeyConstraint bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
pontusmelke committed Mar 14, 2018
1 parent 1eb9014 commit 511da14
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 7 deletions.
Expand Up @@ -56,7 +56,7 @@ import org.neo4j.kernel.api.schema.index.SchemaIndexDescriptorFactory
import org.neo4j.kernel.guard.TerminationGuard import org.neo4j.kernel.guard.TerminationGuard
import org.neo4j.kernel.impl.api.RelationshipVisitor import org.neo4j.kernel.impl.api.RelationshipVisitor
import org.neo4j.kernel.impl.api.operations.KeyReadOperations import org.neo4j.kernel.impl.api.operations.KeyReadOperations
import org.neo4j.kernel.impl.api.store.RelationshipIterator import org.neo4j.kernel.impl.api.store.{DefaultCapableIndexReference, RelationshipIterator}
import org.neo4j.kernel.impl.core.{EmbeddedProxySPI, ThreadToStatementContextBridge} import org.neo4j.kernel.impl.core.{EmbeddedProxySPI, ThreadToStatementContextBridge}
import org.neo4j.kernel.impl.coreapi.PropertyContainerLocker import org.neo4j.kernel.impl.coreapi.PropertyContainerLocker
import org.neo4j.kernel.impl.query.Neo4jTransactionalContext import org.neo4j.kernel.impl.query.Neo4jTransactionalContext
Expand Down Expand Up @@ -814,7 +814,8 @@ sealed class TransactionBoundQueryContext(val transactionalContext: Transactiona


override def dropIndexRule(descriptor: IndexDescriptor): Unit = override def dropIndexRule(descriptor: IndexDescriptor): Unit =
transactionalContext.kernelTransaction.schemaWrite().indexDrop( transactionalContext.kernelTransaction.schemaWrite().indexDrop(
transactionalContext.kernelTransaction.schemaRead().index(descriptor.label, descriptor.properties.map(_.id):_*) new DefaultCapableIndexReference(false, IndexCapability.NO_CAPABILITY, null, descriptor.label,
descriptor.properties.map(_.id):_*)
) )


override def createNodeKeyConstraint(descriptor: IndexDescriptor): Boolean = try { override def createNodeKeyConstraint(descriptor: IndexDescriptor): Boolean = try {
Expand Down
Expand Up @@ -369,7 +369,7 @@ private CapableIndexReference getOrCreateUniquenessConstraintIndex( SchemaRead s
TokenRead tokenRead, LabelSchemaDescriptor schema ) TokenRead tokenRead, LabelSchemaDescriptor schema )
throws SchemaKernelException, IndexNotFoundKernelException throws SchemaKernelException, IndexNotFoundKernelException
{ {
CapableIndexReference descriptor = schemaRead.index( schema.getLabelId(), schema.getPropertyId() ); CapableIndexReference descriptor = schemaRead.index( schema.getLabelId(), schema.getPropertyIds() );
if ( descriptor != CapableIndexReference.NO_INDEX ) if ( descriptor != CapableIndexReference.NO_INDEX )
{ {
if ( descriptor.isUnique() ) if ( descriptor.isUnique() )
Expand Down
Expand Up @@ -59,7 +59,7 @@ public void validateNodePropertyExistenceConstraint( Iterator<Cursor<NodeItem>>
public void validateNodeKeyConstraint( NodeLabelIndexCursor allNodes, NodeCursor nodeCursor, public void validateNodeKeyConstraint( NodeLabelIndexCursor allNodes, NodeCursor nodeCursor,
PropertyCursor propertyCursor, LabelSchemaDescriptor descriptor ) throws CreateConstraintFailureException PropertyCursor propertyCursor, LabelSchemaDescriptor descriptor ) throws CreateConstraintFailureException
{ {
throw propertyExistenceConstraintsNotAllowed( descriptor ); throw nodeKeyConstraintsNotAllowed( descriptor );
} }


@Override @Override
Expand Down
Expand Up @@ -73,6 +73,7 @@
import org.neo4j.kernel.api.explicitindex.AutoIndexing; import org.neo4j.kernel.api.explicitindex.AutoIndexing;
import org.neo4j.kernel.api.schema.constaints.ConstraintDescriptorFactory; import org.neo4j.kernel.api.schema.constaints.ConstraintDescriptorFactory;
import org.neo4j.kernel.api.schema.constaints.IndexBackedConstraintDescriptor; import org.neo4j.kernel.api.schema.constaints.IndexBackedConstraintDescriptor;
import org.neo4j.kernel.api.schema.constaints.NodeKeyConstraintDescriptor;
import org.neo4j.kernel.api.schema.constaints.UniquenessConstraintDescriptor; import org.neo4j.kernel.api.schema.constaints.UniquenessConstraintDescriptor;
import org.neo4j.kernel.api.schema.index.SchemaIndexDescriptor; import org.neo4j.kernel.api.schema.index.SchemaIndexDescriptor;
import org.neo4j.kernel.api.schema.index.SchemaIndexDescriptorFactory; import org.neo4j.kernel.api.schema.index.SchemaIndexDescriptorFactory;
Expand Down Expand Up @@ -853,8 +854,10 @@ public ConstraintDescriptor nodeKeyConstraintCreate( LabelSchemaDescriptor descr


//Check data integrity //Check data integrity
assertValidDescriptor( descriptor, SchemaKernelException.OperationContext.CONSTRAINT_CREATION ); assertValidDescriptor( descriptor, SchemaKernelException.OperationContext.CONSTRAINT_CREATION );
ConstraintDescriptor constraint = ConstraintDescriptorFactory.existsForSchema( descriptor ); NodeKeyConstraintDescriptor constraint = ConstraintDescriptorFactory.nodeKeyForSchema( descriptor );
assertConstraintDoesNotExist( constraint ); assertConstraintDoesNotExist( constraint );
// It is not allowed to create node key constraints on indexed label/property pairs
assertIndexDoesNotExist( SchemaKernelException.OperationContext.CONSTRAINT_CREATION, descriptor );


//enforce constraints //enforce constraints
try ( NodeLabelIndexCursor nodes = cursors.allocateNodeLabelIndexCursor() ) try ( NodeLabelIndexCursor nodes = cursors.allocateNodeLabelIndexCursor() )
Expand All @@ -864,9 +867,8 @@ public ConstraintDescriptor nodeKeyConstraintCreate( LabelSchemaDescriptor descr
} }


//create constraint //create constraint
ktx.txState().constraintDoAdd( constraint ); indexBackedConstraintCreate( constraint );
return constraint; return constraint;

} }


@Override @Override
Expand Down

0 comments on commit 511da14

Please sign in to comment.