@ -22,12 +22,14 @@ import java.lang.reflect.Method;
@@ -22,12 +22,14 @@ import java.lang.reflect.Method;
import java.sql.JDBCType ;
import java.sql.ResultSet ;
import java.util.ArrayList ;
import java.util.Iterator ;
import java.util.List ;
import java.util.Properties ;
import java.util.Set ;
import java.util.stream.Stream ;
import org.assertj.core.api.Assertions ;
import org.jetbrains.annotations.NotNull ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.mockito.ArgumentCaptor ;
@ -211,7 +213,6 @@ class StringBasedJdbcQueryUnitTests {
@@ -211,7 +213,6 @@ class StringBasedJdbcQueryUnitTests {
assertThat ( sqlParameterSource . getValue ( "directions" ) ) . asList ( ) . containsExactlyInAnyOrder ( - 1 , 1 ) ;
}
@Test // GH-1212
void doesNotConvertNonCollectionParameter ( ) {
@ -222,6 +223,18 @@ class StringBasedJdbcQueryUnitTests {
@@ -222,6 +223,18 @@ class StringBasedJdbcQueryUnitTests {
assertThat ( sqlParameterSource . getValue ( "value" ) ) . isEqualTo ( 1 ) ;
}
@Test // GH-1343
void appliesConverterToIterable ( ) {
SqlParameterSource sqlParameterSource = forMethod ( "findByListContainer" , ListContainer . class ) //
. withCustomConverters ( ListContainerToStringConverter . INSTANCE )
. withArguments ( new ListContainer ( "one" , "two" , "three" ) ) //
. extractParameterSource ( ) ;
assertThat ( sqlParameterSource . getValue ( "value" ) ) . isEqualTo ( "one" ) ;
}
QueryFixture forMethod ( String name , Class . . . paramTypes ) {
return new QueryFixture ( createMethod ( name , paramTypes ) ) ;
}
@ -321,6 +334,9 @@ class StringBasedJdbcQueryUnitTests {
@@ -321,6 +334,9 @@ class StringBasedJdbcQueryUnitTests {
@Query ( value = "some sql statement" )
List < Object > findBySimpleValue ( Integer value ) ;
@Query ( value = "some sql statement" )
List < Object > findByListContainer ( ListContainer value ) ;
@Query ( "SELECT * FROM table WHERE c = :#{myext.testValue} AND c2 = :#{myext.doSomething()}" )
Object findBySpelExpression ( Object object ) ;
}
@ -417,6 +433,32 @@ class StringBasedJdbcQueryUnitTests {
@@ -417,6 +433,32 @@ class StringBasedJdbcQueryUnitTests {
}
}
static class ListContainer implements Iterable < String > {
private final List < String > values ;
ListContainer ( String . . . values ) {
this . values = List . of ( values ) ;
}
@NotNull
@Override
public Iterator < String > iterator ( ) {
return values . iterator ( ) ;
}
}
@WritingConverter
enum ListContainerToStringConverter implements Converter < ListContainer , String > {
INSTANCE ;
@Override
public String convert ( ListContainer source ) {
return source . values . get ( 0 ) ;
}
}
private static class DummyEntity {
private Long id ;