Skip to content

Commit

Permalink
Return list of property value types instead of inferring common type
Browse files Browse the repository at this point in the history
  • Loading branch information
SaschaPeukert committed Jul 26, 2018
1 parent 4a2b3bc commit d414f3e
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 344 deletions.
Expand Up @@ -76,11 +76,11 @@ public void testSchemaTableWithNodes() throws Throwable

// Then
assertThat( asList( stream ), containsInAnyOrder(
equalTo( new Object[]{"Node", Arrays.asList( "A", "B" ), "prop1", "STRING"} ),
equalTo( new Object[]{"Node", Arrays.asList( "A", "B" ), "prop2", "INTEGER"} ),
equalTo( new Object[]{"Node", Arrays.asList( "B" ), "prop1", "BOOLEAN"} ),
equalTo( new Object[]{"Node", Arrays.asList( "C" ), "prop1", "STRINGARRAY"} ),
equalTo( new Object[]{"Node", Arrays.asList(), null, null} )) );
equalTo( new Object[]{"Node", Arrays.asList( "A", "B" ), "prop1", Arrays.asList( "String" ), false} ),
equalTo( new Object[]{"Node", Arrays.asList( "A", "B" ), "prop2", Arrays.asList( "Integer" ), false} ),
equalTo( new Object[]{"Node", Arrays.asList( "B" ), "prop1", Arrays.asList( "Boolean" ), false} ),
equalTo( new Object[]{"Node", Arrays.asList( "C" ), "prop1", Arrays.asList( "StringArray" ), false} ),
equalTo( new Object[]{"Node", Arrays.asList(), null, null, true} )) );

// printStream( stream );
}
Expand Down Expand Up @@ -110,7 +110,7 @@ public void testSchemaTableWithSimilarNodes() throws Throwable

// Then
assertThat( asList( stream ), contains(
equalTo( new Object[]{"Node", Arrays.asList("A"), "prop1", "STRING"} )) );
equalTo( new Object[]{"Node", Arrays.asList("A"), "prop1", Arrays.asList( "String" ), false} )) );

// printStream( stream );
}
Expand Down Expand Up @@ -145,9 +145,9 @@ public void testSchemaTableWithSimilarNodesHavingDifferentPropertyValueTypes() t

// Then
assertThat( asList( stream ), containsInAnyOrder(
equalTo( new Object[]{"Node", Arrays.asList(), "prop1", "STRING"} ),
equalTo( new Object[]{"Node", Arrays.asList(), "prop2", "NUMBER"} ),
equalTo( new Object[]{"Node", Arrays.asList(), "prop3", "ANY"} ) ) );
equalTo( new Object[]{"Node", Arrays.asList(), "prop1", Arrays.asList( "String" ), false} ),
equalTo( new Object[]{"Node", Arrays.asList(), "prop2", Arrays.asList( "Integer", "Float" ), false} ),
equalTo( new Object[]{"Node", Arrays.asList(), "prop3", Arrays.asList( "String", "Boolean" ), false} ) ) );

// printStream( stream );
}
Expand Down Expand Up @@ -182,11 +182,12 @@ public void testSchemaTableWithRelationships() throws Throwable
procs().procedureCallRead( procs().procedureGet( procedureName( "db", "propertySchema" ) ).id(), new Object[0] );

// Then
assertThat( asList( stream ), containsInAnyOrder( equalTo( new Object[]{"Relationship", Arrays.asList( "R" ), "prop1", "STRING"} ),
equalTo( new Object[]{"Relationship", Arrays.asList( "R" ), "prop2", "INTEGER"} ),
equalTo( new Object[]{"Relationship", Arrays.asList( "X" ), "prop1", "BOOLEAN"} ),
equalTo( new Object[]{"Relationship", Arrays.asList( "Z" ), null, null} ),
equalTo( new Object[]{"Node", Arrays.asList(), null, null} ) ) );
assertThat( asList( stream ), containsInAnyOrder(
equalTo( new Object[]{"Relationship", Arrays.asList( "R" ), "prop1", Arrays.asList( "String" ), false} ),
equalTo( new Object[]{"Relationship", Arrays.asList( "R" ), "prop2", Arrays.asList( "Integer" ), false} ),
equalTo( new Object[]{"Relationship", Arrays.asList( "X" ), "prop1", Arrays.asList( "Boolean" ), false} ),
equalTo( new Object[]{"Relationship", Arrays.asList( "Z" ), null, null, true} ),
equalTo( new Object[]{"Node", Arrays.asList(), null, null, true} ) ) );

// printStream( stream );
}
Expand Down Expand Up @@ -216,8 +217,8 @@ public void testSchemaTableWithSimilarRelationships() throws Throwable

