Skip to content

Commit

Permalink
Properly format node key constraints
Browse files Browse the repository at this point in the history
  • Loading branch information
pontusmelke committed Sep 27, 2018
1 parent a44e1ef commit ae3f1e3
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 9 deletions.
Expand Up @@ -52,11 +52,16 @@ public String prettyPrint( TokenNameLookup tokenNameLookup )
{
String labelName = escapeLabelOrRelTyp( tokenNameLookup.labelGetName( schema.getLabelId() ) );
String nodeName = labelName.toLowerCase();
String properties = SchemaUtil.niceProperties( tokenNameLookup, schema.getPropertyIds(), nodeName + ".",
schema().getPropertyIds().length > 1 );
return String.format( "CONSTRAINT ON ( %s:%s ) ASSERT %s IS %s", nodeName, labelName, properties,

return String.format( "CONSTRAINT ON ( %s:%s ) ASSERT %s IS %s", nodeName, labelName,
formatProperties( schema.getPropertyIds(), tokenNameLookup, nodeName ),
constraintTypeText() );
}

protected abstract String constraintTypeText();

protected String formatProperties( int[] propertyIds, TokenNameLookup tokenNameLookup, String nodeName )
{
return SchemaUtil.niceProperties( tokenNameLookup, propertyIds, nodeName + ".", propertyIds.length > 1 );
}
}
Expand Up @@ -20,7 +20,9 @@
package org.neo4j.kernel.api.schema.constraints;


import org.neo4j.internal.kernel.api.TokenNameLookup;
import org.neo4j.internal.kernel.api.schema.LabelSchemaDescriptor;
import org.neo4j.internal.kernel.api.schema.SchemaUtil;

public class NodeKeyConstraintDescriptor extends IndexBackedConstraintDescriptor
{
Expand All @@ -34,4 +36,9 @@ protected String constraintTypeText()
{
return "NODE KEY";
}

protected String formatProperties( int[] propertyIds, TokenNameLookup tokenNameLookup, String nodeName )
{
return SchemaUtil.niceProperties( tokenNameLookup, propertyIds, nodeName + ".", true );
}
}
Expand Up @@ -48,7 +48,7 @@ public ConstraintType getConstraintType()
@Override
public String toString()
{
return format( "ON (%1$s:%2$s) ASSERT %3$s IS NODE KEY",
return format( "ON (%1$s:%2$s) ASSERT (%3$s) IS NODE KEY",
label.name().toLowerCase(), label.name(), propertyText() );
}
}
Expand Up @@ -24,6 +24,7 @@
import org.junit.Test;
import org.mockito.stubbing.Answer;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
Expand Down Expand Up @@ -180,12 +181,14 @@ public void shouldListConstraints() throws Throwable
// Given
givenUniqueConstraint( "User", "name" );
givenNodePropExistenceConstraint( "User", "name" );

givenNodeKeys( "User", "name" );
// When/Then
assertThat( call( "db.constraints" ),
contains(
containsInAnyOrder(
record( "CONSTRAINT ON ( user:User ) ASSERT exists(user.name)" ),
record( "CONSTRAINT ON ( user:User ) ASSERT user.name IS UNIQUE" ) ) );
record( "CONSTRAINT ON ( user:User ) ASSERT user.name IS UNIQUE" ),
record( "CONSTRAINT ON ( user:User ) ASSERT (user.name) IS NODE KEY" )
) );
}

@Test
Expand Down Expand Up @@ -454,6 +457,18 @@ private void givenNodePropExistenceConstraint( String label, String propKey )
constraints.add( ConstraintDescriptorFactory.existsForLabel( labelId, propId ) );
}

private void givenNodeKeys( String label, String...props )
{
int labelId = token( label, labels );
int[] propIds = new int[props.length];
for ( int i = 0; i < propIds.length; i++ )
{
propIds[i] = token( props[i], propKeys );
}

constraints.add( ConstraintDescriptorFactory.nodeKeyForLabel( labelId, propIds ) );
}

private void givenPropertyKeys( String... keys )
{
for ( String key : keys )
Expand Down
Expand Up @@ -190,7 +190,7 @@ class CompositeNodeKeyConstraintAcceptanceTest extends ExecutionEngineFunSuite w
failWithError(
Configs.AbsolutelyAll - Configs.Before3_3AndRule,
"CREATE CONSTRAINT ON (person:Person) ASSERT (person.name) IS NODE KEY",
List(("Unable to create CONSTRAINT ON ( person:Person ) ASSERT person.name IS NODE KEY:%s" +
List(("Unable to create CONSTRAINT ON ( person:Person ) ASSERT (person.name) IS NODE KEY:%s" +
"Both Node(%d) and Node(%d) have the label `Person` and property `name` = 'A'").format(String.format("%n"), a, b))
)
}
Expand Down
Expand Up @@ -154,7 +154,7 @@ public void shouldHaveCorrectIndentationsInSchemaListing() throws Exception
" ON :Person\\(surname\\) ONLINE \\(for uniqueness constraint\\)",
"Constraints",
" ON \\(person:Person\\) ASSERT person.name IS UNIQUE",
" ON \\(person:Person\\) ASSERT person.surname IS NODE KEY",
" ON \\(person:Person\\) ASSERT \\(person.surname\\) IS NODE KEY",
" ON \\(person:Person\\) ASSERT exists\\(person.name\\)",
" ON \\(\\)-\\[knows:KNOWS\\]-\\(\\) ASSERT exists\\(knows.since\\)" );
}
Expand Down

0 comments on commit ae3f1e3

Please sign in to comment.