Skip to content

Revert the check of node, rel, and path in Values#value #489

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 23, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@

import static java.util.Collections.emptyMap;
import static java.util.concurrent.CompletableFuture.completedFuture;
import static org.neo4j.driver.internal.util.Extract.parameters;
import static org.neo4j.driver.internal.util.Futures.completedWithNull;
import static org.neo4j.driver.internal.util.Futures.failedFuture;
import static org.neo4j.driver.v1.Values.value;

public class ExplicitTransaction implements Transaction
{
Expand Down Expand Up @@ -227,29 +227,29 @@ public CompletionStage<StatementResultCursor> runAsync( String statementTemplate
@Override
public StatementResult run( String statementText, Map<String,Object> statementParameters )
{
Value params = statementParameters == null ? Values.EmptyMap : value( statementParameters );
Value params = statementParameters == null ? Values.EmptyMap : parameters( statementParameters );
return run( statementText, params );
}

@Override
public CompletionStage<StatementResultCursor> runAsync( String statementTemplate,
Map<String,Object> statementParameters )
{
Value params = statementParameters == null ? Values.EmptyMap : value( statementParameters );
Value params = statementParameters == null ? Values.EmptyMap : parameters( statementParameters );
return runAsync( statementTemplate, params );
}

@Override
public StatementResult run( String statementTemplate, Record statementParameters )
{
Value params = statementParameters == null ? Values.EmptyMap : value( statementParameters.asMap() );
Value params = statementParameters == null ? Values.EmptyMap : parameters( statementParameters.asMap() );
return run( statementTemplate, params );
}

@Override
public CompletionStage<StatementResultCursor> runAsync( String statementTemplate, Record statementParameters )
{
Value params = statementParameters == null ? Values.EmptyMap : value( statementParameters.asMap() );
Value params = statementParameters == null ? Values.EmptyMap : parameters( statementParameters.asMap() );
return runAsync( statementTemplate, params );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@
import org.neo4j.driver.v1.types.TypeSystem;

import static java.util.concurrent.CompletableFuture.completedFuture;
import static org.neo4j.driver.internal.util.Extract.parameters;
import static org.neo4j.driver.internal.util.Futures.completedWithNull;
import static org.neo4j.driver.internal.util.Futures.failedFuture;
import static org.neo4j.driver.v1.Values.value;

public class NetworkSession implements Session
{
Expand Down Expand Up @@ -91,29 +91,29 @@ public CompletionStage<StatementResultCursor> runAsync( String statementText )
@Override
public StatementResult run( String statementText, Map<String,Object> statementParameters )
{
Value params = statementParameters == null ? Values.EmptyMap : value( statementParameters );
Value params = statementParameters == null ? Values.EmptyMap : parameters( statementParameters );
return run( statementText, params );
}

@Override
public CompletionStage<StatementResultCursor> runAsync( String statementText,
Map<String,Object> statementParameters )
{
Value params = statementParameters == null ? Values.EmptyMap : value( statementParameters );
Value params = statementParameters == null ? Values.EmptyMap : parameters( statementParameters );
return runAsync( statementText, params );
}

@Override
public StatementResult run( String statementTemplate, Record statementParameters )
{
Value params = statementParameters == null ? Values.EmptyMap : value( statementParameters.asMap() );
Value params = statementParameters == null ? Values.EmptyMap : parameters( statementParameters.asMap() );
return run( statementTemplate, params );
}

@Override
public CompletionStage<StatementResultCursor> runAsync( String statementTemplate, Record statementParameters )
{
Value params = statementParameters == null ? Values.EmptyMap : value( statementParameters.asMap() );
Value params = statementParameters == null ? Values.EmptyMap : parameters( statementParameters.asMap() );
return runAsync( statementTemplate, params );
}

Expand Down
38 changes: 38 additions & 0 deletions driver/src/main/java/org/neo4j/driver/internal/util/Extract.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,17 @@
import java.util.Map;

import org.neo4j.driver.internal.InternalPair;
import org.neo4j.driver.internal.value.MapValue;
import org.neo4j.driver.internal.value.NodeValue;
import org.neo4j.driver.internal.value.PathValue;
import org.neo4j.driver.internal.value.RelationshipValue;
import org.neo4j.driver.v1.Record;
import org.neo4j.driver.v1.Value;
import org.neo4j.driver.v1.exceptions.ClientException;
import org.neo4j.driver.v1.types.MapAccessor;
import org.neo4j.driver.v1.types.Node;
import org.neo4j.driver.v1.types.Path;
import org.neo4j.driver.v1.types.Relationship;
import org.neo4j.driver.v1.util.Function;
import org.neo4j.driver.v1.util.Pair;

Expand All @@ -36,6 +44,8 @@
import static java.util.Collections.singletonMap;
import static java.util.Collections.unmodifiableList;
import static java.util.Collections.unmodifiableMap;
import static org.neo4j.driver.internal.util.Iterables.newHashMapWithSize;
import static org.neo4j.driver.v1.Values.value;

/**
* Utility class for extracting data.
Expand Down Expand Up @@ -190,4 +200,32 @@ public static <V> List<Pair<String, V>> fields( final Record map, final Function
}
}
}

public static Value parameters( Map<String,Object> val )
{
Map<String,Value> asValues = newHashMapWithSize( val.size() );
for ( Map.Entry<String,Object> entry : val.entrySet() )
{
Object value = entry.getValue();
assertParameter( value );
asValues.put( entry.getKey(), value( value ) );
}
return new MapValue( asValues );
}

public static void assertParameter( Object value )
{
if ( value instanceof Node || value instanceof NodeValue )
{
throw new ClientException( "Nodes can't be used as parameters." );
}
if ( value instanceof Relationship || value instanceof RelationshipValue )
{
throw new ClientException( "Relationships can't be used as parameters." );
}
if ( value instanceof Path || value instanceof PathValue )
{
throw new ClientException( "Paths can't be used as parameters." );
}
}
}
23 changes: 2 additions & 21 deletions driver/src/main/java/org/neo4j/driver/v1/Values.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,8 @@
import org.neo4j.driver.internal.value.LocalDateTimeValue;
import org.neo4j.driver.internal.value.LocalTimeValue;
import org.neo4j.driver.internal.value.MapValue;
import org.neo4j.driver.internal.value.NodeValue;
import org.neo4j.driver.internal.value.NullValue;
import org.neo4j.driver.internal.value.PathValue;
import org.neo4j.driver.internal.value.PointValue;
import org.neo4j.driver.internal.value.RelationshipValue;
import org.neo4j.driver.internal.value.StringValue;
import org.neo4j.driver.internal.value.TimeValue;
import org.neo4j.driver.v1.exceptions.ClientException;
Expand All @@ -67,6 +64,7 @@
import org.neo4j.driver.v1.types.TypeSystem;
import org.neo4j.driver.v1.util.Function;

import static org.neo4j.driver.internal.util.Extract.assertParameter;
import static org.neo4j.driver.internal.util.Iterables.newHashMapWithSize;

/**
Expand Down Expand Up @@ -94,7 +92,6 @@ public static Value value( Object value )
{
if ( value == null ) { return NullValue.NULL; }

assertParameter( value );
if ( value instanceof AsValue ) { return ((AsValue) value).asValue(); }
if ( value instanceof Boolean ) { return value( (boolean) value ); }
if ( value instanceof String ) { return value( (String) value ); }
Expand Down Expand Up @@ -385,6 +382,7 @@ public static Value parameters( Object... keysAndValues )
for ( int i = 0; i < keysAndValues.length; i += 2 )
{
Object value = keysAndValues[i + 1];
assertParameter( value );
map.put( keysAndValues[i].toString(), value( value ) );
}
return value( map );
Expand Down Expand Up @@ -666,21 +664,4 @@ public static <T> Function<Value,List<T>> ofList( final Function<Value,T> innerM
{
return value -> value.asList( innerMap );
}

private static void assertParameter( Object value )
{
if ( value instanceof Node || value instanceof NodeValue )
{
throw new ClientException( "Nodes can't be used as parameters." );
}
if ( value instanceof Relationship || value instanceof RelationshipValue )
{
throw new ClientException( "Relationships can't be used as parameters." );
}
if ( value instanceof Path || value instanceof PathValue )
{
throw new ClientException( "Paths can't be used as parameters." );
}

}
}
60 changes: 18 additions & 42 deletions driver/src/test/java/org/neo4j/driver/internal/ValuesTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -494,74 +494,50 @@ public void shouldCreateValueFromPoint3D()
}

@Test
public void shouldComplainAboutNodeValueType() throws Throwable
public void shouldCreateValueFromNodeValue()
{
// Expect
exception.expect( ClientException.class );
exception.expectMessage( "Nodes can't be used as parameters." );

// When
NodeValue node = emptyNodeValue();
value( node );
Value value = value( node );
assertEquals( node, value );
}

@Test
public void shouldComplainAboutNodeType() throws Throwable
public void shouldCreateValueFromNode()
{
// Expect
exception.expect( ClientException.class );
exception.expectMessage( "Nodes can't be used as parameters." );

// When
Node node = emptyNodeValue().asNode();
value( node );
Value value = value( node );
assertEquals( node, value.asNode() );
}

@Test
public void shouldComplainAboutRelationshipValueType() throws Throwable
public void shouldCreateValueFromRelationshipValue()
{
// Expect
exception.expect( ClientException.class );
exception.expectMessage( "Relationships can't be used as parameters." );

// When
RelationshipValue rel = emptyRelationshipValue();
value( rel );
Value value = value( rel );
assertEquals( rel, value );
}

@Test
public void shouldComplainAboutRelationshipType() throws Throwable
public void shouldCreateValueFromRelationship()
{
// Expect
exception.expect( ClientException.class );
exception.expectMessage( "Relationships can't be used as parameters." );

// When
Relationship rel = emptyRelationshipValue().asRelationship();
value( rel );
Value value = value( rel );
assertEquals( rel, value.asRelationship() );
}

@Test
public void shouldComplainAboutPathValueType() throws Throwable
public void shouldCreateValueFromPathValue()
{
// Expect
exception.expect( ClientException.class );
exception.expectMessage( "Paths can't be used as parameters." );

// When
PathValue path = filledPathValue();
value( path );
Value value = value( path );
assertEquals( path, value );
}

@Test
public void shouldComplainAboutPathType() throws Throwable
public void shouldCreateValueFromPath()
{
// Expect
exception.expect( ClientException.class );
exception.expectMessage( "Paths can't be used as parameters." );

// When
Path path = filledPathValue().asPath();
value( path );
Value value = value( path );
assertEquals( path, value.asPath() );
}
}