// Then
assertThat( asList( stream ), containsInAnyOrder(
equalTo( new Object[]{"Relationship", Arrays.asList( "R" ), "prop1", "STRING"} ),
equalTo( new Object[]{"Node", Arrays.asList(), null, null} ) ) );
equalTo( new Object[]{"Relationship", Arrays.asList( "R" ), "prop1", Arrays.asList( "String" ), false} ),
equalTo( new Object[]{"Node", Arrays.asList(), null, null, true} ) ) );

//printStream( stream );
}
Expand Down Expand Up @@ -255,10 +256,10 @@ public void testSchemaTableWithSimilarRelationshipsHavingDifferentPropertyValueT

// Then
assertThat( asList( stream ), containsInAnyOrder(
equalTo( new Object[]{"Node", Arrays.asList(), null, null} ),
equalTo( new Object[]{"Relationship", Arrays.asList( "R" ), "prop1", "STRING?"} ),
equalTo( new Object[]{"Relationship", Arrays.asList( "R" ), "prop2", "NUMBER?"} ),
equalTo( new Object[]{"Relationship", Arrays.asList( "R" ), "prop3", "ANY?"} ) ) );
equalTo( new Object[]{"Node", Arrays.asList(), null, null, true} ),
equalTo( new Object[]{"Relationship", Arrays.asList( "R" ), "prop1", Arrays.asList( "String" ), true} ),
equalTo( new Object[]{"Relationship", Arrays.asList( "R" ), "prop2", Arrays.asList( "Integer", "Float" ), true} ),
equalTo( new Object[]{"Relationship", Arrays.asList( "R" ), "prop3", Arrays.asList( "String", "Boolean" ), true} ) ) );

//printStream( stream );
}
Expand Down Expand Up @@ -309,115 +310,15 @@ public void testSchemaTableWithNullableProperties() throws Throwable

// Then
assertThat( asList( stream ), containsInAnyOrder(
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop1", "STRING"} ),
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop2", "INTEGER?"} ),
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop3", "BOOLEAN?"} ),
equalTo( new Object[]{"Node", Arrays.asList( "B" ), "prop1", "STRING?"} ),
equalTo( new Object[]{"Node", Arrays.asList( "B" ), "prop2", "INTEGER?"} ) ) );

//printStream( stream );
}

@Test
public void testSchemaTablesValueStatusUpgradeForNumbers() throws Throwable
{
// Given (not valid cypher)

// Node1: (:A{prop1:(long), prop2: (float), prop3:(long), prop4:(long)})
// Node2: (:A{prop1:(int),prop2: (double), prop3:(float), prop4:(string)})
// Node3: (:A{prop1:(byte)})
// Node4: (:A{prop1:(short)})

Transaction transaction = newTransaction( AnonymousContext.writeToken() );
long nodeId1 = transaction.dataWrite().nodeCreate();
long nodeId2 = transaction.dataWrite().nodeCreate();
long nodeId3 = transaction.dataWrite().nodeCreate();
long nodeId4 = transaction.dataWrite().nodeCreate();
int labelA = transaction.tokenWrite().labelGetOrCreateForName( "A" );
transaction.dataWrite().nodeAddLabel( nodeId1, labelA );
transaction.dataWrite().nodeAddLabel( nodeId2, labelA );
transaction.dataWrite().nodeAddLabel( nodeId3, labelA );
transaction.dataWrite().nodeAddLabel( nodeId4, labelA );
int prop1 = transaction.tokenWrite().propertyKeyGetOrCreateForName( "prop1" );
int prop2 = transaction.tokenWrite().propertyKeyGetOrCreateForName( "prop2" );
int prop3 = transaction.tokenWrite().propertyKeyGetOrCreateForName( "prop3" );
int prop4 = transaction.tokenWrite().propertyKeyGetOrCreateForName( "prop4" );
transaction.dataWrite().nodeSetProperty( nodeId1, prop1, Values.longValue( 1 ) );
transaction.dataWrite().nodeSetProperty( nodeId2, prop1, Values.intValue( 1 ) );
transaction.dataWrite().nodeSetProperty( nodeId3, prop1, Values.byteValue( (byte) 1 ) );
transaction.dataWrite().nodeSetProperty( nodeId4, prop1, Values.shortValue( (short) 1 ) );
transaction.dataWrite().nodeSetProperty( nodeId1, prop2, Values.floatValue( 2.1f ) );
transaction.dataWrite().nodeSetProperty( nodeId2, prop2, Values.doubleValue( 2.1d ) );
transaction.dataWrite().nodeSetProperty( nodeId1, prop3, Values.longValue( 1 ) );
transaction.dataWrite().nodeSetProperty( nodeId2, prop3, Values.floatValue( 2.1f ) );
transaction.dataWrite().nodeSetProperty( nodeId1, prop4, Values.longValue( 1 ) );
transaction.dataWrite().nodeSetProperty( nodeId2, prop4, Values.stringValue( "Text" ) );
commit();

// When
RawIterator<Object[],ProcedureException> stream =
procs().procedureCallRead( procs().procedureGet( procedureName( "db", "propertySchema" ) ).id(), new Object[0] );

// Then
assertThat( asList( stream ), containsInAnyOrder(
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop1", "INTEGRAL"} ),
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop2", "FLOATINGPOINT?"} ),
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop3", "NUMBER?"} ),
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop4", "ANY?"} ) ) );
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop1", Arrays.asList( "String" ), false} ),
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop2", Arrays.asList( "Integer" ), true} ),
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop3", Arrays.asList( "Boolean" ), true} ),
equalTo( new Object[]{"Node", Arrays.asList( "B" ), "prop1", Arrays.asList( "String" ), true} ),
equalTo( new Object[]{"Node", Arrays.asList( "B" ), "prop2", Arrays.asList( "Integer" ), true} ) ) );

//printStream( stream );
}

