From 940bbecd87c89bf144221a72b72c782c65eeb5cd Mon Sep 17 00:00:00 2001 From: real-dev Date: Fri, 21 Jun 2024 20:46:18 +0900 Subject: [PATCH 1/4] fix: add join, on clause (cherry picked from commit b445b88d336f3c36d9904b50f417859955eeb337) --- .../jpql/serializer/JpqlRenderClause.kt | 20 +++++++++++++++++++ .../serializer/impl/JpqlEntitySerializer.kt | 1 + .../impl/JpqlEntitySerializerTest.kt | 2 ++ 3 files changed, 23 insertions(+) diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/JpqlRenderClause.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/JpqlRenderClause.kt index 7b70d9d93..ea96f96bb 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/JpqlRenderClause.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/JpqlRenderClause.kt @@ -26,6 +26,12 @@ sealed class JpqlRenderClause : AbstractRenderContextElement(Key) { @SinceJdsl("3.0.0") open fun isFrom(): Boolean = false + @SinceJdsl("3.0.0") + open fun isJoin(): Boolean = false + + @SinceJdsl("3.0.0") + open fun isOn(): Boolean = false + @SinceJdsl("3.0.0") open fun isWhere(): Boolean = false @@ -73,6 +79,20 @@ sealed class JpqlRenderClause : AbstractRenderContextElement(Key) { override fun toString(): String = "From" } + @SinceJdsl("3.5.0") + object Join : JpqlRenderClause() { + override fun isJoin(): Boolean = true + + override fun toString(): String = "Join" + } + + @SinceJdsl("3.5.0") + object On : JpqlRenderClause() { + override fun isOn(): Boolean = true + + override fun toString(): String = "On" + } + @SinceJdsl("3.0.0") object Where : JpqlRenderClause() { override fun isWhere(): Boolean = true diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlEntitySerializer.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlEntitySerializer.kt index 40e314ec3..611b75072 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlEntitySerializer.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlEntitySerializer.kt @@ -22,6 +22,7 @@ class JpqlEntitySerializer : JpqlSerializer> { if ( (statement.isSelect() && clause.isFrom()) || + (statement.isSelect() && clause.isJoin()) || (statement.isUpdate() && clause.isUpdate()) || (statement.isDelete() && clause.isDeleteFrom()) ) { diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlEntitySerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlEntitySerializerTest.kt index c022a7bad..5bacb2d81 100644 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlEntitySerializerTest.kt +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlEntitySerializerTest.kt @@ -49,6 +49,7 @@ internal class JpqlEntitySerializerTest : WithAssertions { @StatementClauseSource( includes = [ StatementClause(JpqlRenderStatement.Select::class, JpqlRenderClause.From::class), + StatementClause(JpqlRenderStatement.Select::class, JpqlRenderClause.Join::class), StatementClause(JpqlRenderStatement.Update::class, JpqlRenderClause.Update::class), StatementClause(JpqlRenderStatement.Delete::class, JpqlRenderClause.DeleteFrom::class), ], @@ -81,6 +82,7 @@ internal class JpqlEntitySerializerTest : WithAssertions { @StatementClauseSource( excludes = [ StatementClause(JpqlRenderStatement.Select::class, JpqlRenderClause.From::class), + StatementClause(JpqlRenderStatement.Select::class, JpqlRenderClause.Join::class), StatementClause(JpqlRenderStatement.Update::class, JpqlRenderClause.Update::class), StatementClause(JpqlRenderStatement.Delete::class, JpqlRenderClause.DeleteFrom::class), ], From 77d9ddc05e6d861b89ed2b50a01f39f0b85088bf Mon Sep 17 00:00:00 2001 From: real-dev Date: Mon, 24 Jun 2024 11:18:02 +0900 Subject: [PATCH 2/4] fix: modify entity,join serializers to join,on clause with tests --- .../data/jpa/jpql/select/SelectExample.kt | 19 +++++++++++++++++++ ...JpqlInnerAssociationFetchJoinSerializer.kt | 7 +++++-- .../JpqlInnerAssociationJoinSerializer.kt | 7 +++++-- .../impl/JpqlInnerFetchJoinSerializer.kt | 7 +++++-- .../impl/JpqlInnerJoinSerializer.kt | 7 +++++-- .../JpqlLeftAssociationFetchJoinSerializer.kt | 7 +++++-- .../impl/JpqlLeftAssociationJoinSerializer.kt | 7 +++++-- .../impl/JpqlLeftFetchJoinSerializer.kt | 7 +++++-- .../serializer/impl/JpqlLeftJoinSerializer.kt | 8 +++++--- ...InnerAssociationFetchJoinSerializerTest.kt | 7 ++++--- .../JpqlInnerAssociationJoinSerializerTest.kt | 7 ++++--- .../impl/JpqlInnerFetchJoinSerializerTest.kt | 5 +++-- .../impl/JpqlInnerJoinSerializerTest.kt | 5 +++-- ...lLeftAssociationFetchJoinSerializerTest.kt | 7 ++++--- .../JpqlLeftAssociationJoinSerializerTest.kt | 7 ++++--- .../impl/JpqlLeftFetchJoinSerializerTest.kt | 5 +++-- .../impl/JpqlLeftJoinSerializerTest.kt | 5 +++-- 17 files changed, 87 insertions(+), 37 deletions(-) diff --git a/example/spring-data-jpa/src/test/kotlin/com/linecorp/kotlinjdsl/example/spring/data/jpa/jpql/select/SelectExample.kt b/example/spring-data-jpa/src/test/kotlin/com/linecorp/kotlinjdsl/example/spring/data/jpa/jpql/select/SelectExample.kt index eb731f5f8..aaa6de0ed 100644 --- a/example/spring-data-jpa/src/test/kotlin/com/linecorp/kotlinjdsl/example/spring/data/jpa/jpql/select/SelectExample.kt +++ b/example/spring-data-jpa/src/test/kotlin/com/linecorp/kotlinjdsl/example/spring/data/jpa/jpql/select/SelectExample.kt @@ -4,6 +4,7 @@ import com.linecorp.kotlinjdsl.example.spring.data.jpa.jpql.entity.author.Author import com.linecorp.kotlinjdsl.example.spring.data.jpa.jpql.entity.book.Book import com.linecorp.kotlinjdsl.example.spring.data.jpa.jpql.entity.book.BookAuthor import com.linecorp.kotlinjdsl.example.spring.data.jpa.jpql.entity.book.BookPrice +import com.linecorp.kotlinjdsl.example.spring.data.jpa.jpql.entity.book.BookPublisher import com.linecorp.kotlinjdsl.example.spring.data.jpa.jpql.entity.book.Isbn import com.linecorp.kotlinjdsl.example.spring.data.jpa.jpql.entity.employee.Employee import com.linecorp.kotlinjdsl.example.spring.data.jpa.jpql.entity.employee.EmployeeDepartment @@ -51,6 +52,24 @@ class SelectExample : WithAssertions { assertThat(actual).isEqualTo(1L) } + @Test + fun `books reference specific book publisher entity`() { + // when + val actual = bookRepository.findAll { + select( + path(Book::isbn), + ).from( + entity(Book::class), + join(entity(BookPublisher::class)).on(path(BookPublisher::book).eq(entity(Book::class))), + ).where( + path(BookPublisher::publisherId).eq(3), + ) + } + + // then + assertThat(actual).isEqualTo(listOf(Isbn("10"), Isbn("11"), Isbn("12"))) + } + @Test fun `authors who haven't written a book`() { // when diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerAssociationFetchJoinSerializer.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerAssociationFetchJoinSerializer.kt index 215e532a5..74eacce06 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerAssociationFetchJoinSerializer.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerAssociationFetchJoinSerializer.kt @@ -3,6 +3,7 @@ package com.linecorp.kotlinjdsl.render.jpql.serializer.impl import com.linecorp.kotlinjdsl.Internal import com.linecorp.kotlinjdsl.querymodel.jpql.join.impl.JpqlInnerAssociationFetchJoin import com.linecorp.kotlinjdsl.render.RenderContext +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderClause import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializer import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter @@ -20,7 +21,8 @@ class JpqlInnerAssociationFetchJoinSerializer : JpqlSerializer> { writer.write("INNER JOIN FETCH") writer.write(" ") - delegate.serialize(part.entity, writer, context) + val newJoinContext = context + JpqlRenderClause.Join + delegate.serialize(part.entity, writer, newJoinContext) writer.write(" ") writer.write("ON") writer.write(" ") - delegate.serialize(part.on, writer, context) + val newOnContext = context + JpqlRenderClause.On + delegate.serialize(part.on, writer, newOnContext) } } diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerJoinSerializer.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerJoinSerializer.kt index b89983e13..cddccbdb1 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerJoinSerializer.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerJoinSerializer.kt @@ -3,6 +3,7 @@ package com.linecorp.kotlinjdsl.render.jpql.serializer.impl import com.linecorp.kotlinjdsl.Internal import com.linecorp.kotlinjdsl.querymodel.jpql.join.impl.JpqlInnerJoin import com.linecorp.kotlinjdsl.render.RenderContext +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderClause import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializer import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter @@ -20,12 +21,14 @@ class JpqlInnerJoinSerializer : JpqlSerializer> { writer.write("INNER JOIN") writer.write(" ") - delegate.serialize(part.entity, writer, context) + val newJoinContext = context + JpqlRenderClause.Join + delegate.serialize(part.entity, writer, newJoinContext) writer.write(" ") writer.write("ON") writer.write(" ") - delegate.serialize(part.on, writer, context) + val newOnContext = context + JpqlRenderClause.On + delegate.serialize(part.on, writer, newOnContext) } } diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftAssociationFetchJoinSerializer.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftAssociationFetchJoinSerializer.kt index 90018727a..794bae6a2 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftAssociationFetchJoinSerializer.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftAssociationFetchJoinSerializer.kt @@ -3,6 +3,7 @@ package com.linecorp.kotlinjdsl.render.jpql.serializer.impl import com.linecorp.kotlinjdsl.Internal import com.linecorp.kotlinjdsl.querymodel.jpql.join.impl.JpqlLeftAssociationFetchJoin import com.linecorp.kotlinjdsl.render.RenderContext +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderClause import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializer import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter @@ -20,7 +21,8 @@ class JpqlLeftAssociationFetchJoinSerializer : JpqlSerializer> { writer.write("LEFT JOIN FETCH") writer.write(" ") - delegate.serialize(part.entity, writer, context) + val newJoinContext = context + JpqlRenderClause.Join + delegate.serialize(part.entity, writer, newJoinContext) writer.write(" ") writer.write("ON") writer.write(" ") - delegate.serialize(part.on, writer, context) + val newOnContext = context + JpqlRenderClause.On + delegate.serialize(part.on, writer, newOnContext) } } diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftJoinSerializer.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftJoinSerializer.kt index 9ff57edd3..bd5d92666 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftJoinSerializer.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftJoinSerializer.kt @@ -3,6 +3,7 @@ package com.linecorp.kotlinjdsl.render.jpql.serializer.impl import com.linecorp.kotlinjdsl.Internal import com.linecorp.kotlinjdsl.querymodel.jpql.join.impl.JpqlLeftJoin import com.linecorp.kotlinjdsl.render.RenderContext +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderClause import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializer import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter @@ -16,16 +17,17 @@ class JpqlLeftJoinSerializer : JpqlSerializer> { override fun serialize(part: JpqlLeftJoin<*>, writer: JpqlWriter, context: RenderContext) { val delegate = context.getValue(JpqlRenderSerializer) - writer.write("LEFT JOIN") writer.write(" ") - delegate.serialize(part.entity, writer, context) + val newJoinContext = context + JpqlRenderClause.Join + delegate.serialize(part.entity, writer, newJoinContext) writer.write(" ") writer.write("ON") writer.write(" ") - delegate.serialize(part.on, writer, context) + val newOnContext = context + JpqlRenderClause.On + delegate.serialize(part.on, writer, newOnContext) } } diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerAssociationFetchJoinSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerAssociationFetchJoinSerializerTest.kt index 7c2d2426a..aeef7bfc8 100644 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerAssociationFetchJoinSerializerTest.kt +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerAssociationFetchJoinSerializerTest.kt @@ -8,6 +8,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.path.Paths import com.linecorp.kotlinjdsl.querymodel.jpql.predicate.Predicates import com.linecorp.kotlinjdsl.render.TestRenderContext import com.linecorp.kotlinjdsl.render.jpql.entity.book.Book +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderClause import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializerTest import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter @@ -60,7 +61,7 @@ class JpqlInnerAssociationFetchJoinSerializerTest : WithAssertions { verifySequence { writer.write("INNER JOIN FETCH") writer.write(" ") - serializer.serialize(path1, writer, context) + serializer.serialize(path1, writer, context + JpqlRenderClause.Join) writer.write(" ") writer.write("AS") writer.write(" ") @@ -85,7 +86,7 @@ class JpqlInnerAssociationFetchJoinSerializerTest : WithAssertions { verifySequence { writer.write("INNER JOIN FETCH") writer.write(" ") - serializer.serialize(path1, writer, context) + serializer.serialize(path1, writer, context + JpqlRenderClause.Join) writer.write(" ") writer.write("AS") writer.write(" ") @@ -93,7 +94,7 @@ class JpqlInnerAssociationFetchJoinSerializerTest : WithAssertions { writer.write(" ") writer.write("ON") writer.write(" ") - serializer.serialize(predicate1, writer, context) + serializer.serialize(predicate1, writer, context + JpqlRenderClause.On) } } } diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerAssociationJoinSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerAssociationJoinSerializerTest.kt index dba80dcd0..88c25fc9b 100644 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerAssociationJoinSerializerTest.kt +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerAssociationJoinSerializerTest.kt @@ -8,6 +8,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.path.Paths import com.linecorp.kotlinjdsl.querymodel.jpql.predicate.Predicates import com.linecorp.kotlinjdsl.render.TestRenderContext import com.linecorp.kotlinjdsl.render.jpql.entity.book.Book +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderClause import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializerTest import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter @@ -60,7 +61,7 @@ class JpqlInnerAssociationJoinSerializerTest : WithAssertions { verifySequence { writer.write("INNER JOIN") writer.write(" ") - serializer.serialize(path1, writer, context) + serializer.serialize(path1, writer, context + JpqlRenderClause.Join) writer.write(" ") writer.write("AS") writer.write(" ") @@ -85,7 +86,7 @@ class JpqlInnerAssociationJoinSerializerTest : WithAssertions { verifySequence { writer.write("INNER JOIN") writer.write(" ") - serializer.serialize(path1, writer, context) + serializer.serialize(path1, writer, context + JpqlRenderClause.Join) writer.write(" ") writer.write("AS") writer.write(" ") @@ -93,7 +94,7 @@ class JpqlInnerAssociationJoinSerializerTest : WithAssertions { writer.write(" ") writer.write("ON") writer.write(" ") - serializer.serialize(predicate1, writer, context) + serializer.serialize(predicate1, writer, context + JpqlRenderClause.On) } } } diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerFetchJoinSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerFetchJoinSerializerTest.kt index bbf3a930e..d5d77e31d 100644 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerFetchJoinSerializerTest.kt +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerFetchJoinSerializerTest.kt @@ -8,6 +8,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.predicate.Predicates import com.linecorp.kotlinjdsl.render.TestRenderContext import com.linecorp.kotlinjdsl.render.jpql.entity.author.Author import com.linecorp.kotlinjdsl.render.jpql.entity.book.BookAuthor +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderClause import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializerTest import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter @@ -58,11 +59,11 @@ class JpqlInnerFetchJoinSerializerTest : WithAssertions { verifySequence { writer.write("INNER JOIN FETCH") writer.write(" ") - serializer.serialize(part.entity, writer, context) + serializer.serialize(part.entity, writer, context + JpqlRenderClause.Join) writer.write(" ") writer.write("ON") writer.write(" ") - serializer.serialize(part.on, writer, context) + serializer.serialize(part.on, writer, context + JpqlRenderClause.On) } } } diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerJoinSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerJoinSerializerTest.kt index 78928eabc..635290f6d 100644 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerJoinSerializerTest.kt +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlInnerJoinSerializerTest.kt @@ -8,6 +8,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.predicate.Predicates import com.linecorp.kotlinjdsl.render.TestRenderContext import com.linecorp.kotlinjdsl.render.jpql.entity.author.Author import com.linecorp.kotlinjdsl.render.jpql.entity.book.BookAuthor +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderClause import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializerTest import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter @@ -58,11 +59,11 @@ class JpqlInnerJoinSerializerTest : WithAssertions { verifySequence { writer.write("INNER JOIN") writer.write(" ") - serializer.serialize(part.entity, writer, context) + serializer.serialize(part.entity, writer, context + JpqlRenderClause.Join) writer.write(" ") writer.write("ON") writer.write(" ") - serializer.serialize(part.on, writer, context) + serializer.serialize(part.on, writer, context + JpqlRenderClause.On) } } } diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftAssociationFetchJoinSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftAssociationFetchJoinSerializerTest.kt index 9938ec166..06791918f 100644 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftAssociationFetchJoinSerializerTest.kt +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftAssociationFetchJoinSerializerTest.kt @@ -8,6 +8,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.path.Paths import com.linecorp.kotlinjdsl.querymodel.jpql.predicate.Predicates import com.linecorp.kotlinjdsl.render.TestRenderContext import com.linecorp.kotlinjdsl.render.jpql.entity.book.Book +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderClause import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializerTest import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter @@ -60,7 +61,7 @@ class JpqlLeftAssociationFetchJoinSerializerTest : WithAssertions { verifySequence { writer.write("LEFT JOIN FETCH") writer.write(" ") - serializer.serialize(path1, writer, context) + serializer.serialize(path1, writer, context + JpqlRenderClause.Join) writer.write(" ") writer.write("AS") writer.write(" ") @@ -85,7 +86,7 @@ class JpqlLeftAssociationFetchJoinSerializerTest : WithAssertions { verifySequence { writer.write("LEFT JOIN FETCH") writer.write(" ") - serializer.serialize(path1, writer, context) + serializer.serialize(path1, writer, context + JpqlRenderClause.Join) writer.write(" ") writer.write("AS") writer.write(" ") @@ -93,7 +94,7 @@ class JpqlLeftAssociationFetchJoinSerializerTest : WithAssertions { writer.write(" ") writer.write("ON") writer.write(" ") - serializer.serialize(predicate1, writer, context) + serializer.serialize(predicate1, writer, context + JpqlRenderClause.On) } } } diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftAssociationJoinSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftAssociationJoinSerializerTest.kt index 98516bd27..9d84ac321 100644 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftAssociationJoinSerializerTest.kt +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftAssociationJoinSerializerTest.kt @@ -8,6 +8,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.path.Paths import com.linecorp.kotlinjdsl.querymodel.jpql.predicate.Predicates import com.linecorp.kotlinjdsl.render.TestRenderContext import com.linecorp.kotlinjdsl.render.jpql.entity.book.Book +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderClause import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializerTest import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter @@ -60,7 +61,7 @@ class JpqlLeftAssociationJoinSerializerTest : WithAssertions { verifySequence { writer.write("LEFT JOIN") writer.write(" ") - serializer.serialize(path1, writer, context) + serializer.serialize(path1, writer, context + JpqlRenderClause.Join) writer.write(" ") writer.write("AS") writer.write(" ") @@ -85,7 +86,7 @@ class JpqlLeftAssociationJoinSerializerTest : WithAssertions { verifySequence { writer.write("LEFT JOIN") writer.write(" ") - serializer.serialize(path1, writer, context) + serializer.serialize(path1, writer, context + JpqlRenderClause.Join) writer.write(" ") writer.write("AS") writer.write(" ") @@ -93,7 +94,7 @@ class JpqlLeftAssociationJoinSerializerTest : WithAssertions { writer.write(" ") writer.write("ON") writer.write(" ") - serializer.serialize(predicate1, writer, context) + serializer.serialize(predicate1, writer, context + JpqlRenderClause.On) } } } diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftFetchJoinSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftFetchJoinSerializerTest.kt index 6ca68eb99..c08ed646f 100644 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftFetchJoinSerializerTest.kt +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftFetchJoinSerializerTest.kt @@ -8,6 +8,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.predicate.Predicates import com.linecorp.kotlinjdsl.render.TestRenderContext import com.linecorp.kotlinjdsl.render.jpql.entity.author.Author import com.linecorp.kotlinjdsl.render.jpql.entity.book.BookAuthor +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderClause import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializerTest import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter @@ -58,11 +59,11 @@ class JpqlLeftFetchJoinSerializerTest : WithAssertions { verifySequence { writer.write("LEFT JOIN FETCH") writer.write(" ") - serializer.serialize(entity1, writer, context) + serializer.serialize(entity1, writer, context + JpqlRenderClause.Join) writer.write(" ") writer.write("ON") writer.write(" ") - serializer.serialize(predicate1, writer, context) + serializer.serialize(predicate1, writer, context + JpqlRenderClause.On) } } } diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftJoinSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftJoinSerializerTest.kt index 578c768c2..aaff90240 100644 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftJoinSerializerTest.kt +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLeftJoinSerializerTest.kt @@ -8,6 +8,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.predicate.Predicates import com.linecorp.kotlinjdsl.render.TestRenderContext import com.linecorp.kotlinjdsl.render.jpql.entity.author.Author import com.linecorp.kotlinjdsl.render.jpql.entity.book.BookAuthor +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderClause import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializerTest import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter @@ -58,11 +59,11 @@ class JpqlLeftJoinSerializerTest : WithAssertions { verifySequence { writer.write("LEFT JOIN") writer.write(" ") - serializer.serialize(entity1, writer, context) + serializer.serialize(entity1, writer, context + JpqlRenderClause.Join) writer.write(" ") writer.write("ON") writer.write(" ") - serializer.serialize(predicate1, writer, context) + serializer.serialize(predicate1, writer, context + JpqlRenderClause.On) } } } From ca20cbfdfe11cd51bc53028e3e1d9e444a4f7369 Mon Sep 17 00:00:00 2001 From: real-dev Date: Mon, 24 Jun 2024 11:21:58 +0900 Subject: [PATCH 3/4] fix: modify version information of join/on clause 3.0.0 to 3.5.1 --- .../kotlinjdsl/render/jpql/serializer/JpqlRenderClause.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/JpqlRenderClause.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/JpqlRenderClause.kt index ea96f96bb..785708b82 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/JpqlRenderClause.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/JpqlRenderClause.kt @@ -26,10 +26,10 @@ sealed class JpqlRenderClause : AbstractRenderContextElement(Key) { @SinceJdsl("3.0.0") open fun isFrom(): Boolean = false - @SinceJdsl("3.0.0") + @SinceJdsl("3.5.1") open fun isJoin(): Boolean = false - @SinceJdsl("3.0.0") + @SinceJdsl("3.5.1") open fun isOn(): Boolean = false @SinceJdsl("3.0.0") @@ -79,14 +79,14 @@ sealed class JpqlRenderClause : AbstractRenderContextElement(Key) { override fun toString(): String = "From" } - @SinceJdsl("3.5.0") + @SinceJdsl("3.5.1") object Join : JpqlRenderClause() { override fun isJoin(): Boolean = true override fun toString(): String = "Join" } - @SinceJdsl("3.5.0") + @SinceJdsl("3.5.1") object On : JpqlRenderClause() { override fun isOn(): Boolean = true From 30b32604519d4b7ecc66428f7e1a8d8b51d06a0b Mon Sep 17 00:00:00 2001 From: real-dev Date: Tue, 25 Jun 2024 17:35:39 +0900 Subject: [PATCH 4/4] fix: append clause condition to derive entity serializer --- .../render/jpql/serializer/impl/JpqlDerivedEntitySerializer.kt | 1 + .../jpql/serializer/impl/JpqlDerivedEntitySerializerTest.kt | 2 ++ 2 files changed, 3 insertions(+) diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlDerivedEntitySerializer.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlDerivedEntitySerializer.kt index 3be5b16e1..e0eccba6e 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlDerivedEntitySerializer.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlDerivedEntitySerializer.kt @@ -24,6 +24,7 @@ class JpqlDerivedEntitySerializer : JpqlSerializer> { if ( (statement.isSelect() && clause.isFrom()) || + (statement.isSelect() && clause.isJoin()) || (statement.isUpdate() && clause.isUpdate()) || (statement.isDelete() && clause.isDeleteFrom()) ) { diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlDerivedEntitySerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlDerivedEntitySerializerTest.kt index 84eb78781..a9720a80b 100644 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlDerivedEntitySerializerTest.kt +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlDerivedEntitySerializerTest.kt @@ -51,6 +51,7 @@ class JpqlDerivedEntitySerializerTest : WithAssertions { @StatementClauseSource( includes = [ StatementClause(JpqlRenderStatement.Select::class, JpqlRenderClause.From::class), + StatementClause(JpqlRenderStatement.Select::class, JpqlRenderClause.Join::class), StatementClause(JpqlRenderStatement.Update::class, JpqlRenderClause.Update::class), StatementClause(JpqlRenderStatement.Delete::class, JpqlRenderClause.DeleteFrom::class), ], @@ -84,6 +85,7 @@ class JpqlDerivedEntitySerializerTest : WithAssertions { @StatementClauseSource( excludes = [ StatementClause(JpqlRenderStatement.Select::class, JpqlRenderClause.From::class), + StatementClause(JpqlRenderStatement.Select::class, JpqlRenderClause.Join::class), StatementClause(JpqlRenderStatement.Update::class, JpqlRenderClause.Update::class), StatementClause(JpqlRenderStatement.Delete::class, JpqlRenderClause.DeleteFrom::class), ],