diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpec.kt index ce8c4f21c..98e91d432 100644 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpec.kt +++ b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpec.kt @@ -13,7 +13,7 @@ data class InValueSpec( query: AbstractQuery<*>, criteriaBuilder: CriteriaBuilder ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.conjunction() + if (rights.isEmpty()) return criteriaBuilder.disjunction() return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { rights.forEach { value(it) } @@ -25,7 +25,7 @@ data class InValueSpec( query: CriteriaUpdate<*>, criteriaBuilder: CriteriaBuilder ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.conjunction() + if (rights.isEmpty()) return criteriaBuilder.disjunction() return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { rights.forEach { value(it) } @@ -37,7 +37,7 @@ data class InValueSpec( query: CriteriaDelete<*>, criteriaBuilder: CriteriaBuilder ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.conjunction() + if (rights.isEmpty()) return criteriaBuilder.disjunction() return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { rights.forEach { value(it) } diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpecTest.kt index aff812472..d64a59cfd 100644 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpecTest.kt +++ b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpecTest.kt @@ -69,19 +69,19 @@ internal class InValueSpecTest : WithKotlinJdslAssertions { // given val leftExpressionSpec: ExpressionSpec = mockk() - val emptyPredicate: Predicate = mockk() + val falsePredicate: Predicate = mockk() - every { criteriaBuilder.conjunction() } returns emptyPredicate + every { criteriaBuilder.disjunction() } returns falsePredicate // when val actual = InValueSpec(leftExpressionSpec, emptyList()) .toCriteriaPredicate(froms, query, criteriaBuilder) // then - assertThat(actual).isEqualTo(emptyPredicate) + assertThat(actual).isEqualTo(falsePredicate) verify(exactly = 1) { - criteriaBuilder.conjunction() + criteriaBuilder.disjunction() } confirmVerified(froms, query, criteriaBuilder) @@ -126,19 +126,19 @@ internal class InValueSpecTest : WithKotlinJdslAssertions { // given val leftExpressionSpec: ExpressionSpec = mockk() - val emptyPredicate: Predicate = mockk() + val falsePredicate: Predicate = mockk() - every { criteriaBuilder.conjunction() } returns emptyPredicate + every { criteriaBuilder.disjunction() } returns falsePredicate // when val actual = InValueSpec(leftExpressionSpec, emptyList()) .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) // then - assertThat(actual).isEqualTo(emptyPredicate) + assertThat(actual).isEqualTo(falsePredicate) verify(exactly = 1) { - criteriaBuilder.conjunction() + criteriaBuilder.disjunction() } confirmVerified(froms, updateQuery, criteriaBuilder) @@ -183,19 +183,19 @@ internal class InValueSpecTest : WithKotlinJdslAssertions { // given val leftExpressionSpec: ExpressionSpec = mockk() - val emptyPredicate: Predicate = mockk() + val falsePredicate: Predicate = mockk() - every { criteriaBuilder.conjunction() } returns emptyPredicate + every { criteriaBuilder.disjunction() } returns falsePredicate // when val actual = InValueSpec(leftExpressionSpec, emptyList()) .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) // then - assertThat(actual).isEqualTo(emptyPredicate) + assertThat(actual).isEqualTo(falsePredicate) verify(exactly = 1) { - criteriaBuilder.conjunction() + criteriaBuilder.disjunction() } confirmVerified(froms, deleteQuery, criteriaBuilder) diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpec.kt index 896121a55..47fb77088 100644 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpec.kt +++ b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpec.kt @@ -13,7 +13,7 @@ data class InValueSpec( query: AbstractQuery<*>, criteriaBuilder: CriteriaBuilder ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.conjunction() + if (rights.isEmpty()) return criteriaBuilder.disjunction() return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { rights.forEach { value(it) } @@ -25,7 +25,7 @@ data class InValueSpec( query: CriteriaUpdate<*>, criteriaBuilder: CriteriaBuilder ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.conjunction() + if (rights.isEmpty()) return criteriaBuilder.disjunction() return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { rights.forEach { value(it) } @@ -37,7 +37,7 @@ data class InValueSpec( query: CriteriaDelete<*>, criteriaBuilder: CriteriaBuilder ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.conjunction() + if (rights.isEmpty()) return criteriaBuilder.disjunction() return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { rights.forEach { value(it) } diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpecTest.kt index a9b2af4d0..0bfb9c3a6 100644 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpecTest.kt +++ b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpecTest.kt @@ -69,19 +69,19 @@ internal class InValueSpecTest : WithKotlinJdslAssertions { // given val leftExpressionSpec: ExpressionSpec = mockk() - val emptyPredicate: Predicate = mockk() + val falsePredicate: Predicate = mockk() - every { criteriaBuilder.conjunction() } returns emptyPredicate + every { criteriaBuilder.disjunction() } returns falsePredicate // when val actual = InValueSpec(leftExpressionSpec, emptyList()) .toCriteriaPredicate(froms, query, criteriaBuilder) // then - assertThat(actual).isEqualTo(emptyPredicate) + assertThat(actual).isEqualTo(falsePredicate) verify(exactly = 1) { - criteriaBuilder.conjunction() + criteriaBuilder.disjunction() } confirmVerified(froms, query, criteriaBuilder) @@ -126,19 +126,19 @@ internal class InValueSpecTest : WithKotlinJdslAssertions { // given val leftExpressionSpec: ExpressionSpec = mockk() - val emptyPredicate: Predicate = mockk() + val falsePredicate: Predicate = mockk() - every { criteriaBuilder.conjunction() } returns emptyPredicate + every { criteriaBuilder.disjunction() } returns falsePredicate // when val actual = InValueSpec(leftExpressionSpec, emptyList()) .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) // then - assertThat(actual).isEqualTo(emptyPredicate) + assertThat(actual).isEqualTo(falsePredicate) verify(exactly = 1) { - criteriaBuilder.conjunction() + criteriaBuilder.disjunction() } confirmVerified(froms, updateQuery, criteriaBuilder) @@ -183,19 +183,19 @@ internal class InValueSpecTest : WithKotlinJdslAssertions { // given val leftExpressionSpec: ExpressionSpec = mockk() - val emptyPredicate: Predicate = mockk() + val falsePredicate: Predicate = mockk() - every { criteriaBuilder.conjunction() } returns emptyPredicate + every { criteriaBuilder.disjunction() } returns falsePredicate // when val actual = InValueSpec(leftExpressionSpec, emptyList()) .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) // then - assertThat(actual).isEqualTo(emptyPredicate) + assertThat(actual).isEqualTo(falsePredicate) verify(exactly = 1) { - criteriaBuilder.conjunction() + criteriaBuilder.disjunction() } confirmVerified(froms, deleteQuery, criteriaBuilder) diff --git a/test-fixture/integration-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/test/integration/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt b/test-fixture/integration-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/test/integration/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt index 63c35ff4f..c17fc1150 100644 --- a/test-fixture/integration-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/test/integration/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt +++ b/test-fixture/integration-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/test/integration/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt @@ -39,6 +39,32 @@ abstract class AbstractCriteriaDeleteIntegrationTest : AbstractCriteriaQueryDslI assertThat(query.resultList).isEmpty() } + @Test + fun deleteEmptyList() { + // when + val address1 = orderAddress { } + + entityManager.run { + persistAll(address1) + flushAndClear() + } + + queryFactory.deleteQuery { + where(col(OrderAddress::id).`in`(emptyList())) + }.executeUpdate() + + // when + val query = queryFactory.selectQuery { + select(entity(OrderAddress::class)) + from(entity(OrderAddress::class)) + where(col(OrderAddress::id).equal(address1.id)) + associate(OrderAddress::class, Address::class, on(OrderAddress::address)) + } + + // then + assertThat(query.resultList).singleElement() + } + @Test fun deleteEmbedded() { // given diff --git a/test-fixture/integration-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt b/test-fixture/integration-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt index b37e2cbd6..2cc97fffa 100644 --- a/test-fixture/integration-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt +++ b/test-fixture/integration-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt @@ -39,6 +39,33 @@ abstract class AbstractCriteriaDeleteIntegrationTest : CriteriaQueryDslIntegr assertThat(query).isEmpty() } + @Test + fun deleteInEmptyList() = runBlocking { + // when + val address1 = orderAddress { } + + persistAll(address1) + + withFactory { queryFactory -> + queryFactory.deleteQuery { + where(col(OrderAddress::id).`in`(emptyList())) + }.executeUpdate() + } + + // when + val query = withFactory { queryFactory -> + queryFactory.listQuery { + select(entity(OrderAddress::class)) + from(entity(OrderAddress::class)) + where(col(OrderAddress::id).equal(address1.id)) + associate(OrderAddress::class, Address::class, on(OrderAddress::address)) + } + } + + // then + assertThat(query).singleElement() + } + @Test fun deleteEmbedded() = runBlocking { // given diff --git a/test-fixture/integration-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt b/test-fixture/integration-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt index b37e2cbd6..2cc97fffa 100644 --- a/test-fixture/integration-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt +++ b/test-fixture/integration-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt @@ -39,6 +39,33 @@ abstract class AbstractCriteriaDeleteIntegrationTest : CriteriaQueryDslIntegr assertThat(query).isEmpty() } + @Test + fun deleteInEmptyList() = runBlocking { + // when + val address1 = orderAddress { } + + persistAll(address1) + + withFactory { queryFactory -> + queryFactory.deleteQuery { + where(col(OrderAddress::id).`in`(emptyList())) + }.executeUpdate() + } + + // when + val query = withFactory { queryFactory -> + queryFactory.listQuery { + select(entity(OrderAddress::class)) + from(entity(OrderAddress::class)) + where(col(OrderAddress::id).equal(address1.id)) + associate(OrderAddress::class, Address::class, on(OrderAddress::address)) + } + } + + // then + assertThat(query).singleElement() + } + @Test fun deleteEmbedded() = runBlocking { // given diff --git a/test-fixture/integration/src/main/kotlin/com/linecorp/kotlinjdsl/test/integration/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt b/test-fixture/integration/src/main/kotlin/com/linecorp/kotlinjdsl/test/integration/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt index 63c35ff4f..c17fc1150 100644 --- a/test-fixture/integration/src/main/kotlin/com/linecorp/kotlinjdsl/test/integration/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt +++ b/test-fixture/integration/src/main/kotlin/com/linecorp/kotlinjdsl/test/integration/criteriaquery/AbstractCriteriaDeleteIntegrationTest.kt @@ -39,6 +39,32 @@ abstract class AbstractCriteriaDeleteIntegrationTest : AbstractCriteriaQueryDslI assertThat(query.resultList).isEmpty() } + @Test + fun deleteEmptyList() { + // when + val address1 = orderAddress { } + + entityManager.run { + persistAll(address1) + flushAndClear() + } + + queryFactory.deleteQuery { + where(col(OrderAddress::id).`in`(emptyList())) + }.executeUpdate() + + // when + val query = queryFactory.selectQuery { + select(entity(OrderAddress::class)) + from(entity(OrderAddress::class)) + where(col(OrderAddress::id).equal(address1.id)) + associate(OrderAddress::class, Address::class, on(OrderAddress::address)) + } + + // then + assertThat(query.resultList).singleElement() + } + @Test fun deleteEmbedded() { // given