Skip to content

Commit adab5d9

Browse files
committed
Values should handle iterators
1 parent b0b69ab commit adab5d9

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

driver/src/main/java/org/neo4j/driver/v1/Values.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.Collection;
2424
import java.util.Collections;
2525
import java.util.HashMap;
26+
import java.util.Iterator;
2627
import java.util.List;
2728
import java.util.Map;
2829

@@ -81,6 +82,7 @@ public static Value value( Object value )
8182
if ( value instanceof List<?> ) { return value( (List<Object>) value ); }
8283
if ( value instanceof Iterable<?> ) { return value( (Iterable<Object>) value ); }
8384
if ( value instanceof Map<?, ?> ) { return value( (Map<String,Object>) value ); }
85+
if ( value instanceof Iterator<?> ) { return value( (Iterator<Object>) value ); }
8486

8587
if ( value instanceof boolean[] ) { return value( (boolean[]) value ); }
8688
if ( value instanceof String[] ) { return value( (String[]) value ); }
@@ -183,11 +185,16 @@ public static Value value( List<Object> vals )
183185
}
184186

185187
public static Value value( Iterable<Object> val )
188+
{
189+
return value( val.iterator() );
190+
}
191+
192+
public static Value value( Iterator<Object> val )
186193
{
187194
List<Value> values = new ArrayList<>();
188-
for ( Object v : val )
195+
while ( val.hasNext() )
189196
{
190-
values.add( value( v ) );
197+
values.add( value( val.next() ) );
191198
}
192199
return new ListValue( values.toArray( new Value[values.size()] ) );
193200
}

driver/src/test/java/org/neo4j/driver/internal/ValuesTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,4 +270,15 @@ public void shouldHandleCollection() throws Throwable
270270
// When/Then
271271
assertThat( val.asList(), Matchers.<Object>containsInAnyOrder( "hello", "world" ));
272272
}
273+
274+
@Test
275+
public void shouldHandleIterator() throws Throwable
276+
{
277+
// Given
278+
Iterator<String> iterator = asList( "hello", "world" ).iterator();
279+
Value val = value( iterator );
280+
281+
// When/Then
282+
assertThat( val.asList(), Matchers.<Object>containsInAnyOrder( "hello", "world" ));
283+
}
273284
}

driver/src/test/java/org/neo4j/driver/v1/integration/StatementIT.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.junit.Test;
2323

2424
import java.util.Collections;
25+
import java.util.Iterator;
2526
import java.util.List;
2627

2728
import org.neo4j.driver.v1.Record;
@@ -82,6 +83,16 @@ public void shouldRunWithCollectionAsParameter() throws Throwable
8283
// Then nothing should've failed
8384
}
8485

86+
@Test
87+
public void shouldRunWithIteratorAsParameter() throws Throwable
88+
{
89+
Iterator<String> values = asList( "FOO", "BAR", "BAZ" ).iterator();
90+
// When
91+
session.run( "RETURN {param}", parameters( "param", values ) );
92+
93+
// Then nothing should've failed
94+
}
95+
8596
@Test
8697
public void shouldRun() throws Throwable
8798
{

0 commit comments

Comments
 (0)