@Test
public void testSchemaTablesValueStatusUpgradeForNumberArrays() throws Throwable
{
// Given (not valid cypher)

// Node1: (:A{prop1:(long array), prop2: (float array)}, prop3:(long array), prop4:(long array)})
// Node2: (:A{prop1:(int array),prop2: (double array), prop3:(float array), prop4:(string array)})
// Node3: (:A{prop1:(byte array)})
// Node4: (:A{prop1:(short array)})

Transaction transaction = newTransaction( AnonymousContext.writeToken() );
long nodeId1 = transaction.dataWrite().nodeCreate();
long nodeId2 = transaction.dataWrite().nodeCreate();
long nodeId3 = transaction.dataWrite().nodeCreate();
long nodeId4 = transaction.dataWrite().nodeCreate();
int labelA = transaction.tokenWrite().labelGetOrCreateForName( "A" );
transaction.dataWrite().nodeAddLabel( nodeId1, labelA );
transaction.dataWrite().nodeAddLabel( nodeId2, labelA );
transaction.dataWrite().nodeAddLabel( nodeId3, labelA );
transaction.dataWrite().nodeAddLabel( nodeId4, labelA );
int prop1 = transaction.tokenWrite().propertyKeyGetOrCreateForName( "prop1" );
int prop2 = transaction.tokenWrite().propertyKeyGetOrCreateForName( "prop2" );
int prop3 = transaction.tokenWrite().propertyKeyGetOrCreateForName( "prop3" );
int prop4 = transaction.tokenWrite().propertyKeyGetOrCreateForName( "prop4" );
transaction.dataWrite().nodeSetProperty( nodeId1, prop1, Values.longArray( new long[]{1L} ) );
transaction.dataWrite().nodeSetProperty( nodeId2, prop1, Values.intArray( new int[]{1} ) );
transaction.dataWrite().nodeSetProperty( nodeId3, prop1, Values.byteArray( new byte[]{(byte) 1} ) );
transaction.dataWrite().nodeSetProperty( nodeId4, prop1, Values.shortArray( new short[]{(short) 1} ) );
transaction.dataWrite().nodeSetProperty( nodeId1, prop2, Values.floatArray( new float[]{2.1f} ) );
transaction.dataWrite().nodeSetProperty( nodeId2, prop2, Values.doubleArray( new double[]{2.1d} ) );
transaction.dataWrite().nodeSetProperty( nodeId1, prop3, Values.longArray( new long[]{1L} ) );
transaction.dataWrite().nodeSetProperty( nodeId2, prop3, Values.floatArray( new float[]{2.1f} ) );
transaction.dataWrite().nodeSetProperty( nodeId1, prop4, Values.longArray( new long[]{1L} ) );
transaction.dataWrite().nodeSetProperty( nodeId2, prop4, Values.stringArray( "Text" ) );
commit();

// When
RawIterator<Object[],ProcedureException> stream =
procs().procedureCallRead( procs().procedureGet( procedureName( "db", "propertySchema" ) ).id(), new Object[0] );

// Then
assertThat( asList( stream ), containsInAnyOrder(
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop1", "INTEGRALARRAY"} ),
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop2", "FLOATINGPOINTARRAY?"} ),
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop3", "NUMBER_ARRAY?"} ),
equalTo( new Object[]{"Node", Arrays.asList( "A" ), "prop4", "ANY?"} ) ) );

// printStream( stream );
}

/*
This method can be used to print to result stream to System.out -> Useful for debugging
*/
Expand All @@ -432,6 +333,7 @@ private void printStream( RawIterator<Object[],ProcedureException> stream ) thro
{
System.out.println( column );
}
System.out.println();
}
}
}

0 comments on commit d414f3e

Please sign in to comment.