Skip to content

Commit bd2cc60

Browse files
IEnoobongmp911de
authored andcommitted
#209 - Provide extensions on TypedExecuteSpec and GenericExecuteSpec.
The original extensions did not allow for executing fetch operations because they where on BindSpec. Original pull request: #210.
1 parent 6667f7a commit bd2cc60

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

src/main/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensions.kt

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,37 @@ suspend fun DatabaseClient.GenericExecuteSpec.await() {
3131
* Extension for [DatabaseClient.BindSpec.bind] providing a variant leveraging reified type parameters
3232
*
3333
* @author Mark Paluch
34+
* @author Ibanga Enoobong Ime
3435
*/
3536
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
36-
inline fun <reified T : Any> DatabaseClient.BindSpec<*>.bind(index: Int, value: T?) = bind(index, SettableValue.fromOrEmpty(value, T::class.java))
37+
inline fun <reified T : Any> DatabaseClient.TypedExecuteSpec<*>.bind(index: Int, value: T?) = bind(index, SettableValue.fromOrEmpty(value, T::class.java))
3738

3839
/**
3940
* Extension for [DatabaseClient.BindSpec.bind] providing a variant leveraging reified type parameters
4041
*
4142
* @author Mark Paluch
43+
* @author Ibanga Enoobong Ime
4244
*/
4345
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
44-
inline fun <reified T : Any> DatabaseClient.BindSpec<*>.bind(name: String, value: T?) = bind(name, SettableValue.fromOrEmpty(value, T::class.java))
46+
inline fun <reified T : Any> DatabaseClient.GenericExecuteSpec.bind(index: Int, value: T?) = bind(index, SettableValue.fromOrEmpty(value, T::class.java))
47+
48+
/**
49+
* Extension for [DatabaseClient.BindSpec.bind] providing a variant leveraging reified type parameters
50+
*
51+
* @author Mark Paluch
52+
* @author Ibanga Enoobong Ime
53+
*/
54+
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
55+
inline fun <reified T : Any> DatabaseClient.TypedExecuteSpec<*>.bind(name: String, value: T?) = bind(name, SettableValue.fromOrEmpty(value, T::class.java))
56+
57+
/**
58+
* Extension for [DatabaseClient.BindSpec.bind] providing a variant leveraging reified type parameters
59+
*
60+
* @author Mark Paluch
61+
* @author Ibanga Enoobong Ime
62+
*/
63+
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
64+
inline fun <reified T : Any> DatabaseClient.GenericExecuteSpec.bind(name: String, value: T?) = bind(name, SettableValue.fromOrEmpty(value, T::class.java))
4565

4666
/**
4767
* Extension for [DatabaseClient.GenericExecuteSpec. as] providing a

src/test/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensionsTests.kt

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,21 @@ class DatabaseClientExtensionsTests {
4848
}
4949
}
5050

51+
@Test // gh-209
52+
fun typedExecuteSpecBindByIndexShouldBindValue() {
53+
54+
val spec = mockk<DatabaseClient.TypedExecuteSpec<String>>()
55+
every { spec.bind(eq(0), any()) } returns spec
56+
57+
runBlocking {
58+
spec.bind<String>(0, "foo")
59+
}
60+
61+
verify {
62+
spec.bind(0, SettableValue.fromOrEmpty("foo", String::class.java))
63+
}
64+
}
65+
5166
@Test // gh-162
5267
fun bindByIndexShouldBindNull() {
5368

@@ -63,6 +78,21 @@ class DatabaseClientExtensionsTests {
6378
}
6479
}
6580

81+
@Test // gh-209
82+
fun typedExecuteSpecBindByIndexShouldBindNull() {
83+
84+
val spec = mockk<DatabaseClient.TypedExecuteSpec<String>>()
85+
every { spec.bind(eq(0), any()) } returns spec
86+
87+
runBlocking {
88+
spec.bind<String>(0, null)
89+
}
90+
91+
verify {
92+
spec.bind(0, SettableValue.empty(String::class.java))
93+
}
94+
}
95+
6696
@Test // gh-162
6797
fun bindByNameShouldBindValue() {
6898

@@ -78,6 +108,21 @@ class DatabaseClientExtensionsTests {
78108
}
79109
}
80110

111+
@Test // gh-162
112+
fun typedExecuteSpecBindByNameShouldBindValue() {
113+
114+
val spec = mockk<DatabaseClient.TypedExecuteSpec<String>>()
115+
every { spec.bind(eq("field"), any()) } returns spec
116+
117+
runBlocking {
118+
spec.bind<String>("field", "foo")
119+
}
120+
121+
verify {
122+
spec.bind("field", SettableValue.fromOrEmpty("foo", String::class.java))
123+
}
124+
}
125+
81126
@Test // gh-162
82127
fun bindByNameShouldBindNull() {
83128

0 commit comments

Comments
 (0)