diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/schema/IndexDefinitionImpl.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/schema/IndexDefinitionImpl.java index 03ddbc11e6625..7d97640f2f7db 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/schema/IndexDefinitionImpl.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/schema/IndexDefinitionImpl.java @@ -39,15 +39,21 @@ public class IndexDefinitionImpl implements IndexDefinition private final String[] propertyKeys; private final boolean constraintIndex; - public IndexDefinitionImpl( InternalSchemaActions actions, Label label, String[] propertyKeys, boolean constraintIndex ) // TODO remove this constructor + public IndexDefinitionImpl( InternalSchemaActions actions, Label[] labels, String[] propertyKeys, boolean constraintIndex ) { - this( actions, new Label[]{label}, null, propertyKeys, constraintIndex ); + this.actions = actions; + this.labels = labels; + this.relTypes = null; + this.propertyKeys = propertyKeys; + this.constraintIndex = constraintIndex; + + assertInUnterminatedTransaction(); } - public IndexDefinitionImpl( InternalSchemaActions actions, Label[] labels, RelationshipType[] relTypes, String[] propertyKeys, boolean constraintIndex ) + public IndexDefinitionImpl( InternalSchemaActions actions, RelationshipType[] relTypes, String[] propertyKeys, boolean constraintIndex ) { this.actions = actions; - this.labels = labels; + this.labels = null; this.relTypes = relTypes; this.propertyKeys = propertyKeys; this.constraintIndex = constraintIndex; diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/schema/NodePropertyUniqueConstraintCreator.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/schema/NodePropertyUniqueConstraintCreator.java index 694377c0f3ffa..bc81c49197232 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/schema/NodePropertyUniqueConstraintCreator.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/schema/NodePropertyUniqueConstraintCreator.java @@ -46,8 +46,7 @@ public final ConstraintDefinition create() assertInUnterminatedTransaction(); IndexDefinitionImpl definition = - new IndexDefinitionImpl( actions, label, propertyKeys.toArray( new String[propertyKeys.size()] ), - true ); + new IndexDefinitionImpl( actions, new Label[]{label}, propertyKeys.toArray( new String[0] ), true ); return actions.createPropertyUniquenessConstraint( definition ); } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/schema/SchemaImpl.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/schema/SchemaImpl.java index e6501366e92f6..92edfa628e326 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/schema/SchemaImpl.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/schema/SchemaImpl.java @@ -148,31 +148,27 @@ private IndexDefinition descriptorToDefinition( final TokenRead tokenRead, Index { SchemaDescriptor schema = index.schema(); int[] entityTokenIds = schema.getEntityTokenIds(); - Label[] labels = null; - RelationshipType[] relTypes = null; + boolean constraintIndex = index.isUnique(); + String[] propertyNames = PropertyNameUtils.getPropertyKeys( tokenRead, index.properties() ); switch ( schema.entityType() ) { case NODE: - labels = new Label[entityTokenIds.length]; + Label[] labels = new Label[entityTokenIds.length]; for ( int i = 0; i < labels.length; i++ ) { labels[i] = label( tokenRead.nodeLabelName( entityTokenIds[i] ) ); } - break; + return new IndexDefinitionImpl( actions, labels, propertyNames, constraintIndex ); case RELATIONSHIP: - relTypes = new RelationshipType[entityTokenIds.length]; + RelationshipType[] relTypes = new RelationshipType[entityTokenIds.length]; for ( int i = 0; i < relTypes.length; i++ ) { relTypes[i] = withName( tokenRead.relationshipTypeName( entityTokenIds[i] ) ); } - break; + return new IndexDefinitionImpl( actions, relTypes, propertyNames, constraintIndex ); default: throw new IllegalArgumentException( "Cannot create IndexDefinition for " + schema.entityType() + " entity-typed schema." ); } - - boolean constraintIndex = index.isUnique(); - String[] propertyNames = PropertyNameUtils.getPropertyKeys( tokenRead, index.properties() ); - return new IndexDefinitionImpl( actions, labels, relTypes, propertyNames, constraintIndex ); } catch ( KernelException e ) { @@ -475,22 +471,24 @@ private ConstraintDefinition asConstraintDefinition( ConstraintDescriptor constr constraint instanceof UniquenessConstraintDescriptor ) { SchemaDescriptor schemaDescriptor = constraint.schema(); - Label label = Label.label( lookup.labelGetName( schemaDescriptor.keyId() ) ); - String[] propertyKeys = Arrays.stream( schemaDescriptor.getPropertyIds() ) - .mapToObj( lookup::propertyKeyGetName ).toArray( String[]::new ); + int[] entityTokenIds = schemaDescriptor.getEntityTokenIds(); + Label[] labels = new Label[entityTokenIds.length]; + for ( int i = 0; i < entityTokenIds.length; i++ ) + { + labels[i] = Label.label( lookup.labelGetName( entityTokenIds[i] ) ); + } + String[] propertyKeys = Arrays.stream( schemaDescriptor.getPropertyIds() ).mapToObj( lookup::propertyKeyGetName ).toArray( String[]::new ); if ( constraint instanceof NodeExistenceConstraintDescriptor ) { - return new NodePropertyExistenceConstraintDefinition( actions, label, propertyKeys ); + return new NodePropertyExistenceConstraintDefinition( actions, labels[0], propertyKeys ); } else if ( constraint instanceof UniquenessConstraintDescriptor ) { - return new UniquenessConstraintDefinition( actions, new IndexDefinitionImpl( actions, label, - propertyKeys, true ) ); + return new UniquenessConstraintDefinition( actions, new IndexDefinitionImpl( actions, labels, propertyKeys, true ) ); } else { - return new NodeKeyConstraintDefinition( actions, new IndexDefinitionImpl( actions, label, - propertyKeys, true ) ); + return new NodeKeyConstraintDefinition( actions, new IndexDefinitionImpl( actions, labels, propertyKeys, true ) ); } } else if ( constraint instanceof RelExistenceConstraintDescriptor ) @@ -532,7 +530,7 @@ public IndexDefinition createIndexDefinition( Label label, String... propertyKey { try { - IndexDefinition indexDefinition = new IndexDefinitionImpl( this, label, propertyKeys, false ); + IndexDefinition indexDefinition = new IndexDefinitionImpl( this, new Label[]{label}, propertyKeys, false ); TokenWrite tokenWrite = transaction.tokenWrite(); int labelId = tokenWrite.labelGetOrCreateForName( indexDefinition.getLabel().name() ); int[] propertyKeyIds = getOrCreatePropertyKeyIds( tokenWrite, indexDefinition ); diff --git a/community/kernel/src/main/java/org/neo4j/unsafe/batchinsert/internal/BatchInserterImpl.java b/community/kernel/src/main/java/org/neo4j/unsafe/batchinsert/internal/BatchInserterImpl.java index 3fb254c217528..a8bfa6b3e0421 100644 --- a/community/kernel/src/main/java/org/neo4j/unsafe/batchinsert/internal/BatchInserterImpl.java +++ b/community/kernel/src/main/java/org/neo4j/unsafe/batchinsert/internal/BatchInserterImpl.java @@ -1118,7 +1118,7 @@ public IndexDefinition createIndexDefinition( Label label, String... propertyKey validateIndexCanBeCreated( labelId, propertyKeyIds ); createIndex( labelId, propertyKeyIds ); - return new IndexDefinitionImpl( this, label, propertyKeys, false ); + return new IndexDefinitionImpl( this, new Label[]{label}, propertyKeys, false ); } @Override diff --git a/enterprise/kernel/src/test/java/org/neo4j/graphdb/SchemaWithPECAcceptanceTest.java b/enterprise/kernel/src/test/java/org/neo4j/graphdb/SchemaWithPECAcceptanceTest.java index bcc9032b3fa93..9b246fc714cdc 100644 --- a/enterprise/kernel/src/test/java/org/neo4j/graphdb/SchemaWithPECAcceptanceTest.java +++ b/enterprise/kernel/src/test/java/org/neo4j/graphdb/SchemaWithPECAcceptanceTest.java @@ -134,7 +134,7 @@ private ConstraintDefinition createUniquenessConstraint( Label label, String pro SchemaHelper.createUniquenessConstraint( db, label, propertyKey ); SchemaHelper.awaitIndexes( db ); InternalSchemaActions actions = mock( InternalSchemaActions.class ); - IndexDefinition index = new IndexDefinitionImpl( actions, label, new String[]{propertyKey}, true ); + IndexDefinition index = new IndexDefinitionImpl( actions, new Label[]{label}, new String[]{propertyKey}, true ); return new UniquenessConstraintDefinition( actions, index ); } @@ -143,7 +143,7 @@ private ConstraintDefinition createNodeKeyConstraint( Label label, String proper SchemaHelper.createNodeKeyConstraint( db, label, propertyKey ); SchemaHelper.awaitIndexes( db ); InternalSchemaActions actions = mock( InternalSchemaActions.class ); - IndexDefinition index = new IndexDefinitionImpl( actions, label, new String[]{propertyKey}, true ); + IndexDefinition index = new IndexDefinitionImpl( actions, new Label[]{label}, new String[]{propertyKey}, true ); return new NodeKeyConstraintDefinition( actions, index ); }