From 1bc08e109e039d786135cd0cec7cdacef3219741 Mon Sep 17 00:00:00 2001 From: Gyeongtae Noh Date: Tue, 6 Feb 2024 17:49:15 +0900 Subject: [PATCH 1/6] feat: supporting localDateTime function for datetime function --- docs/en/jpql-with-kotlin-jdsl/expressions.md | 2 +- docs/ko/jpql-with-kotlin-jdsl/expressions.md | 2 +- .../com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt | 9 ++++ .../jpql/LocalDateTimeExpressionDslTest.kt | 25 +++++++++ .../querymodel/jpql/expression/Expressions.kt | 10 ++++ .../impl/LocalDateTimeExpression.kt | 6 +++ .../jpql/expression/ExpressionsTest.kt | 12 +++++ .../render/jpql/JpqlRenderContext.kt | 2 + .../impl/JpqlLocalDateTimeSerializer.kt | 27 ++++++++++ ...qlLocalDateTimeExpressionSerializerTest.kt | 54 +++++++++++++++++++ 10 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/LocalDateTimeExpressionDslTest.kt create mode 100644 query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/LocalDateTimeExpression.kt create mode 100644 render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt create mode 100644 render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeExpressionSerializerTest.kt diff --git a/docs/en/jpql-with-kotlin-jdsl/expressions.md b/docs/en/jpql-with-kotlin-jdsl/expressions.md index ec118d430..4c10c37a9 100644 --- a/docs/en/jpql-with-kotlin-jdsl/expressions.md +++ b/docs/en/jpql-with-kotlin-jdsl/expressions.md @@ -228,7 +228,7 @@ Kotlin JDSL provides a series of functions to support built-in functions in JPA. | CURRENT\_TIMESTAMP | not yet | | LOCAL DATE | not yet | | LOCAL TIME | not yet | -| LOCAL DATETIME | not yet | +| LOCAL DATETIME | support | | EXTRACT | not yet | ### Database function diff --git a/docs/ko/jpql-with-kotlin-jdsl/expressions.md b/docs/ko/jpql-with-kotlin-jdsl/expressions.md index e77eadfec..2b7fab949 100644 --- a/docs/ko/jpql-with-kotlin-jdsl/expressions.md +++ b/docs/ko/jpql-with-kotlin-jdsl/expressions.md @@ -226,7 +226,7 @@ Kotlin JDSL은 JPA에서 제공하는 여러 함수들을 지원하기 위함 | CURRENT\_TIMESTAMP | not yet | | LOCAL DATE | not yet | | LOCAL TIME | not yet | -| LOCAL DATETIME | not yet | +| LOCAL DATETIME | support | | EXTRACT | not yet | ### Database function diff --git a/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt b/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt index bc4ee6d0a..9f2c8b364 100644 --- a/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt +++ b/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt @@ -44,6 +44,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.select.SelectQuery import com.linecorp.kotlinjdsl.querymodel.jpql.sort.Sort import java.math.BigDecimal import java.math.BigInteger +import java.time.LocalDateTime import kotlin.internal.Exact import kotlin.internal.LowPriorityInOverloadResolution import kotlin.reflect.KClass @@ -166,6 +167,14 @@ open class Jpql : JpqlDsl { return Expressions.nullLiteral() } + /** + * Creates a datetime expression with the localDateTime. + */ + @SinceJdsl("3.4.0") + fun localDateTime(): Expression { + return Expressions.localDateTime() + } + /** * Creates a parameter expression with the name. */ diff --git a/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/LocalDateTimeExpressionDslTest.kt b/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/LocalDateTimeExpressionDslTest.kt new file mode 100644 index 000000000..6cc918217 --- /dev/null +++ b/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/LocalDateTimeExpressionDslTest.kt @@ -0,0 +1,25 @@ +package com.linecorp.kotlinjdsl.dsl.jpql + +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expression +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expressions +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test +import java.time.LocalDateTime + +class LocalDateTimeExpressionDslTest { + + @Test + fun `localDateTime to support LOCAL DATETIME in jpql`() { + // when + val expression = queryPart { + localDateTime() + }.toExpression() + + val actual: Expression = expression // for type check + + // then + val expected = Expressions.localDateTime() + + assertThat(actual).isEqualTo(expected) + } +} diff --git a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt index 25f378881..7a3ff9872 100644 --- a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt +++ b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt @@ -38,12 +38,14 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlTrimLeading import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlTrimTrailing import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlUpper import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlValue +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.LocalDateTimeExpression import com.linecorp.kotlinjdsl.querymodel.jpql.path.Path import com.linecorp.kotlinjdsl.querymodel.jpql.predicate.Predicate import com.linecorp.kotlinjdsl.querymodel.jpql.select.SelectQuery import com.linecorp.kotlinjdsl.querymodel.jpql.select.impl.JpqlSelectQuery import java.math.BigDecimal import java.math.BigInteger +import java.time.LocalDateTime import kotlin.internal.Exact import kotlin.reflect.KClass @@ -149,6 +151,14 @@ object Expressions { return JpqlLiteral.NullLiteral as Expression } + /** + * Create a LOCAL DATETIME Expression by LocalDateTime. + */ + @SinceJdsl("3.4.0") + fun localDateTime(): Expression { + return LocalDateTimeExpression + } + /** * Creates a parameter expression with the name. */ diff --git a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/LocalDateTimeExpression.kt b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/LocalDateTimeExpression.kt new file mode 100644 index 000000000..13d2ca898 --- /dev/null +++ b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/LocalDateTimeExpression.kt @@ -0,0 +1,6 @@ +package com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl + +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expression +import java.time.LocalDateTime + +object LocalDateTimeExpression : Expression diff --git a/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt b/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt index fae31a8ba..542c33368 100644 --- a/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt +++ b/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt @@ -40,6 +40,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlTrimLeading import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlTrimTrailing import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlUpper import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlValue +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.LocalDateTimeExpression import com.linecorp.kotlinjdsl.querymodel.jpql.path.Paths import com.linecorp.kotlinjdsl.querymodel.jpql.predicate.Predicates import com.linecorp.kotlinjdsl.querymodel.jpql.select.impl.JpqlSelectQuery @@ -887,4 +888,15 @@ class ExpressionsTest : WithAssertions { assertThat(actual).isEqualTo(expected) } + + @Test + fun `localDateTime to support LOCAL DATETIME in jpql`() { + // when + val actual = Expressions.localDateTime() + + // then + val expected = LocalDateTimeExpression.toExpression() + + assertThat(actual).isEqualTo(expected) + } } diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/JpqlRenderContext.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/JpqlRenderContext.kt index ed5e4e135..ce5f6dc5d 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/JpqlRenderContext.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/JpqlRenderContext.kt @@ -69,6 +69,7 @@ import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLessThanOrEqualTo import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLessThanSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLikeSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLiteralSerializer +import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLocalDateTimeSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLocateSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLowerSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlMaxSerializer @@ -314,6 +315,7 @@ private class DefaultModule : JpqlRenderModule { JpqlLessThanSerializer(), JpqlLikeSerializer(), JpqlLiteralSerializer(), + JpqlLocalDateTimeSerializer(), JpqlLocateSerializer(), JpqlLowerSerializer(), JpqlMaxSerializer(), diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt new file mode 100644 index 000000000..26d2a1a34 --- /dev/null +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt @@ -0,0 +1,27 @@ +package com.linecorp.kotlinjdsl.render.jpql.serializer.impl + +import com.linecorp.kotlinjdsl.Internal +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.LocalDateTimeExpression +import com.linecorp.kotlinjdsl.render.RenderContext +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializer +import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter +import kotlin.reflect.KClass + +@Internal +class JpqlLocalDateTimeSerializer : JpqlSerializer { + + override fun handledType(): KClass { + return LocalDateTimeExpression::class + } + + override fun serialize(part: LocalDateTimeExpression, writer: JpqlWriter, context: RenderContext) { + val delegate = context.getValue(JpqlRenderSerializer) + + writer.write("LOCAL DATETIME") + + writer.writeParentheses { + delegate.serialize(part, writer, context) + } + } +} diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeExpressionSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeExpressionSerializerTest.kt new file mode 100644 index 000000000..098a8d629 --- /dev/null +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeExpressionSerializerTest.kt @@ -0,0 +1,54 @@ +package com.linecorp.kotlinjdsl.render.jpql.serializer.impl + +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expressions +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.LocalDateTimeExpression +import com.linecorp.kotlinjdsl.render.TestRenderContext +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializerTest +import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter +import io.mockk.every +import io.mockk.impl.annotations.MockK +import io.mockk.just +import io.mockk.runs +import io.mockk.verifySequence +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test + +@JpqlSerializerTest +class JpqlLocalDateTimeExpressionSerializerTest { + private val sut = JpqlLocalDateTimeSerializer() + + @MockK + private lateinit var writer: JpqlWriter + + @MockK + private lateinit var serializer: JpqlRenderSerializer + + @Test + fun `handle type only JpqlLocalDateTime`() { + // when + val actual = sut.handledType() + + // then + assertThat(actual).isEqualTo(LocalDateTimeExpression::class) + } + + @Test + fun `serialize LOCAL DATETIME function in Jpql`() { + // given + every { writer.write(any()) } just runs + + val part = Expressions.localDateTime() as LocalDateTimeExpression + val context = TestRenderContext(serializer) + + // when + sut.serialize(part, writer, context) + + // then + verifySequence { + writer.write("LOCAL DATETIME") + writer.writeParentheses(any()) + serializer.serialize(part, writer, context) + } + } +} From fe672fe2a718315d66c602d1bb74da6a1e4913f0 Mon Sep 17 00:00:00 2001 From: Gyeongtae Noh Date: Wed, 7 Feb 2024 20:29:32 +0900 Subject: [PATCH 2/6] fix: modify docs & comment and method name --- docs/en/jpql-with-kotlin-jdsl/expressions.md | 2 +- docs/ko/jpql-with-kotlin-jdsl/expressions.md | 2 +- .../com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt | 18 ++++++++++-------- .../LocalDateTimeExpressionDslTest.kt | 5 +++-- .../querymodel/jpql/expression/Expressions.kt | 16 ++++++++-------- .../expression/impl/LocalDateTimeExpression.kt | 2 ++ 6 files changed, 25 insertions(+), 20 deletions(-) rename dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/{ => expression}/LocalDateTimeExpressionDslTest.kt (82%) diff --git a/docs/en/jpql-with-kotlin-jdsl/expressions.md b/docs/en/jpql-with-kotlin-jdsl/expressions.md index 4c10c37a9..ec118d430 100644 --- a/docs/en/jpql-with-kotlin-jdsl/expressions.md +++ b/docs/en/jpql-with-kotlin-jdsl/expressions.md @@ -228,7 +228,7 @@ Kotlin JDSL provides a series of functions to support built-in functions in JPA. | CURRENT\_TIMESTAMP | not yet | | LOCAL DATE | not yet | | LOCAL TIME | not yet | -| LOCAL DATETIME | support | +| LOCAL DATETIME | not yet | | EXTRACT | not yet | ### Database function diff --git a/docs/ko/jpql-with-kotlin-jdsl/expressions.md b/docs/ko/jpql-with-kotlin-jdsl/expressions.md index 2b7fab949..e77eadfec 100644 --- a/docs/ko/jpql-with-kotlin-jdsl/expressions.md +++ b/docs/ko/jpql-with-kotlin-jdsl/expressions.md @@ -226,7 +226,7 @@ Kotlin JDSL은 JPA에서 제공하는 여러 함수들을 지원하기 위함 | CURRENT\_TIMESTAMP | not yet | | LOCAL DATE | not yet | | LOCAL TIME | not yet | -| LOCAL DATETIME | support | +| LOCAL DATETIME | not yet | | EXTRACT | not yet | ### Database function diff --git a/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt b/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt index 9f2c8b364..e9c750eec 100644 --- a/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt +++ b/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt @@ -167,14 +167,6 @@ open class Jpql : JpqlDsl { return Expressions.nullLiteral() } - /** - * Creates a datetime expression with the localDateTime. - */ - @SinceJdsl("3.4.0") - fun localDateTime(): Expression { - return Expressions.localDateTime() - } - /** * Creates a parameter expression with the name. */ @@ -2905,4 +2897,14 @@ open class Jpql : JpqlDsl { fun deleteFrom(entity: Entityable): DeleteQueryWhereStep { return DeleteQueryDsl(entity.toEntity()) } + + /** + * Creates an expression that represents the local datetime. + * + * This is the same as ```LOCAL DATETIME```. + */ + @SinceJdsl("3.4.0") + fun localDateTime(): Expression { + return Expressions.localDateTime() + } } diff --git a/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/LocalDateTimeExpressionDslTest.kt b/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/LocalDateTimeExpressionDslTest.kt similarity index 82% rename from dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/LocalDateTimeExpressionDslTest.kt rename to dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/LocalDateTimeExpressionDslTest.kt index 6cc918217..db21a941a 100644 --- a/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/LocalDateTimeExpressionDslTest.kt +++ b/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/LocalDateTimeExpressionDslTest.kt @@ -1,5 +1,6 @@ -package com.linecorp.kotlinjdsl.dsl.jpql +package com.linecorp.kotlinjdsl.dsl.jpql.expression +import com.linecorp.kotlinjdsl.dsl.jpql.queryPart import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expression import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expressions import org.assertj.core.api.Assertions.assertThat @@ -9,7 +10,7 @@ import java.time.LocalDateTime class LocalDateTimeExpressionDslTest { @Test - fun `localDateTime to support LOCAL DATETIME in jpql`() { + fun localDateTime() { // when val expression = queryPart { localDateTime() diff --git a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt index 7a3ff9872..9ee25cf02 100644 --- a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt +++ b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt @@ -151,14 +151,6 @@ object Expressions { return JpqlLiteral.NullLiteral as Expression } - /** - * Create a LOCAL DATETIME Expression by LocalDateTime. - */ - @SinceJdsl("3.4.0") - fun localDateTime(): Expression { - return LocalDateTimeExpression - } - /** * Creates a parameter expression with the name. */ @@ -643,4 +635,12 @@ object Expressions { fun parentheses(expr: Expression): Expression { return JpqlExpressionParentheses(expr) } + + /** + * Create a LOCAL DATETIME Expression by LocalDateTime. + */ + @SinceJdsl("3.4.0") + fun localDateTime(): Expression { + return LocalDateTimeExpression + } } diff --git a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/LocalDateTimeExpression.kt b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/LocalDateTimeExpression.kt index 13d2ca898..cfee5ad04 100644 --- a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/LocalDateTimeExpression.kt +++ b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/LocalDateTimeExpression.kt @@ -1,6 +1,8 @@ package com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl +import com.linecorp.kotlinjdsl.Internal import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expression import java.time.LocalDateTime +@Internal object LocalDateTimeExpression : Expression From 9167ca0b2758fddae2887e52de43d8f5635f2eed Mon Sep 17 00:00:00 2001 From: Gyeongtae Noh Date: Wed, 7 Feb 2024 23:44:00 +0900 Subject: [PATCH 3/6] fix: modify comment & method name --- ...ressionDslTest.kt => JpqlLocalDateTimeDslTest.kt} | 2 +- .../querymodel/jpql/expression/Expressions.kt | 6 +++--- ...calDateTimeExpression.kt => JpqlLocalDateTime.kt} | 2 +- .../querymodel/jpql/expression/ExpressionsTest.kt | 4 ++-- .../serializer/impl/JpqlLocalDateTimeSerializer.kt | 10 +++++----- ...est.kt => JpqlJpqlLocalDateTimeSerializerTest.kt} | 12 ++++++------ 6 files changed, 18 insertions(+), 18 deletions(-) rename dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/{LocalDateTimeExpressionDslTest.kt => JpqlLocalDateTimeDslTest.kt} (94%) rename query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/{LocalDateTimeExpression.kt => JpqlLocalDateTime.kt} (78%) rename render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/{JpqlLocalDateTimeExpressionSerializerTest.kt => JpqlJpqlLocalDateTimeSerializerTest.kt} (77%) diff --git a/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/LocalDateTimeExpressionDslTest.kt b/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/JpqlLocalDateTimeDslTest.kt similarity index 94% rename from dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/LocalDateTimeExpressionDslTest.kt rename to dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/JpqlLocalDateTimeDslTest.kt index db21a941a..0822412d8 100644 --- a/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/LocalDateTimeExpressionDslTest.kt +++ b/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/JpqlLocalDateTimeDslTest.kt @@ -7,7 +7,7 @@ import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test import java.time.LocalDateTime -class LocalDateTimeExpressionDslTest { +class JpqlLocalDateTimeDslTest { @Test fun localDateTime() { diff --git a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt index 9ee25cf02..1f9674141 100644 --- a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt +++ b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt @@ -17,6 +17,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlExpressionPar import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlFunctionExpression import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLength import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLiteral +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDateTime import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocate import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLower import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlMax @@ -38,7 +39,6 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlTrimLeading import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlTrimTrailing import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlUpper import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlValue -import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.LocalDateTimeExpression import com.linecorp.kotlinjdsl.querymodel.jpql.path.Path import com.linecorp.kotlinjdsl.querymodel.jpql.predicate.Predicate import com.linecorp.kotlinjdsl.querymodel.jpql.select.SelectQuery @@ -637,10 +637,10 @@ object Expressions { } /** - * Create a LOCAL DATETIME Expression by LocalDateTime. + * Creates an expression that represents the local datetime in jpql. */ @SinceJdsl("3.4.0") fun localDateTime(): Expression { - return LocalDateTimeExpression + return JpqlLocalDateTime } } diff --git a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/LocalDateTimeExpression.kt b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/JpqlLocalDateTime.kt similarity index 78% rename from query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/LocalDateTimeExpression.kt rename to query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/JpqlLocalDateTime.kt index cfee5ad04..6c72cc7e4 100644 --- a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/LocalDateTimeExpression.kt +++ b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/JpqlLocalDateTime.kt @@ -5,4 +5,4 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expression import java.time.LocalDateTime @Internal -object LocalDateTimeExpression : Expression +object JpqlLocalDateTime : Expression diff --git a/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt b/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt index 542c33368..aaf18ee89 100644 --- a/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt +++ b/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt @@ -19,6 +19,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlExpressionPar import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlFunctionExpression import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLength import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLiteral +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDateTime import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocate import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLower import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlMax @@ -40,7 +41,6 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlTrimLeading import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlTrimTrailing import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlUpper import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlValue -import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.LocalDateTimeExpression import com.linecorp.kotlinjdsl.querymodel.jpql.path.Paths import com.linecorp.kotlinjdsl.querymodel.jpql.predicate.Predicates import com.linecorp.kotlinjdsl.querymodel.jpql.select.impl.JpqlSelectQuery @@ -895,7 +895,7 @@ class ExpressionsTest : WithAssertions { val actual = Expressions.localDateTime() // then - val expected = LocalDateTimeExpression.toExpression() + val expected = JpqlLocalDateTime.toExpression() assertThat(actual).isEqualTo(expected) } diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt index 26d2a1a34..8a38ce34c 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt @@ -1,7 +1,7 @@ package com.linecorp.kotlinjdsl.render.jpql.serializer.impl import com.linecorp.kotlinjdsl.Internal -import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.LocalDateTimeExpression +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDateTime import com.linecorp.kotlinjdsl.render.RenderContext import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializer @@ -9,13 +9,13 @@ import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter import kotlin.reflect.KClass @Internal -class JpqlLocalDateTimeSerializer : JpqlSerializer { +class JpqlLocalDateTimeSerializer : JpqlSerializer { - override fun handledType(): KClass { - return LocalDateTimeExpression::class + override fun handledType(): KClass { + return JpqlLocalDateTime::class } - override fun serialize(part: LocalDateTimeExpression, writer: JpqlWriter, context: RenderContext) { + override fun serialize(part: JpqlLocalDateTime, writer: JpqlWriter, context: RenderContext) { val delegate = context.getValue(JpqlRenderSerializer) writer.write("LOCAL DATETIME") diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeExpressionSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlJpqlLocalDateTimeSerializerTest.kt similarity index 77% rename from render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeExpressionSerializerTest.kt rename to render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlJpqlLocalDateTimeSerializerTest.kt index 098a8d629..1e70b585e 100644 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeExpressionSerializerTest.kt +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlJpqlLocalDateTimeSerializerTest.kt @@ -1,7 +1,7 @@ package com.linecorp.kotlinjdsl.render.jpql.serializer.impl import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expressions -import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.LocalDateTimeExpression +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDateTime import com.linecorp.kotlinjdsl.render.TestRenderContext import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializerTest @@ -15,7 +15,7 @@ import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test @JpqlSerializerTest -class JpqlLocalDateTimeExpressionSerializerTest { +class JpqlJpqlLocalDateTimeSerializerTest { private val sut = JpqlLocalDateTimeSerializer() @MockK @@ -25,20 +25,20 @@ class JpqlLocalDateTimeExpressionSerializerTest { private lateinit var serializer: JpqlRenderSerializer @Test - fun `handle type only JpqlLocalDateTime`() { + fun handle() { // when val actual = sut.handledType() // then - assertThat(actual).isEqualTo(LocalDateTimeExpression::class) + assertThat(actual).isEqualTo(JpqlLocalDateTime::class) } @Test - fun `serialize LOCAL DATETIME function in Jpql`() { + fun serialize() { // given every { writer.write(any()) } just runs - val part = Expressions.localDateTime() as LocalDateTimeExpression + val part = Expressions.localDateTime() as JpqlLocalDateTime val context = TestRenderContext(serializer) // when From 156bbc90e7cbc1ac5ff863b535611eca6cd6e76f Mon Sep 17 00:00:00 2001 From: Gyeongtae Noh Date: Thu, 8 Feb 2024 15:54:29 +0900 Subject: [PATCH 4/6] fix: modify comment & method name --- .../kotlinjdsl/querymodel/jpql/expression/Expressions.kt | 2 +- .../querymodel/jpql/expression/ExpressionsTest.kt | 2 +- .../jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt | 7 ------- .../serializer/impl/JpqlJpqlLocalDateTimeSerializerTest.kt | 2 -- 4 files changed, 2 insertions(+), 11 deletions(-) diff --git a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt index 1f9674141..c77c5adad 100644 --- a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt +++ b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt @@ -637,7 +637,7 @@ object Expressions { } /** - * Creates an expression that represents the local datetime in jpql. + * Creates an expression that represents the local datetime. */ @SinceJdsl("3.4.0") fun localDateTime(): Expression { diff --git a/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt b/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt index aaf18ee89..f2fd8812b 100644 --- a/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt +++ b/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt @@ -890,7 +890,7 @@ class ExpressionsTest : WithAssertions { } @Test - fun `localDateTime to support LOCAL DATETIME in jpql`() { + fun localDateTime() { // when val actual = Expressions.localDateTime() diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt index 8a38ce34c..f7a7caa33 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt @@ -3,7 +3,6 @@ package com.linecorp.kotlinjdsl.render.jpql.serializer.impl import com.linecorp.kotlinjdsl.Internal import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDateTime import com.linecorp.kotlinjdsl.render.RenderContext -import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializer import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter import kotlin.reflect.KClass @@ -16,12 +15,6 @@ class JpqlLocalDateTimeSerializer : JpqlSerializer { } override fun serialize(part: JpqlLocalDateTime, writer: JpqlWriter, context: RenderContext) { - val delegate = context.getValue(JpqlRenderSerializer) - writer.write("LOCAL DATETIME") - - writer.writeParentheses { - delegate.serialize(part, writer, context) - } } } diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlJpqlLocalDateTimeSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlJpqlLocalDateTimeSerializerTest.kt index 1e70b585e..e97ae377b 100644 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlJpqlLocalDateTimeSerializerTest.kt +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlJpqlLocalDateTimeSerializerTest.kt @@ -47,8 +47,6 @@ class JpqlJpqlLocalDateTimeSerializerTest { // then verifySequence { writer.write("LOCAL DATETIME") - writer.writeParentheses(any()) - serializer.serialize(part, writer, context) } } } From 755c8d599e090c1713dcd4ef5f8420f0373b3145 Mon Sep 17 00:00:00 2001 From: "jonghyon.s" Date: Thu, 8 Feb 2024 16:30:28 +0900 Subject: [PATCH 5/6] Revert "Merge pull request #628 from ilgolf/feat/LocalDateTime" This reverts commit 6d838d6f94d83251a692a33b2dcf7975800bc6b2, reversing changes made to 4219a32d3c3d80249b44db5360ea0a973243e144. --- .../com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt | 11 ---- .../expression/JpqlLocalDateTimeDslTest.kt | 26 ---------- .../querymodel/jpql/expression/Expressions.kt | 10 ---- .../jpql/expression/impl/JpqlLocalDateTime.kt | 8 --- .../jpql/expression/ExpressionsTest.kt | 12 ----- .../render/jpql/JpqlRenderContext.kt | 2 - .../impl/JpqlLocalDateTimeSerializer.kt | 20 ------- .../JpqlJpqlLocalDateTimeSerializerTest.kt | 52 ------------------- 8 files changed, 141 deletions(-) delete mode 100644 dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/JpqlLocalDateTimeDslTest.kt delete mode 100644 query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/JpqlLocalDateTime.kt delete mode 100644 render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt delete mode 100644 render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlJpqlLocalDateTimeSerializerTest.kt diff --git a/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt b/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt index e9c750eec..bc4ee6d0a 100644 --- a/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt +++ b/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt @@ -44,7 +44,6 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.select.SelectQuery import com.linecorp.kotlinjdsl.querymodel.jpql.sort.Sort import java.math.BigDecimal import java.math.BigInteger -import java.time.LocalDateTime import kotlin.internal.Exact import kotlin.internal.LowPriorityInOverloadResolution import kotlin.reflect.KClass @@ -2897,14 +2896,4 @@ open class Jpql : JpqlDsl { fun deleteFrom(entity: Entityable): DeleteQueryWhereStep { return DeleteQueryDsl(entity.toEntity()) } - - /** - * Creates an expression that represents the local datetime. - * - * This is the same as ```LOCAL DATETIME```. - */ - @SinceJdsl("3.4.0") - fun localDateTime(): Expression { - return Expressions.localDateTime() - } } diff --git a/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/JpqlLocalDateTimeDslTest.kt b/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/JpqlLocalDateTimeDslTest.kt deleted file mode 100644 index 0822412d8..000000000 --- a/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/JpqlLocalDateTimeDslTest.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.linecorp.kotlinjdsl.dsl.jpql.expression - -import com.linecorp.kotlinjdsl.dsl.jpql.queryPart -import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expression -import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expressions -import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Test -import java.time.LocalDateTime - -class JpqlLocalDateTimeDslTest { - - @Test - fun localDateTime() { - // when - val expression = queryPart { - localDateTime() - }.toExpression() - - val actual: Expression = expression // for type check - - // then - val expected = Expressions.localDateTime() - - assertThat(actual).isEqualTo(expected) - } -} diff --git a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt index c77c5adad..25f378881 100644 --- a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt +++ b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt @@ -17,7 +17,6 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlExpressionPar import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlFunctionExpression import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLength import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLiteral -import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDateTime import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocate import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLower import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlMax @@ -45,7 +44,6 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.select.SelectQuery import com.linecorp.kotlinjdsl.querymodel.jpql.select.impl.JpqlSelectQuery import java.math.BigDecimal import java.math.BigInteger -import java.time.LocalDateTime import kotlin.internal.Exact import kotlin.reflect.KClass @@ -635,12 +633,4 @@ object Expressions { fun parentheses(expr: Expression): Expression { return JpqlExpressionParentheses(expr) } - - /** - * Creates an expression that represents the local datetime. - */ - @SinceJdsl("3.4.0") - fun localDateTime(): Expression { - return JpqlLocalDateTime - } } diff --git a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/JpqlLocalDateTime.kt b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/JpqlLocalDateTime.kt deleted file mode 100644 index 6c72cc7e4..000000000 --- a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/JpqlLocalDateTime.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl - -import com.linecorp.kotlinjdsl.Internal -import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expression -import java.time.LocalDateTime - -@Internal -object JpqlLocalDateTime : Expression diff --git a/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt b/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt index f2fd8812b..fae31a8ba 100644 --- a/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt +++ b/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt @@ -19,7 +19,6 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlExpressionPar import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlFunctionExpression import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLength import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLiteral -import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDateTime import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocate import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLower import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlMax @@ -888,15 +887,4 @@ class ExpressionsTest : WithAssertions { assertThat(actual).isEqualTo(expected) } - - @Test - fun localDateTime() { - // when - val actual = Expressions.localDateTime() - - // then - val expected = JpqlLocalDateTime.toExpression() - - assertThat(actual).isEqualTo(expected) - } } diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/JpqlRenderContext.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/JpqlRenderContext.kt index ce5f6dc5d..ed5e4e135 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/JpqlRenderContext.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/JpqlRenderContext.kt @@ -69,7 +69,6 @@ import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLessThanOrEqualTo import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLessThanSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLikeSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLiteralSerializer -import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLocalDateTimeSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLocateSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLowerSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlMaxSerializer @@ -315,7 +314,6 @@ private class DefaultModule : JpqlRenderModule { JpqlLessThanSerializer(), JpqlLikeSerializer(), JpqlLiteralSerializer(), - JpqlLocalDateTimeSerializer(), JpqlLocateSerializer(), JpqlLowerSerializer(), JpqlMaxSerializer(), diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt deleted file mode 100644 index f7a7caa33..000000000 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateTimeSerializer.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.linecorp.kotlinjdsl.render.jpql.serializer.impl - -import com.linecorp.kotlinjdsl.Internal -import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDateTime -import com.linecorp.kotlinjdsl.render.RenderContext -import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializer -import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter -import kotlin.reflect.KClass - -@Internal -class JpqlLocalDateTimeSerializer : JpqlSerializer { - - override fun handledType(): KClass { - return JpqlLocalDateTime::class - } - - override fun serialize(part: JpqlLocalDateTime, writer: JpqlWriter, context: RenderContext) { - writer.write("LOCAL DATETIME") - } -} diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlJpqlLocalDateTimeSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlJpqlLocalDateTimeSerializerTest.kt deleted file mode 100644 index e97ae377b..000000000 --- a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlJpqlLocalDateTimeSerializerTest.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.linecorp.kotlinjdsl.render.jpql.serializer.impl - -import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expressions -import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDateTime -import com.linecorp.kotlinjdsl.render.TestRenderContext -import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer -import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializerTest -import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.just -import io.mockk.runs -import io.mockk.verifySequence -import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Test - -@JpqlSerializerTest -class JpqlJpqlLocalDateTimeSerializerTest { - private val sut = JpqlLocalDateTimeSerializer() - - @MockK - private lateinit var writer: JpqlWriter - - @MockK - private lateinit var serializer: JpqlRenderSerializer - - @Test - fun handle() { - // when - val actual = sut.handledType() - - // then - assertThat(actual).isEqualTo(JpqlLocalDateTime::class) - } - - @Test - fun serialize() { - // given - every { writer.write(any()) } just runs - - val part = Expressions.localDateTime() as JpqlLocalDateTime - val context = TestRenderContext(serializer) - - // when - sut.serialize(part, writer, context) - - // then - verifySequence { - writer.write("LOCAL DATETIME") - } - } -} From 1aa657b8ab350cd078ee14459f2acde03099885b Mon Sep 17 00:00:00 2001 From: sian Date: Thu, 8 Feb 2024 17:22:42 +0900 Subject: [PATCH 6/6] feat: support Datetime function LOCAL DATE --- docs/en/jpql-with-kotlin-jdsl/expressions.md | 2 +- docs/ko/jpql-with-kotlin-jdsl/expressions.md | 2 +- .../com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt | 11 +++++ .../dsl/jpql/expression/LocalDateDslTest.kt | 26 +++++++++++ .../querymodel/jpql/expression/Expressions.kt | 10 ++++ .../jpql/expression/impl/JpqlLocalDate.kt | 8 ++++ .../jpql/expression/ExpressionsTest.kt | 12 +++++ .../render/jpql/JpqlRenderContext.kt | 2 + .../impl/JpqlLocalDateSerializer.kt | 20 ++++++++ .../impl/JpqlLocalDateSerializerTest.kt | 46 +++++++++++++++++++ 10 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/LocalDateDslTest.kt create mode 100644 query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/JpqlLocalDate.kt create mode 100644 render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateSerializer.kt create mode 100644 render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateSerializerTest.kt diff --git a/docs/en/jpql-with-kotlin-jdsl/expressions.md b/docs/en/jpql-with-kotlin-jdsl/expressions.md index ec118d430..76524477c 100644 --- a/docs/en/jpql-with-kotlin-jdsl/expressions.md +++ b/docs/en/jpql-with-kotlin-jdsl/expressions.md @@ -226,7 +226,7 @@ Kotlin JDSL provides a series of functions to support built-in functions in JPA. | CURRENT\_DATE | not yet | | CURRENT\_TIME | not yet | | CURRENT\_TIMESTAMP | not yet | -| LOCAL DATE | not yet | +| LOCAL DATE | support | | LOCAL TIME | not yet | | LOCAL DATETIME | not yet | | EXTRACT | not yet | diff --git a/docs/ko/jpql-with-kotlin-jdsl/expressions.md b/docs/ko/jpql-with-kotlin-jdsl/expressions.md index e77eadfec..8f7ced589 100644 --- a/docs/ko/jpql-with-kotlin-jdsl/expressions.md +++ b/docs/ko/jpql-with-kotlin-jdsl/expressions.md @@ -224,7 +224,7 @@ Kotlin JDSL은 JPA에서 제공하는 여러 함수들을 지원하기 위함 | CURRENT\_DATE | not yet | | CURRENT\_TIME | not yet | | CURRENT\_TIMESTAMP | not yet | -| LOCAL DATE | not yet | +| LOCAL DATE | support | | LOCAL TIME | not yet | | LOCAL DATETIME | not yet | | EXTRACT | not yet | diff --git a/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt b/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt index bc4ee6d0a..bfbc1b5fa 100644 --- a/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt +++ b/dsl/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/Jpql.kt @@ -44,6 +44,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.select.SelectQuery import com.linecorp.kotlinjdsl.querymodel.jpql.sort.Sort import java.math.BigDecimal import java.math.BigInteger +import java.time.LocalDate import kotlin.internal.Exact import kotlin.internal.LowPriorityInOverloadResolution import kotlin.reflect.KClass @@ -1380,6 +1381,16 @@ open class Jpql : JpqlDsl { ) } + /** + * Creates an expression that represents the local date. + * + * This is the same as ```LOCAL DATE```. + */ + @SinceJdsl("3.4.0") + fun localDate(): Expression { + return Expressions.localDate() + } + /** * Creates an expression that represents predefined database functions and user-defined database functions. */ diff --git a/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/LocalDateDslTest.kt b/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/LocalDateDslTest.kt new file mode 100644 index 000000000..f7261ce2a --- /dev/null +++ b/dsl/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/dsl/jpql/expression/LocalDateDslTest.kt @@ -0,0 +1,26 @@ +package com.linecorp.kotlinjdsl.dsl.jpql.expression + +import com.linecorp.kotlinjdsl.dsl.jpql.queryPart +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expression +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expressions +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test +import java.time.LocalDate + +class LocalDateDslTest { + + @Test + fun localDate() { + // when + val expression = queryPart { + localDate() + }.toExpression() + + val actual: Expression = expression // for type check + + // then + val expected = Expressions.localDate() + + assertThat(actual).isEqualTo(expected) + } +} diff --git a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt index 25f378881..451ac7d0a 100644 --- a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt +++ b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/Expressions.kt @@ -17,6 +17,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlExpressionPar import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlFunctionExpression import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLength import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLiteral +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDate import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocate import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLower import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlMax @@ -44,6 +45,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.select.SelectQuery import com.linecorp.kotlinjdsl.querymodel.jpql.select.impl.JpqlSelectQuery import java.math.BigDecimal import java.math.BigInteger +import java.time.LocalDate import kotlin.internal.Exact import kotlin.reflect.KClass @@ -543,6 +545,14 @@ object Expressions { return JpqlLocate(substring, string, start) } + /** + * Creates an expression that represents the local date. + */ + @SinceJdsl("3.4.0") + fun localDate(): Expression { + return JpqlLocalDate + } + /** * Creates an expression that represents predefined database functions and user-defined database functions. */ diff --git a/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/JpqlLocalDate.kt b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/JpqlLocalDate.kt new file mode 100644 index 000000000..019389e77 --- /dev/null +++ b/query-model/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/impl/JpqlLocalDate.kt @@ -0,0 +1,8 @@ +package com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl + +import com.linecorp.kotlinjdsl.Internal +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.Expression +import java.time.LocalDate + +@Internal +object JpqlLocalDate : Expression diff --git a/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt b/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt index fae31a8ba..6c4c69d8e 100644 --- a/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt +++ b/query-model/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/querymodel/jpql/expression/ExpressionsTest.kt @@ -19,6 +19,7 @@ import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlExpressionPar import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlFunctionExpression import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLength import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLiteral +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDate import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocate import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLower import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlMax @@ -774,6 +775,17 @@ class ExpressionsTest : WithAssertions { assertThat(actual).isEqualTo(expected) } + @Test + fun localDate() { + // when + val actual = Expressions.localDate() + + // then + val expected = JpqlLocalDate + + assertThat(actual).isEqualTo(expected) + } + @Test fun function() { // when diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/JpqlRenderContext.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/JpqlRenderContext.kt index ed5e4e135..15f979e82 100644 --- a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/JpqlRenderContext.kt +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/JpqlRenderContext.kt @@ -69,6 +69,7 @@ import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLessThanOrEqualTo import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLessThanSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLikeSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLiteralSerializer +import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLocalDateSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLocateSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlLowerSerializer import com.linecorp.kotlinjdsl.render.jpql.serializer.impl.JpqlMaxSerializer @@ -314,6 +315,7 @@ private class DefaultModule : JpqlRenderModule { JpqlLessThanSerializer(), JpqlLikeSerializer(), JpqlLiteralSerializer(), + JpqlLocalDateSerializer(), JpqlLocateSerializer(), JpqlLowerSerializer(), JpqlMaxSerializer(), diff --git a/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateSerializer.kt b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateSerializer.kt new file mode 100644 index 000000000..651856951 --- /dev/null +++ b/render/jpql/src/main/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateSerializer.kt @@ -0,0 +1,20 @@ +package com.linecorp.kotlinjdsl.render.jpql.serializer.impl + +import com.linecorp.kotlinjdsl.Internal +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDate +import com.linecorp.kotlinjdsl.render.RenderContext +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializer +import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter +import kotlin.reflect.KClass + +@Internal +class JpqlLocalDateSerializer : JpqlSerializer { + + override fun handledType(): KClass { + return JpqlLocalDate::class + } + + override fun serialize(part: JpqlLocalDate, writer: JpqlWriter, context: RenderContext) { + writer.write("LOCAL DATE") + } +} diff --git a/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateSerializerTest.kt b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateSerializerTest.kt new file mode 100644 index 000000000..b3f3a2dea --- /dev/null +++ b/render/jpql/src/test/kotlin/com/linecorp/kotlinjdsl/render/jpql/serializer/impl/JpqlLocalDateSerializerTest.kt @@ -0,0 +1,46 @@ +package com.linecorp.kotlinjdsl.render.jpql.serializer.impl + +import com.linecorp.kotlinjdsl.querymodel.jpql.expression.impl.JpqlLocalDate +import com.linecorp.kotlinjdsl.render.TestRenderContext +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlRenderSerializer +import com.linecorp.kotlinjdsl.render.jpql.serializer.JpqlSerializerTest +import com.linecorp.kotlinjdsl.render.jpql.writer.JpqlWriter +import io.mockk.impl.annotations.MockK +import io.mockk.verifySequence +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test + +@JpqlSerializerTest +class JpqlLocalDateSerializerTest { + private val sut = JpqlLocalDateSerializer() + + @MockK + private lateinit var writer: JpqlWriter + + @MockK + private lateinit var serializer: JpqlRenderSerializer + + @Test + fun handle() { + // when + val actual = sut.handledType() + + // then + assertThat(actual).isEqualTo(JpqlLocalDate::class) + } + + @Test + fun serialize() { + // given + val part = JpqlLocalDate + val context = TestRenderContext(serializer) + + // when + sut.serialize(part, writer, context) + + // then + verifySequence { + writer.write("LOCAL DATE") + } + } +}