From bd2cc6048068c1762b767998a931e95c3dff2de7 Mon Sep 17 00:00:00 2001 From: Ibanga Enoobong Ime Date: Mon, 14 Oct 2019 07:52:15 +0100 Subject: [PATCH] #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. --- .../r2dbc/core/DatabaseClientExtensions.kt | 24 +++++++++- .../core/DatabaseClientExtensionsTests.kt | 45 +++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensions.kt b/src/main/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensions.kt index f52c971..e85d25a 100644 --- a/src/main/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensions.kt +++ b/src/main/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensions.kt @@ -31,17 +31,37 @@ suspend fun DatabaseClient.GenericExecuteSpec.await() { * Extension for [DatabaseClient.BindSpec.bind] providing a variant leveraging reified type parameters * * @author Mark Paluch + * @author Ibanga Enoobong Ime */ @Suppress("EXTENSION_SHADOWED_BY_MEMBER") -inline fun DatabaseClient.BindSpec<*>.bind(index: Int, value: T?) = bind(index, SettableValue.fromOrEmpty(value, T::class.java)) +inline fun DatabaseClient.TypedExecuteSpec<*>.bind(index: Int, value: T?) = bind(index, SettableValue.fromOrEmpty(value, T::class.java)) /** * Extension for [DatabaseClient.BindSpec.bind] providing a variant leveraging reified type parameters * * @author Mark Paluch + * @author Ibanga Enoobong Ime */ @Suppress("EXTENSION_SHADOWED_BY_MEMBER") -inline fun DatabaseClient.BindSpec<*>.bind(name: String, value: T?) = bind(name, SettableValue.fromOrEmpty(value, T::class.java)) +inline fun DatabaseClient.GenericExecuteSpec.bind(index: Int, value: T?) = bind(index, SettableValue.fromOrEmpty(value, T::class.java)) + +/** + * Extension for [DatabaseClient.BindSpec.bind] providing a variant leveraging reified type parameters + * + * @author Mark Paluch + * @author Ibanga Enoobong Ime + */ +@Suppress("EXTENSION_SHADOWED_BY_MEMBER") +inline fun DatabaseClient.TypedExecuteSpec<*>.bind(name: String, value: T?) = bind(name, SettableValue.fromOrEmpty(value, T::class.java)) + +/** + * Extension for [DatabaseClient.BindSpec.bind] providing a variant leveraging reified type parameters + * + * @author Mark Paluch + * @author Ibanga Enoobong Ime + */ +@Suppress("EXTENSION_SHADOWED_BY_MEMBER") +inline fun DatabaseClient.GenericExecuteSpec.bind(name: String, value: T?) = bind(name, SettableValue.fromOrEmpty(value, T::class.java)) /** * Extension for [DatabaseClient.GenericExecuteSpec. as] providing a diff --git a/src/test/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensionsTests.kt b/src/test/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensionsTests.kt index 58003e3..43c2570 100644 --- a/src/test/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensionsTests.kt +++ b/src/test/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensionsTests.kt @@ -48,6 +48,21 @@ class DatabaseClientExtensionsTests { } } + @Test // gh-209 + fun typedExecuteSpecBindByIndexShouldBindValue() { + + val spec = mockk>() + every { spec.bind(eq(0), any()) } returns spec + + runBlocking { + spec.bind(0, "foo") + } + + verify { + spec.bind(0, SettableValue.fromOrEmpty("foo", String::class.java)) + } + } + @Test // gh-162 fun bindByIndexShouldBindNull() { @@ -63,6 +78,21 @@ class DatabaseClientExtensionsTests { } } + @Test // gh-209 + fun typedExecuteSpecBindByIndexShouldBindNull() { + + val spec = mockk>() + every { spec.bind(eq(0), any()) } returns spec + + runBlocking { + spec.bind(0, null) + } + + verify { + spec.bind(0, SettableValue.empty(String::class.java)) + } + } + @Test // gh-162 fun bindByNameShouldBindValue() { @@ -78,6 +108,21 @@ class DatabaseClientExtensionsTests { } } + @Test // gh-162 + fun typedExecuteSpecBindByNameShouldBindValue() { + + val spec = mockk>() + every { spec.bind(eq("field"), any()) } returns spec + + runBlocking { + spec.bind("field", "foo") + } + + verify { + spec.bind("field", SettableValue.fromOrEmpty("foo", String::class.java)) + } + } + @Test // gh-162 fun bindByNameShouldBindNull() {