diff --git a/src/main/kotlin/org/springframework/data/r2dbc/core/CriteriaStepExtensions.kt b/src/main/kotlin/org/springframework/data/r2dbc/core/CriteriaStepExtensions.kt new file mode 100644 index 0000000..55fd925 --- /dev/null +++ b/src/main/kotlin/org/springframework/data/r2dbc/core/CriteriaStepExtensions.kt @@ -0,0 +1,46 @@ +/* + * Copyright 2018-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.r2dbc.core + +import org.springframework.data.r2dbc.query.Criteria + +/** + * Extension for [Criteria.CriteriaStep.is] providing a + * `eq(value)` variant. + * + * @author Jonas Bark + */ +infix fun Criteria.CriteriaStep.isEquals(value: Any): Criteria = + `is`(value) + +/** + * Extension for [Criteria.CriteriaStep.in] providing a + * `isIn(value)` variant. + * + * @author Jonas Bark + */ +fun Criteria.CriteriaStep.isIn(vararg value: Any): Criteria = + `in`(value) + + +/** + * Extension for [Criteria.CriteriaStep.in] providing a + * `isIn(value)` variant. + * + * @author Jonas Bark + */ +fun Criteria.CriteriaStep.isIn(values: Collection): Criteria = + `in`(values) 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 999139e..b4c9e9e 100644 --- a/src/main/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensions.kt +++ b/src/main/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensions.kt @@ -16,6 +16,7 @@ package org.springframework.data.r2dbc.core import kotlinx.coroutines.reactive.awaitFirstOrNull +import org.springframework.data.r2dbc.query.Criteria /** * Coroutines variant of [DatabaseClient.GenericExecuteSpec.then]. @@ -80,3 +81,20 @@ suspend fun DatabaseClient.InsertSpec.await() { inline fun DatabaseClient.InsertIntoSpec.into(): DatabaseClient.TypedInsertSpec = into(T::class.java) +/** + * Extension for [DatabaseClient.SelectFromSpec.from] providing a + * `from()` variant. + * + * @author Jonas Bark + */ +inline fun DatabaseClient.SelectFromSpec.from(): DatabaseClient.TypedSelectSpec = + from(T::class.java) + +/** + * Extension for [DatabaseClient.SelectFromSpec.from] providing a + * `from()` variant. + * + * @author Jonas Bark + */ +inline fun DatabaseClient.DeleteFromSpec.from(): DatabaseClient.TypedDeleteSpec = + from(T::class.java) diff --git a/src/test/kotlin/org/springframework/data/r2dbc/core/CriteriaStepExtensionsTests.kt b/src/test/kotlin/org/springframework/data/r2dbc/core/CriteriaStepExtensionsTests.kt new file mode 100644 index 0000000..82ba146 --- /dev/null +++ b/src/test/kotlin/org/springframework/data/r2dbc/core/CriteriaStepExtensionsTests.kt @@ -0,0 +1,51 @@ +/* + * Copyright 2018-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.r2dbc.core + +import io.mockk.every +import io.mockk.mockk +import io.mockk.spyk +import io.mockk.verify +import kotlinx.coroutines.runBlocking +import org.assertj.core.api.Assertions.assertThat +import org.junit.Test +import org.springframework.data.r2dbc.query.Criteria +import reactor.core.publisher.Mono + +/** + * Unit tests for [Criteria.CriteriaStep] extensions. + * + * @author Jonas Bark + */ +class CriteriaStepExtensionsTests { + + @Test // gh-122 + fun eqIsCriteriaStep() { + + val spec = mockk() + val eqSpec = mockk() + + every { spec.`is`("test") } returns eqSpec + + runBlocking { + assertThat(spec isEquals "test").isEqualTo(eqSpec) + } + + verify { + spec.`is`("test") + } + } +} 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 fb4f7f7..bae36a1 100644 --- a/src/test/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensionsTests.kt +++ b/src/test/kotlin/org/springframework/data/r2dbc/core/DatabaseClientExtensionsTests.kt @@ -17,16 +17,19 @@ package org.springframework.data.r2dbc.core import io.mockk.every import io.mockk.mockk +import io.mockk.spyk import io.mockk.verify import kotlinx.coroutines.runBlocking import org.assertj.core.api.Assertions.assertThat import org.junit.Test +import org.springframework.data.r2dbc.query.Criteria import reactor.core.publisher.Mono /** * Unit tests for [DatabaseClient] extensions. * * @author Sebastien Deleuze + * @author Jonas Bark */ class DatabaseClientExtensionsTests { @@ -137,4 +140,36 @@ class DatabaseClientExtensionsTests { spec.into(String::class.java) } } + + @Test // gh-122 + fun selectFromSpecInto() { + + val spec = mockk() + val typedSpec: DatabaseClient.TypedSelectSpec = mockk() + every { spec.from(String::class.java) } returns typedSpec + + runBlocking { + assertThat(spec.from()).isEqualTo(typedSpec) + } + + verify { + spec.from(String::class.java) + } + } + + @Test // gh-122 + fun deleteFromSpecInto() { + + val spec = mockk() + val typedSpec: DatabaseClient.TypedDeleteSpec = mockk() + every { spec.from(String::class.java) } returns typedSpec + + runBlocking { + assertThat(spec.from()).isEqualTo(typedSpec) + } + + verify { + spec.from(String::class.java) + } + } }