diff --git a/.editorconfig b/.editorconfig index 841a14a6c..d1f84001f 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,11 +3,99 @@ root = true [*] charset = utf-8 end_of_line = lf - -[*.{kt,kts}] -disabled_rules=import-ordering,no-wildcard-imports +insert_final_newline = true +tab_width = 4 indent_size = 4 indent_style = space +max_line_length = 120 trim_trailing_whitespace = true -insert_final_newline = true -tab_width = 4 + +ij_continuation_indent_size = 4 +ij_formatter_off_tag = @formatter:off +ij_formatter_on_tag = @formatter:on +ij_formatter_tags_enabled = true +ij_smart_tabs = false +ij_visual_guides = none +ij_wrap_on_typing = false + +[{*.kt,*.kts}] +ij_kotlin_align_in_columns_case_branch = false +ij_kotlin_align_multiline_binary_operation = false +ij_kotlin_align_multiline_extends_list = false +ij_kotlin_align_multiline_method_parentheses = false +ij_kotlin_align_multiline_parameters = true +ij_kotlin_align_multiline_parameters_in_calls = false +ij_kotlin_allow_trailing_comma = true +ij_kotlin_allow_trailing_comma_on_call_site = true +ij_kotlin_assignment_wrap = normal +ij_kotlin_blank_lines_after_class_header = 0 +ij_kotlin_blank_lines_around_block_when_branches = 0 +ij_kotlin_blank_lines_before_declaration_with_comment_or_annotation_on_separate_line = 1 +ij_kotlin_block_comment_at_first_column = true +ij_kotlin_call_parameters_new_line_after_left_paren = true +ij_kotlin_call_parameters_right_paren_on_new_line = true +ij_kotlin_call_parameters_wrap = on_every_item +ij_kotlin_catch_on_new_line = false +ij_kotlin_class_annotation_wrap = split_into_lines +ij_kotlin_code_style_defaults = KOTLIN_OFFICIAL +ij_kotlin_continuation_indent_for_chained_calls = false +ij_kotlin_continuation_indent_for_expression_bodies = false +ij_kotlin_continuation_indent_in_argument_lists = false +ij_kotlin_continuation_indent_in_elvis = false +ij_kotlin_continuation_indent_in_if_conditions = false +ij_kotlin_continuation_indent_in_parameter_lists = false +ij_kotlin_continuation_indent_in_supertype_lists = false +ij_kotlin_else_on_new_line = false +ij_kotlin_enum_constants_wrap = off +ij_kotlin_extends_list_wrap = normal +ij_kotlin_field_annotation_wrap = split_into_lines +ij_kotlin_finally_on_new_line = false +ij_kotlin_if_rparen_on_new_line = true +ij_kotlin_import_nested_classes = false +ij_kotlin_imports_layout = *, java.**, javax.**, kotlin.**, ^ +ij_kotlin_insert_whitespaces_in_simple_one_line_method = true +ij_kotlin_keep_blank_lines_before_right_brace = 2 +ij_kotlin_keep_blank_lines_in_code = 2 +ij_kotlin_keep_blank_lines_in_declarations = 2 +ij_kotlin_keep_first_column_comment = true +ij_kotlin_keep_indents_on_empty_lines = false +ij_kotlin_keep_line_breaks = true +ij_kotlin_lbrace_on_next_line = false +ij_kotlin_line_comment_add_space = false +ij_kotlin_line_comment_at_first_column = true +ij_kotlin_method_annotation_wrap = split_into_lines +ij_kotlin_method_call_chain_wrap = normal +ij_kotlin_method_parameters_new_line_after_left_paren = true +ij_kotlin_method_parameters_right_paren_on_new_line = true +ij_kotlin_method_parameters_wrap = on_every_item +ij_kotlin_name_count_to_use_star_import = 5 +ij_kotlin_name_count_to_use_star_import_for_members = 3 +ij_kotlin_packages_to_use_import_on_demand = java.util.*, kotlinx.android.synthetic.**, io.ktor.** +ij_kotlin_parameter_annotation_wrap = off +ij_kotlin_space_after_comma = true +ij_kotlin_space_after_extend_colon = true +ij_kotlin_space_after_type_colon = true +ij_kotlin_space_before_catch_parentheses = true +ij_kotlin_space_before_comma = false +ij_kotlin_space_before_extend_colon = true +ij_kotlin_space_before_for_parentheses = true +ij_kotlin_space_before_if_parentheses = true +ij_kotlin_space_before_lambda_arrow = true +ij_kotlin_space_before_type_colon = false +ij_kotlin_space_before_when_parentheses = true +ij_kotlin_space_before_while_parentheses = true +ij_kotlin_spaces_around_additive_operators = true +ij_kotlin_spaces_around_assignment_operators = true +ij_kotlin_spaces_around_equality_operators = true +ij_kotlin_spaces_around_function_type_arrow = true +ij_kotlin_spaces_around_logical_operators = true +ij_kotlin_spaces_around_multiplicative_operators = true +ij_kotlin_spaces_around_range = false +ij_kotlin_spaces_around_relational_operators = true +ij_kotlin_spaces_around_unary_operator = false +ij_kotlin_spaces_around_when_arrow = true +ij_kotlin_variable_annotation_wrap = off +ij_kotlin_while_on_new_line = false +ij_kotlin_wrap_elvis_expressions = 1 +ij_kotlin_wrap_expression_body_functions = 1 +ij_kotlin_wrap_first_method_in_call_chain = false \ No newline at end of file diff --git a/.gitignore b/.gitignore index 6c2162801..de9716c16 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,10 @@ out/ ### VS Code ### .vscode/ +### NPM ### +package-lock.json +/node_modules/ + ### Secret ### secring.gpg local.properties diff --git a/README.md b/README.md index a3ccbfc7f..e69de29bb 100644 --- a/README.md +++ b/README.md @@ -1,652 +0,0 @@ -# Kotlin JDSL - - -  -  - - -Kotlin JDSL is DSL for JPA Criteria API without generated metamodel and reflection. It helps you write a JPA query like -writing an SQL statement. - -### Background - -There are several libraries in the easy way to use JPA. However, those libraries have to use APT. If you use APT, there is a problem that you have to compile again when the name or type of entity field is changed. So, in order not to use APT, we created this library using the KProperty created by the kotlin compiler. - -If you want to know more about the background of Kotlin JDSL, I recommend reading -the [blog](https://engineering.linecorp.com/en/blog/kotlinjdsl-jpa-criteria-api-with-kotlin/) - -## Quick start - JPA 2.2 - -### Reactive -If you are interested in JPA Reactive See [more](./reactive-core/README.md) - -### Hibernate - -Add Hibernate Kotlin JDSL and Hibernate to dependencies - -```kotlin -dependencies { - implementation("com.linecorp.kotlin-jdsl:hibernate-kotlin-jdsl:x.y.z") - implementation("org.hibernate:hibernate-core:x.y.z") -} -``` - -### Eclipselink -Add Eclipselink Kotlin JDSL and Eclipselink to dependencies - -```kotlin -dependencies { - implementation("com.linecorp.kotlin-jdsl:eclipselink-kotlin-jdsl:x.y.z") - implementation("org.eclipse.persistence:org.eclipse.persistence.jpa:x.y.z") -} -``` - -### Quick Start - JPA 3.0 - -* Currently, Hibernate Reactive Does not support JPA 3.0 - -### Hibernate - -Add Hibernate Kotlin JDSL and Hibernate to dependencies - -```kotlin -dependencies { - implementation("com.linecorp.kotlin-jdsl:hibernate-kotlin-jdsl-jakarta:x.y.z") - implementation("org.hibernate:hibernate-core:6.y.z") // up to 6 version -} -``` - -### Eclipselink -Add Eclipselink Kotlin JDSL and Eclipselink to dependencies - -```kotlin -dependencies { - implementation("com.linecorp.kotlin-jdsl:eclipselink-kotlin-jdsl-jakarta:x.y.z") - implementation("org.eclipse.persistence:org.eclipse.persistence.jpa:4.y.z") // up to 4 version -} -``` - -Create QueryFactory using EntityManager - -```kotlin -val queryFactory: QueryFactory = QueryFactoryImpl( - criteriaQueryCreator = CriteriaQueryCreatorImpl(entityManager), - subqueryCreator = SubqueryCreatorImpl() -) -``` - -Query using it - -```kotlin -queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(column(Book::id).equal(1000)) -} -``` - -### Spring Data -If you use Spring Boot & Data Frameworks -See [more](./spring/README.md) - -## Usage - -You can easily write query using Entity associations. - -![](document/image/Visual1.gif) - -If you want to return the DTO, use the DTO as the return type. - -![](document/image/Visual2.gif) -### Query - -QueryFactory allows you to create JPA queries using DSL just like SQL queries. - -```kotlin -val books: List = queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(column(Book::author).equal("Shakespeare")) -} -``` - -#### with nullable condition - -Kotlin JDSL converts `null` in `where condition` to `EmptyPredicateSpec` object. - -_note that `EmptyPredicateSpec` turns into `1=1` sql_ - -```kotlin -val books: List = queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where( - name?.run { column(Book::author).equal(this) } - ) - } -``` - -#### with multi conditions - -You can chain conditions using the `whereAnd` or `whereOr` method. -* `whereAnd` connects each condition with `and`, `whereOr` connects with `or`. -* Each method is connected by `and`. - -```kotlin -val books: List = queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - whereOr( - column(Book::author).equal("Dan Brown"), - column(Book::author).equal("Hemingway") - ) - whereAnd( - column(Book::viewCount).greaterThan(10000L), - column(Book::isBorrowed).isFalse() - ) -} -``` - -### DTO Projections -If you want to select the DTO, select columns in the order of constructor parameters. - -#### select -```kotlin -data class Row( - val author: String, - val count: Long, -) - -val books: List = queryFactory.listQuery { - select(listOf(column(Book::author), count(column(Book::id)))) - from(entity(Book::class)) - groupBy(column(Book::author)) -} -``` - -#### selectMulti -```kotlin -data class Row( - val author: String, - val count: Long, -) - -val books: List = queryFactory.listQuery { - selectMulti(column(Book::author), count(column(Book::id))) - from(entity(Book::class)) - groupBy(column(Book::author)) -} -``` - -### Update & Delete - -Users can perform bulk update/delete through update/delete query. -* kotlin-jdsl's update/delete does not require from clause. Type T given as generic handles from automatically. -* According to the JPA specification, update/delete does not support join, fetch, group by, order by, limit. -* If you want to use an association mapping as a where condition, you must use [associate](#associate). - -```kotlin -val query: Query = queryFactory.updateQuery { - where(col(Order::purchaserId).`in`(1000, 2000)) - setParams(col(Order::purchaserId) to 3000) -} - -val updatedRowsCount: Int = query.executeUpdate() - -val deleteQuery: Query = queryFactory.deleteQuery { - where(col(Order::purchaserId).`in`(1000, 2000)) -} - -val deletedRowsCount: Int = deleteQuery.executeUpdate() -``` - - -### Expression - -Kotlin JDSL supports various expressions. - -#### Aggregation - -```kotlin -val max = max(column(Book::price)) -val count = count(column(Book::price)) -val greatest = greatest(column(Book::createdAt)) -``` - -#### Case When - -```kotlin -val case = case( - `when`(column(Book::name).like("A%")).then(literal(1)), - `when`(column(Book::name).like("B%")).then(literal(2)), - // ... - `else` = literal(999) -) -``` - -#### Subquery - -```kotlin -val authorIds = queryFactory.subquery { - select(column(Book::authorId)) - from(entity(Book::class)) - // ... -} - -val authors: List = queryFactory.listQuery { - // ... - where(column(Author::id).`in`(authorIds)) -} -``` - -#### NestedColumn(Foreign Key) - -You can use the `nestedCol` function to get the `foreign Key` value. - -```kotlin -val orderIdsInOrderGroupTable = queryFactory.listQuery { - select(nestedCol(col(OrderGroup::order), Order::id)) - from(entity(OrderGroup::class)) -} -``` - -You can get the value of `foreign Key` using `nested`, an extension function in `ColumnSpec`. - -```kotlin -val orderIdsInOrderGroupTable = queryFactory.listQuery { - select(col(OrderGroup::order).nested(Order::id)) - from(entity(OrderGroup::class)) -} -``` - -### Predicate - -Kotlin JDSL supports various predicates. - -```kotlin -val condition = and( - column(Book::author).equal("Shakespeare"), - column(Book::price).lessThanOrEqualTo(100.toBigDecimal()), - column(Book::status).`in`(SALE, OUT_OF_STOCK), - column(Book::createdAt).between(Time.of("2001-01-01"), Time.of("2010-12-31")), -) -``` - -### Join - -```kotlin -val books = queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - join(Book::author) //Default is `JoinType.INNER` - join(Book::publisher, JoinType.LEFT) - join(Book::seller, JoinType.RIGHT) - // ... -} -``` - -#### Fetch - -```kotlin -val books = queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - fetch(Book::author) - // ... -} -``` - -If join and fetch are used together for the same entity, only fetch is applied. - -```kotlin -val books = queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - join(Book::author) // Join is ignored - fetch(Book::author) // Only fetch is applied - // ... -} -``` - -#### Cross Join - -```kotlin -val books = queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - join(entity(Author::class), on(column(Book::authorId).equal(column(Author::id)))) - // ... -} -``` - -#### Exists - -Subquery exists expression - -```kotlin -val orders = queryFactory.listQuery { - val entity: EntitySpec = entity(Order::class) - select(entity) - from(entity) - where( - exists(queryFactory.subquery { - val orderGroupEntity = entity(OrderGroup::class) - select(literal(1)) - from(orderGroupEntity) - where( - and( - col(OrderGroup::orderGroupName).equal("orderGroup1"), - col(OrderGroup::order).equal(entity) - ) - ) - }) - ) -} -``` - -Subquery not exists expression - -```kotlin -val orders = queryFactory.listQuery { - val entity: EntitySpec = entity(Order::class) - select(entity) - from(entity) - where( - notExists(queryFactory.subquery { - val orderGroupEntity = entity(OrderGroup::class) - select(literal(1)) - from(orderGroupEntity) - where( - and( - col(OrderGroup::orderGroupName).equal("orderGroup1"), - col(OrderGroup::order).equal(entity) - ) - ) - }) - ) -} -``` - -#### Alias - -There may be models with the two associations of same type. In this case, separate the Entity using alias. - -```kotlin -val orders = queryFactory.listQuery { - select(entity(Order::class)) - from(entity(Order::class)) - join(entity(Order::class), entity(Address::class, alias = "shippingAddress", on(Order::shippingAddress))) - join(entity(Order::class), entity(Address::class, alias = "receiverAddress", on(Order::receiverAddress))) - // ... -} -``` - -#### associate - -associate behaves similarly to join, and operates exactly the same as join in select, and since Join cannot be used in update/delete, use associate to associate the relationship with other internally mapped objects (ex: @Embedded) You can build it and run the query. - -```kotlin -val query = queryFactory.selectQuery { - select(col(Address::zipCode)) - from(entity(OrderAddress::class)) - associate(OrderAddress::class, Address::class, on(OrderAddress::address)) -} - -val updatedRowCount = queryFactory.updateQuery { - where(col(OrderAddress::id).equal(address1.id)) - associate(OrderAddress::class, Address::class, on(OrderAddress::address)) - set(col(Address::zipCode), "test") - set(col(Address::baseAddress), "base") -}.executeUpdate() - -val deletedRowCount = queryFactory.deleteQuery { - where(col(OrderAddress::id).equal(address1.id)) - associate(OrderAddress::class, Address::class, on(OrderAddress::address)) -}.executeUpdate() -``` - -#### Treat (Downcasting) - -There may be situations where you need to downcast when using an Entity of an inheritance structure. In that case, you can use the code like below. - - -```kotlin -val employees = queryFactory.listQuery { - selectDistinct(entity(Employee::class)) - from(entity(Employee::class)) - treat() - where( - col(PartTimeEmployee::weeklySalary).lessThan(1000.toBigDecimal()), - ) -} -``` - -If you are downcasting from the root entity (Project Entity in this case) that contains an entity with inheritance structure, you can do it as follows. - -```kotlin -val projects = queryFactory.listQuery { - selectDistinct(entity(Project::class)) - from(entity(Project::class)) - - treat(col(Project::employees)) - where( - col(FullTimeEmployee::annualSalary).greaterThan(100000.toBigDecimal()) - ) -} -``` - -For Hibernate, the issue at [issue](https://discourse.hibernate.org/t/jpa-downcast-criteria-treat-vs-jpql-treat/2231) is currently unresolved and an additional inner(left) join is added to make the result It may come out as a duplicate. -So you should always apply distinct to select above like examples - ---> It works normally after hibernate 6(jakarta) version. If you are using kotlin-jdsl JPA 3.0 or later, no problem. - -If you are using Hibernate and want to fetch downcasting entities, the query cannot be executed normally. That is, the example below will result in a runtime error because of this [issue](https://discourse.hibernate.org/t/can-fetch-be-used-as-parameter-of-treat-for-downcasting/3301). - -```kotlin -val sub = queryFactory.subquery { - select(col(Project::id)) - from(entity(Project::class)) - - treat(col(Project::employees)) - treat(col(Project::employees)) - where( - or( - col(FullTimeEmployee::annualSalary).greaterThan(100000.toBigDecimal()), - col(PartTimeEmployee::weeklySalary).greaterThan(1000.toBigDecimal()), - ) - ) -} -val projects = queryFactory.listQuery { - val project = Project::class.alias("dedupeProject") - selectDistinct(project) - from(project) - val supervisor = Employee::class.alias("super") - val partTimeSuper = PartTimeEmployee::class.alias("partSuper") - // If you are using Hibernate and want to fetch downcasting entities, the query cannot be executed normally. That is, the example below will result in a runtime error. - fetch(project, supervisor, on(Project::supervisor)) - treat(ColumnSpec(project, Project::supervisor.name), supervisor, partTimeSuper) - where( - and( - col(project, Project::id).`in`(sub), - col(partTimeSuper, PartTimeEmployee::weeklySalary).equal(900.toBigDecimal()), - ) - ) -} -``` - -If you want to use downcasting entity in select clause, Eclipselink does not support that function. An example is as follows. - ---> Since hibernate 6 (jakarta) version, it does not work normally like eclipselink. This feature is not available if you are using kotlin-jdsl JPA 3.0 or higher. - -```kotlin -val employees = queryFactory.listQuery { - val project: EntitySpec = Project::class.alias("project") - val fullTimeEmployee = FullTimeEmployee::class.alias("fe") - val employee = Employee::class.alias("e") - - selectDistinct(fullTimeEmployee) - from(project) - treat(ColumnSpec(project, Project::employees.name), employee, fullTimeEmployee) - where( - ColumnSpec(fullTimeEmployee, FullTimeEmployee::annualSalary.name) - .greaterThan(100000.toBigDecimal()) - ) -} - -``` - -The Entity structure corresponds to the following structure. - -```kotlin -@Inheritance(strategy = InheritanceType.SINGLE_TABLE) -@Entity -@Table(name = "employee") -@DiscriminatorColumn(name = "EMP_TYPE") -class Employee( - @Id - @GeneratedValue - val id: Long, - val name: String -) { - override fun equals(other: Any?) = Objects.equals(id, (other as? Employee)?.id) - override fun hashCode() = Objects.hashCode(id) -} - -@Entity -@Table(name = "fulltime_employee") -@DiscriminatorValue("F") -class FullTimeEmployee( - val annualSalary: BigDecimal, - override val id: Long, - override val name: String -) : Employee(id, name) { - override fun equals(other: Any?) = Objects.equals(id, (other as? FullTimeEmployee)?.id) - override fun hashCode() = Objects.hashCode(id) -} - -@Entity -@Table(name = "parttime_employee") -@DiscriminatorValue("P") -class PartTimeEmployee( - val weeklySalary: BigDecimal, - override val id: Long, - override val name: String -) : Employee(id, name) { - override fun equals(other: Any?) = Objects.equals(id, (other as? PartTimeEmployee)?.id) - override fun hashCode() = Objects.hashCode(id) -} - -@Entity -@Table(name = "contract_employee") -@DiscriminatorValue("C") -class ContractEmployee( - val hourlyRate: BigDecimal, - override val id: Long, - override val name: String -) : Employee(id, name) { - override fun equals(other: Any?) = Objects.equals(id, (other as? ContractEmployee)?.id) - override fun hashCode() = Objects.hashCode(id) -} - -@Entity -@Table(name = "project") -class Project( - @Id - @GeneratedValue - val id: Long = 0, - val name: String, - - @OneToMany(cascade = [CascadeType.ALL]) - val employees: List, - - @OneToOne(cascade = [CascadeType.ALL], optional = false, fetch = FetchType.LAZY) - val supervisor: Employee -) { - override fun equals(other: Any?) = Objects.equals(id, (other as? Project)?.id) - override fun hashCode() = Objects.hashCode(id) -} - -``` - - -## How it works - -Kotlin's property reference provides KProperty interface. KProperty is created in java file at kotlin -compile time. Since KProperty has the name of property, we can use it to write the expression of the Critical API. - -If you type the JPA query as below, - -```kotlin -queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(column(Book::name).equal("Hamlet").and(column(Book::author).equal("Shakespeare"))) -} -``` - -Kotlin compiler creates PropertyReference. - -```java -final class ClassKt$books$1 extends PropertyReference1Impl { - public static final KProperty1 INSTANCE = new ClassKt$books$1(); - - books$1() { - super(Book.class, "name", "getName()Ljava/lang/String;", 0); - } - - @Nullable - public Object get(@Nullable Object receiver) { - return ((Book) receiver).getName(); - } -} - -final class ClassKt$books$2 extends PropertyReference1Impl { - public static final KProperty1 INSTANCE = new ClassKt$books$2(); - - ClassKt$books$2() { - super(Book.class, "author", "getAuthor()Ljava/lang/String;", 0); - } - - @Nullable - public Object get(@Nullable Object receiver) { - return ((Book) receiver).getAuthor(); - } -} -``` - -## Support - -If you have any questions, please make Issues. And PR is always welcome. - -## We Are Hiring -Are you ready to join us? - - -## How to contribute -See [CONTRIBUTING](CONTRIBUTING.md). -If you believe you have discovered a vulnerability or have an issue related to security, please contact the maintainer directly or send us an [email](mailto:dl_oss_dev@linecorp.com) before sending a pull request. - -## License -``` - Copyright 2021 LINE Corporation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -``` -See [LICENSE](LICENSE) for more details. - -# Our Lovely Contributors -See [the complete list of our contributors](https://github.com/line/kotlin-jdsl/contributors). - - - - diff --git a/build.gradle.kts b/build.gradle.kts index 95505d592..a44472d28 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,58 +1,38 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL import org.gradle.api.tasks.testing.logging.TestLogEvent.FAILED -@Suppress("DSL_SCOPE_VIOLATION") plugins { - jacoco + `java-test-fixtures` alias(libs.plugins.kotlin.jvm) - alias(libs.plugins.kotlin.noarg) - alias(libs.plugins.kotlin.allopen) + alias(libs.plugins.kover) } allprojects { group = "com.linecorp.kotlin-jdsl" - version = "2.2.1.RELEASE" + version = "3.0.0-SNAPSHOT" repositories { mavenCentral() } } -rootProject { - apply() -} - subprojects { - apply(plugin = "jacoco") apply(plugin = "kotlin") - apply(plugin = "kotlin-noarg") - apply(plugin = "kotlin-allopen") + apply(plugin = "org.jetbrains.kotlinx.kover") - apply() + rootProject.dependencies { + kover(this@subprojects) + } dependencies { + implementation(rootProject) implementation(rootProject.libs.kotlin) } - allOpen { - annotation("org.springframework.context.annotation.Configuration") - annotation("javax.persistence.Entity") - annotation("javax.persistence.Embeddable") - annotation("jakarta.persistence.Entity") - annotation("jakarta.persistence.Embeddable") - } - - noArg { - annotation("org.springframework.context.annotation.Configuration") - annotation("javax.persistence.Entity") - annotation("javax.persistence.Embeddable") - annotation("jakarta.persistence.Entity") - annotation("jakarta.persistence.Embeddable") - } - tasks.withType { useJUnitPlatform() + testLogging { showExceptions = true exceptionFormat = FULL @@ -61,8 +41,12 @@ subprojects { events = setOf(FAILED) } } +} - kotlin { - jvmToolchain(17) +koverReport { + filters { + excludes { + packages("com.linecorp.kotlinjdsl.query") + } } } diff --git a/buildSrc/src/main/kotlin/JacocoExtensionPlugin.kt b/buildSrc/src/main/kotlin/JacocoExtensionPlugin.kt deleted file mode 100644 index 7bca2232e..000000000 --- a/buildSrc/src/main/kotlin/JacocoExtensionPlugin.kt +++ /dev/null @@ -1,49 +0,0 @@ -import org.gradle.api.Project -import org.gradle.api.tasks.SourceSetContainer -import org.gradle.api.tasks.TaskProvider -import org.gradle.api.tasks.testing.Test -import org.gradle.kotlin.dsl.* -import org.gradle.testing.jacoco.tasks.JacocoReport - -@Suppress("UNUSED_VARIABLE") -class JacocoExtensionPlugin : AbstractRootPlugin(apply { - val coverage = rootProject.extensions.create("coverage") - // Task to gather code coverage from multiple subprojects - // @see https://gist.github.com/aalmiray/e6f54aa4b3803be0bcac - val codeCoverageReport: TaskProvider by tasks.registering(JacocoReport::class) { - group = "verification" - dependsOn(subprojects.map { it.tasks.withType() }) - - val targetProjects = subprojects.filter { it.project !in coverage.excludes } - additionalSourceDirs.setFrom(targetProjects.map { it.the()["main"].allSource.srcDirs }) - sourceDirectories.setFrom(targetProjects.map { it.the()["main"].allSource.srcDirs }) - classDirectories.setFrom(targetProjects.map { it.the()["main"].output }) - executionData.setFrom(project.fileTree(".") { - include("**/build/jacoco/test.exec") - }) - - reports { - xml.required.set(true) - html.required.set(true) - csv.required.set(false) - } - } -}) - - -@Suppress("MemberVisibilityCanBePrivate") -open class CoverageExtension { - private val _excludes: MutableSet = mutableSetOf() - - val excludes: Set - get() = _excludes - - fun exclude(project: Project) { - _excludes.add(project) - } -} - -fun Project.coverage(customize: CoverageExtension.() -> Unit) { - rootProject.configure(customize) -} - diff --git a/buildSrc/src/main/kotlin/Modules.kt b/buildSrc/src/main/kotlin/Modules.kt deleted file mode 100644 index 55f3137ef..000000000 --- a/buildSrc/src/main/kotlin/Modules.kt +++ /dev/null @@ -1,65 +0,0 @@ -import org.gradle.api.artifacts.Dependency -import org.gradle.api.artifacts.dsl.DependencyHandler -import org.gradle.kotlin.dsl.project - -data class Module( - val name: String -) - -@Suppress("unused") -object Modules { - val core = module(":kotlin-jdsl-core") - val reactiveCore = module(":kotlin-jdsl-reactive-core") - val hibernate = module(":hibernate-kotlin-jdsl") - val hibernateReactive = module(":hibernate-reactive-kotlin-jdsl") - val eclipselink = module(":eclipselink-kotlin-jdsl") - val query = module(":kotlin-jdsl-query") - val springDataCore = module(":spring-data-kotlin-jdsl-core") - - val springDataReactiveCore = module(":spring-data-kotlin-jdsl-reactive-core") - - val springDataHibernateReactive = module(":spring-data-kotlin-jdsl-hibernate-reactive") - val springBatchInfrastructure = module(":spring-batch-kotlin-jdsl-infrastructure") - val springDataAutoconfigure = module(":spring-data-kotlin-jdsl-autoconfigure") - val springDataStarter = module(":spring-data-kotlin-jdsl-starter") - val testFixtureCore = module(":test-fixture-core") - - val testFixtureEntity = module(":test-fixture-entity") - val testFixtureIntegration = module(":test-fixture-integration") - val testFixtureIntegrationReactive = module(":test-fixture-integration-reactive") - val testFixtureHibernateReactive = module(":test-fixture-hibernate-reactive") - - // jakarta - val coreJakarta = module(":kotlin-jdsl-core-jakarta") - val reactiveCoreJakarta = module(":kotlin-jdsl-reactive-core-jakarta") - val queryJakarta = module(":kotlin-jdsl-query-jakarta") - val hibernateJakarta = module(":hibernate-kotlin-jdsl-jakarta") - val hibernateReactiveJakarta = module(":hibernate-reactive-kotlin-jdsl-jakarta") - - // jakarta spring - val springDataCoreJakarta = module(":spring-data-kotlin-jdsl-core-jakarta") - val springBatchInfrastructureJakarta = module(":spring-batch-kotlin-jdsl-infrastructure-jakarta") - val springDataAutoconfigureJakarta = module(":spring-data-kotlin-jdsl-autoconfigure-jakarta") - val springDataStarterJakarta = module(":spring-data-kotlin-jdsl-starter-jakarta") - val springDataReactiveCoreJakarta = module(":spring-data-kotlin-jdsl-reactive-core-jakarta") - val springDataHibernateReactiveJakarta = module(":spring-data-kotlin-jdsl-hibernate-reactive-jakarta") - - val testFixtureHibernateReactiveJakarta = module(":test-fixture-hibernate-reactive-jakarta") - val testFixtureIntegrationJakarta = module(":test-fixture-integration-jakarta") - val testFixtureEntityJakarta = module(":test-fixture-entity-jakarta") - val testFixtureIntegrationReactiveJakarta = module(":test-fixture-integration-reactive-jakarta") - - private fun module(name: String): Module = Module(name) -} - -fun DependencyHandler.api(module: Module): Dependency? = - add("api", this.project(module.name)) - -fun DependencyHandler.implementation(module: Module): Dependency? = - add("implementation", this.project(module.name)) - -fun DependencyHandler.compileOnly(module: Module): Dependency? = - add("compileOnly", this.project(module.name)) - -fun DependencyHandler.testImplementation(module: Module): Dependency? = - add("testImplementation", this.project(module.name)) diff --git a/commitlint.config.js b/commitlint.config.js index 28fe5c5bf..25b522f00 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1 +1,135 @@ -module.exports = {extends: ['@commitlint/config-conventional']} +module.exports = { + parserPreset: 'conventional-changelog-conventionalcommits', + rules: { + 'body-leading-blank': [1, 'always'], + 'body-max-line-length': [2, 'always', 100], + 'footer-leading-blank': [1, 'always'], + 'footer-max-line-length': [2, 'always', 100], + 'header-max-length': [2, 'always', 100], + 'subject-case': [ + 2, + 'never', + ['sentence-case', 'start-case', 'pascal-case', 'upper-case'], + ], + 'subject-empty': [2, 'never'], + 'subject-full-stop': [2, 'never', '.'], + 'type-case': [2, 'always', 'lower-case'], + 'type-empty': [2, 'never'], + 'type-enum': [ + 2, + 'always', + [ + 'build', + 'chore', + 'ci', + 'docs', + 'feat', + 'fix', + 'perf', + 'refactor', + 'revert', + 'style', + 'test', + ], + ], + }, + prompt: { + questions: { + type: { + description: "Select the type of change that you're committing", + enum: { + feat: { + description: 'A new feature', + title: 'Features', + emoji: '✨', + }, + fix: { + description: 'A bug fix', + title: 'Bug Fixes', + emoji: '🐛', + }, + docs: { + description: 'Documentation only changes', + title: 'Documentation', + emoji: '📚', + }, + style: { + description: + 'Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)', + title: 'Styles', + emoji: '💎', + }, + refactor: { + description: + 'A code change that neither fixes a bug nor adds a feature', + title: 'Code Refactoring', + emoji: '📦', + }, + perf: { + description: 'A code change that improves performance', + title: 'Performance Improvements', + emoji: '🚀', + }, + test: { + description: 'Adding missing tests or correcting existing tests', + title: 'Tests', + emoji: '🚨', + }, + build: { + description: + 'Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)', + title: 'Builds', + emoji: '🛠', + }, + ci: { + description: + 'Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)', + title: 'Continuous Integrations', + emoji: '⚙️', + }, + chore: { + description: "Other changes that don't modify src or test files", + title: 'Chores', + emoji: '♻️', + }, + revert: { + description: 'Reverts a previous commit', + title: 'Reverts', + emoji: '🗑', + }, + }, + }, + scope: { + description: + 'What is the scope of this change (e.g. component or file name)', + }, + subject: { + description: + 'Write a short, imperative tense description of the change', + }, + body: { + description: 'Provide a longer description of the change', + }, + isBreaking: { + description: 'Are there any breaking changes?', + }, + breakingBody: { + description: + 'A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself', + }, + breaking: { + description: 'Describe the breaking changes', + }, + isIssueAffected: { + description: 'Does this change affect any open issues?', + }, + issuesBody: { + description: + 'If issues are closed, the commit requires a body. Please enter a longer description of the commit itself', + }, + issues: { + description: 'Add issue references (e.g. "fix #123", "re #123".)', + }, + }, + }, +}; diff --git a/core-jakarta/build.gradle.kts b/core-jakarta/build.gradle.kts deleted file mode 100644 index 46795f705..000000000 --- a/core-jakarta/build.gradle.kts +++ /dev/null @@ -1,19 +0,0 @@ -apply() - -dependencies { - api(Modules.queryJakarta) - - compileOnly(libs.jakarta.persistence.api) - compileOnly(libs.slf4j) - compileOnly(libs.hibernate6) - - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntity) - testImplementation(libs.jakarta.persistence.api) - testImplementation(libs.hibernate6) - testImplementation(libs.h2) -} - -coverage { - exclude(project) -} diff --git a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactory.kt b/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactory.kt deleted file mode 100644 index deddf956e..000000000 --- a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactory.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery -import kotlin.reflect.KClass - -interface QueryFactory { - fun selectQuery(returnType: Class, dsl: CriteriaQueryDsl.() -> Unit): TypedQuery - fun updateQuery(target: KClass, dsl: CriteriaUpdateQueryDsl.() -> Unit): Query - fun deleteQuery(target: KClass, dsl: CriteriaDeleteQueryDsl.() -> Unit): Query - fun subquery(returnType: Class, dsl: SubqueryDsl.() -> Unit): SubqueryExpressionSpec -} diff --git a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactoryExtensions.kt b/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactoryExtensions.kt deleted file mode 100644 index 671bebfb3..000000000 --- a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactoryExtensions.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import java.util.stream.Stream - -inline fun QueryFactory.singleQuery( - noinline dsl: CriteriaQueryDsl.() -> Unit -): T = selectQuery(T::class.java, dsl).singleResult - -inline fun QueryFactory.listQuery( - noinline dsl: CriteriaQueryDsl.() -> Unit -): List = selectQuery(T::class.java, dsl).resultList - -inline fun QueryFactory.streamQuery( - noinline dsl: CriteriaQueryDsl.() -> Unit -): Stream = selectQuery(T::class.java, dsl).resultStream - - -inline fun QueryFactory.selectQuery(noinline dsl: CriteriaQueryDsl.() -> Unit) = - selectQuery(T::class.java, dsl) - -inline fun QueryFactory.updateQuery(noinline dsl: CriteriaUpdateQueryDsl.() -> Unit) = - updateQuery(T::class, dsl) - -inline fun QueryFactory.deleteQuery(noinline dsl: CriteriaDeleteQueryDsl.() -> Unit) = - deleteQuery(T::class, dsl) - -inline fun QueryFactory.subquery(noinline dsl: SubqueryDsl.() -> Unit) = - subquery(T::class.java, dsl) diff --git a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactoryImpl.kt b/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactoryImpl.kt deleted file mode 100644 index 67d434024..000000000 --- a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactoryImpl.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.* -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery -import kotlin.reflect.KClass - -class QueryFactoryImpl( - private val criteriaQueryCreator: CriteriaQueryCreator, - private val subqueryCreator: SubqueryCreator, -) : QueryFactory { - override fun selectQuery( - returnType: Class, - dsl: CriteriaQueryDsl.() -> Unit - ): TypedQuery { - val criteriaQuerySpec = QueryDslImpl(returnType).apply(dsl).createCriteriaQuerySpec() - - return criteriaQueryCreator.createQuery(criteriaQuerySpec) - } - - override fun updateQuery(target: KClass, dsl: CriteriaUpdateQueryDsl.() -> Unit): Query { - return criteriaQueryCreator.createQuery( - QueryDslImpl(target.java).apply(dsl).apply { from(target) }.createCriteriaUpdateQuerySpec() - ) - } - - override fun deleteQuery(target: KClass, dsl: CriteriaDeleteQueryDsl.() -> Unit): Query { - return criteriaQueryCreator.createQuery( - QueryDslImpl(target.java).apply(dsl).apply { from(target) }.createCriteriaDeleteQuerySpec() - ) - } - - override fun subquery( - returnType: Class, - dsl: SubqueryDsl.() -> Unit - ): SubqueryExpressionSpec { - val subquerySpec = QueryDslImpl(returnType).apply(dsl).createSubquerySpec() - - return SubqueryExpressionSpec(subquerySpec, subqueryCreator) - } -} diff --git a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EmptySqlQueryHintClause.kt b/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EmptySqlQueryHintClause.kt deleted file mode 100644 index bfb538ac2..000000000 --- a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EmptySqlQueryHintClause.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import org.slf4j.LoggerFactory -import jakarta.persistence.Query - -@Suppress("UNCHECKED_CAST") -inline fun emptySqlHintClause(): SqlQueryHintClause = EmptySqlQueryHintClause as SqlQueryHintClause - -object EmptySqlQueryHintClause : SqlQueryHintClause { - private val log = LoggerFactory.getLogger(EmptySqlQueryHintClause::class.java) - - override fun apply(query: Query) { - log.warn( - "We do not yet support the sql query hint of this jpa implementation. Please contact us through github." - ) - } -} diff --git a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClauseImpl.kt b/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClauseImpl.kt deleted file mode 100644 index c9e74b262..000000000 --- a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClauseImpl.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import jakarta.persistence.Query - -data class JpaQueryHintClauseImpl( - val hints: Map -) : JpaQueryHintClause { - override fun apply(query: Q) { - hints.forEach { (hintName, value) -> query.setHint(hintName, value) } - } -} diff --git a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/LimitClause.kt b/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/LimitClause.kt deleted file mode 100644 index 8c5b5097d..000000000 --- a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/LimitClause.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.limit - -import jakarta.persistence.Query - -data class LimitClause( - private val offset: Int?, - private val maxResults: Int?, -) : QueryLimitClause { - companion object { - val empty = LimitClause(null, null) - - @Suppress("UNCHECKED_CAST") - fun empty(): LimitClause = empty as LimitClause - } - - override fun apply(query: Q) { - offset?.run { query.firstResult = this } - maxResults?.run { query.maxResults = this } - } -} diff --git a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreator.kt b/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreator.kt deleted file mode 100644 index 2c6c9149c..000000000 --- a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreator.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery - -interface CriteriaQueryCreator { - fun createQuery(spec: CriteriaQuerySpec>): TypedQuery - fun createQuery(spec: CriteriaUpdateQuerySpec): Query - fun createQuery(spec: CriteriaDeleteQuerySpec): Query -} diff --git a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreatorImpl.kt b/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreatorImpl.kt deleted file mode 100644 index 388f1e878..000000000 --- a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreatorImpl.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import jakarta.persistence.EntityManager -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery - -class CriteriaQueryCreatorImpl( - private val em: EntityManager, -) : CriteriaQueryCreator { - override fun createQuery(spec: CriteriaQuerySpec>): TypedQuery = - JpaCriteriaQueryBuilder.createQuery(spec, em.criteriaBuilder, em::createQuery) - - override fun createQuery(spec: CriteriaUpdateQuerySpec): Query = - JpaCriteriaQueryBuilder.createQuery(spec, em.criteriaBuilder, em::createQuery) - - override fun createQuery(spec: CriteriaDeleteQuerySpec): Query = - JpaCriteriaQueryBuilder.createQuery(spec, em.criteriaBuilder, em::createQuery) -} diff --git a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/QueryDslImpl.kt b/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/QueryDslImpl.kt deleted file mode 100644 index add603bc9..000000000 --- a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/QueryDslImpl.kt +++ /dev/null @@ -1,386 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import com.linecorp.kotlinjdsl.query.SubquerySpec -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.clause.groupby.SubqueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.clause.having.SubqueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.LimitClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SubquerySelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause -import com.linecorp.kotlinjdsl.query.clause.where.SubqueryWhereClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.* -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.OrSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.from.Relation -import com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseProvider -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery -import jakarta.persistence.criteria.JoinType - -/** - * Internal DSL Implementation - * - * Don't use this directly because it's an **INTERNAL** class. - * It does not support backward compatibility. - * This class should be used with the understanding that it is not thread safe and therefore not suitable for parallel processing. - */ -open class QueryDslImpl( - private val returnType: Class, -) : CriteriaQueryDsl, SubqueryDsl, CriteriaUpdateQueryDsl, CriteriaDeleteQueryDsl { - private var singleSelectClause: SingleSelectClause? = null - private var multiSelectClause: MultiSelectClause? = null - private var fromClause: FromClause<*>? = null - private var joins: MutableList>? = null - private var wheres: MutableList? = null - private var groupBys: MutableList>? = null - private var havings: MutableList? = null - private var orderBys: MutableList? = null - private var offset: Int? = null - private var maxResults: Int? = null - private var sqlHints: MutableList? = null - private var jpaHints: MutableMap? = null - private var params: MutableMap, Any?>? = null - - private fun lazyJoins() = (joins ?: mutableListOf>().apply { joins = this }) - private fun lazyWheres() = (wheres ?: mutableListOf().apply { wheres = this }) - private fun lazyGroupBys() = (groupBys ?: mutableListOf>().apply { groupBys = this }) - private fun lazyHavings() = (havings ?: mutableListOf().apply { havings = this }) - private fun lazyOrderBys() = (orderBys ?: mutableListOf().apply { orderBys = this }) - private fun lazySqlHints() = (sqlHints ?: mutableListOf().apply { sqlHints = this }) - private fun lazyJpaHints() = (jpaHints ?: mutableMapOf().apply { jpaHints = this }) - private fun lazyParams() = (params ?: mutableMapOf, Any?>().apply { params = this }) - - override fun select(distinct: Boolean, expression: ExpressionSpec): SingleSelectClause { - return SingleSelectClause( - returnType = returnType, - distinct = distinct, - expression = expression, - ).also { singleSelectClause = it } - } - - override fun select(distinct: Boolean, expressions: List>): MultiSelectClause { - return MultiSelectClause( - returnType = returnType, - distinct = distinct, - expressions = expressions, - ).also { multiSelectClause = it } - } - - override fun from(entity: EntitySpec<*>) { - fromClause = FromClause(entity) - } - - override fun join(left: EntitySpec, right: EntitySpec, relation: Relation, joinType: JoinType) { - lazyJoins().add(SimpleJoinSpec(left = left, right = right, path = relation.path, joinType = joinType)) - } - - override fun join(entity: EntitySpec, predicate: PredicateSpec) { - lazyJoins().add(CrossJoinSpec(entity)) - lazyWheres().add(predicate) - } - - override fun associate( - left: EntitySpec, - right: EntitySpec, - relation: Relation, - joinType: JoinType - ) { - lazyJoins().add(SimpleAssociatedJoinSpec(left = left, right = right, path = relation.path)) - } - - override fun treat( - root: ColumnSpec<*>, - parent: EntitySpec

, - child: EntitySpec, - parentJoinType: JoinType - ) { - lazyJoins().add(TreatJoinSpec(parent, child, parentJoinType, root)) - } - - override fun fetch( - left: EntitySpec, - right: EntitySpec, - relation: Relation, - joinType: JoinType - ) { - lazyJoins().add(FetchJoinSpec(left = left, right = right, path = relation.path, joinType = joinType)) - } - - override fun where(predicate: PredicateSpec?) { - predicate?.run { lazyWheres().add(this) } - } - - override fun whereAnd(predicates: List) { - predicates.filterNotNull() - .takeIf { it.isNotEmpty() } - ?.run { where(AndSpec(this)) } - } - - override fun whereOr(predicates: List) { - predicates.filterNotNull() - .takeIf { it.isNotEmpty() } - ?.run { where(OrSpec(this)) } - } - - override fun groupBy(columns: List>) { - lazyGroupBys().addAll(columns) - } - - override fun having(predicate: PredicateSpec) { - lazyHavings().add(predicate) - } - - override fun orderBy(orders: List) { - lazyOrderBys().addAll(orders) - } - - override fun offset(offset: Int) { - this.offset = offset - } - - override fun maxResults(maxResults: Int) { - this.maxResults = maxResults - } - - override fun sqlHints(hints: List) { - lazySqlHints().addAll(hints) - } - - override fun hints(hints: Map) { - lazyJpaHints().putAll(hints) - } - - override fun setParams(params: Map, Any?>) { - lazyParams().putAll(params) - } - - override fun set(column: ColumnSpec<*>, value: Any?) { - lazyParams()[column] = value - } - - fun createCriteriaQuerySpec(): CriteriaQuerySpec> { - return CriteriaQuerySpecImpl( - select = getCriteriaQuerySelectClause(), - from = getFromClause(), - join = getJoinClause(), - where = getWhereClause(), - groupBy = getGroupByClause(), - having = getHavingClause(), - orderBy = getOrderByClause(), - limit = getLimitClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - ) - } - - @Suppress("UNCHECKED_CAST") - fun createCriteriaUpdateQuerySpec(): CriteriaUpdateQuerySpec { - return CriteriaUpdateQuerySpecImpl( - targetEntity = returnType, - from = getFromClause() as FromClause, - associate = getSimpleAssociatedJoinClauseOnly(), - where = getWhereClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - set = getSetClause() - ) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getSetClause() = SetClause(params.orEmpty()) - - @Suppress("UNCHECKED_CAST") - fun createCriteriaDeleteQuerySpec(): CriteriaDeleteQuerySpec { - return CriteriaDeleteQuerySpecImpl( - targetEntity = returnType, - from = getFromClause() as FromClause, - associate = getSimpleAssociatedJoinClauseOnly(), - where = getWhereClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause() - ) - } - - fun createSubquerySpec(): SubquerySpec { - return SubquerySpecImpl( - select = getSubquerySelectClause(), - from = getFromClause(), - join = getJoinClauseDoesNotHaveFetch(), - where = getWhereClause(), - groupBy = getGroupByClause(), - having = getHavingClause(), - ) - } - - protected fun getCriteriaQuerySelectClause(): CriteriaQuerySelectClause { - mustBe(singleSelectClause != null || multiSelectClause != null) { - "There is no select clause in query" - } - - return singleSelectClause ?: multiSelectClause!! - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getSubquerySelectClause(): SubquerySelectClause { - mustBe(singleSelectClause != null) { "There is no select clause in query" } - - return singleSelectClause!! - } - - protected fun getFromClause(): FromClause<*> { - mustBe(fromClause != null) { "There is no from clause in query" } - - return fromClause!! - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getJoinClause(): JoinClause { - return JoinClause(joins.orEmpty()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getJoinClauseDoesNotHaveFetch(): JoinClause { - mustBe(joins.orEmpty().filterIsInstance>().isEmpty()) { "This query does not support fetch" } - - return getJoinClause() - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getSimpleAssociatedJoinClauseOnly(): SimpleAssociatedJoinClause { - val joins = joins.orEmpty() - return joins.filterIsInstance>().let { - mustBe(it.size == joins.size) { "This query only support associate" } - SimpleAssociatedJoinClause(it) - } - } - - protected fun getWhereClause(): WhereClause { - return WhereClause(wheres.orEmpty().merge()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getGroupByClause(): GroupByClause { - return GroupByClause(groupBys.orEmpty()) - } - - protected fun getEmptyGroupByClause(): GroupByClause { - return GroupByClause(emptyList()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getHavingClause(): HavingClause { - return HavingClause(havings.orEmpty().merge()) - } - - protected fun getEmptyHavingClause(): HavingClause { - return HavingClause(PredicateSpec.empty) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getOrderByClause(): CriteriaQueryOrderByClause { - return OrderByClause(orderBys.orEmpty()) - } - - protected fun getEmptyOrderByClause(): CriteriaQueryOrderByClause { - return OrderByClause.empty - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getLimitClause(): QueryLimitClause { - return LimitClause(offset, maxResults) - } - - protected fun getEmptyLimitClause(): QueryLimitClause { - return LimitClause.empty() - } - - protected fun getJpaQueryHintClause(): JpaQueryHintClause { - return JpaQueryHintClauseImpl(jpaHints.orEmpty()) - } - - @Suppress("UNCHECKED_CAST") - protected fun getSqlQueryHintClause(): SqlQueryHintClause { - return SqlQueryHintClauseProvider.provide(sqlHints.orEmpty()) as SqlQueryHintClause - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun List.merge(): PredicateSpec { - return when { - isEmpty() -> PredicateSpec.empty - size == 1 -> first() - else -> AndSpec(this) - } - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun mustBe(condition: Boolean, lazyMessage: () -> String) { - if (!condition) { - throw IllegalStateException(lazyMessage()) - } - } - - data class CriteriaQuerySpecImpl( - override val select: CriteriaQuerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: CriteriaQueryWhereClause, - override val groupBy: CriteriaQueryGroupByClause, - override val having: CriteriaQueryHavingClause, - override val orderBy: CriteriaQueryOrderByClause, - override val limit: QueryLimitClause>, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaQuerySpec> - - data class CriteriaUpdateQuerySpecImpl( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - override val set: SetClause - ) : CriteriaUpdateQuerySpec - - data class CriteriaDeleteQuerySpecImpl( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause - ) : CriteriaDeleteQuerySpec - - data class SubquerySpecImpl( - override val select: SubquerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: SubqueryWhereClause, - override val groupBy: SubqueryGroupByClause, - override val having: SubqueryHavingClause - ) : SubquerySpec -} diff --git a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/SqlQueryHintClauseProvider.kt b/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/SqlQueryHintClauseProvider.kt deleted file mode 100644 index 423fff8ff..000000000 --- a/core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/SqlQueryHintClauseProvider.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint - -import com.linecorp.kotlinjdsl.query.clause.hint.EmptySqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import org.slf4j.LoggerFactory -import java.util.* -import jakarta.persistence.Query - -interface SqlQueryHintClauseFactoryProvider { - fun factory(): (List) -> SqlQueryHintClause - - companion object { - private val log = LoggerFactory.getLogger(SqlQueryHintClauseFactoryProvider::class.java) - val loadedFactory by lazy { - ServiceLoader.load(SqlQueryHintClauseFactoryProvider::class.java).checkDuplicate().firstOrNull()?.factory() - } - - private fun ServiceLoader.checkDuplicate(): ServiceLoader { - takeIf { count() > 1 } - ?.run { log.warn("Duplicate Factory implementation detected") } - return this - } - } -} - -object SqlQueryHintClauseProvider { - val provide: (List) -> SqlQueryHintClause - - init { - val factory = SqlQueryHintClauseFactoryProvider.loadedFactory ?: { EmptySqlQueryHintClause } - provide = { factory.invoke(it) } - } -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/QueryFactoryExtensionsTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/QueryFactoryExtensionsTest.kt deleted file mode 100644 index 4c489d629..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/QueryFactoryExtensionsTest.kt +++ /dev/null @@ -1,203 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import java.util.stream.Stream -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery -import kotlin.streams.toList - -@ExtendWith(MockKExtension::class) -internal class QueryFactoryExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var queryFactory: QueryFactory - - @MockK - private lateinit var typedQuery: TypedQuery - - @MockK - private lateinit var subqueryExpressionSpec: SubqueryExpressionSpec - - @Test - fun singleQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - every { typedQuery.singleResult } returns Data1() - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: Data1 = queryFactory.singleQuery(dsl) - - // then - assertThat(actual).isEqualTo(Data1()) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - typedQuery.singleResult - } - - confirmVerified(queryFactory, typedQuery) - } - - @Test - fun listQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - every { typedQuery.resultList } returns listOf(Data1()) - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: List = queryFactory.listQuery(dsl) - - // then - assertThat(actual).isEqualTo(listOf(Data1())) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - typedQuery.resultList - } - - confirmVerified(queryFactory, typedQuery) - } - - @Test - fun streamQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - every { typedQuery.resultStream } returns Stream.of(Data1()) - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual = queryFactory.streamQuery(dsl).toList() - - // then - assertThat(actual).contains(Data1()) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - typedQuery.resultStream - } - - confirmVerified(queryFactory, typedQuery) - } - - @Test - fun selectQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: TypedQuery = queryFactory.selectQuery(dsl) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun updateQuery() { - // given - every { queryFactory.updateQuery(any(), any()) } returns typedQuery - - val dsl: CriteriaUpdateQueryDsl.() -> Unit = { - set(col(Data1::id), 1) - where(col(Data1::id).equal(2)) - } - - // when - val actual: Query = queryFactory.updateQuery(dsl) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - queryFactory.updateQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun deleteQuery() { - // given - every { queryFactory.deleteQuery(any(), any()) } returns typedQuery - - val dsl: CriteriaDeleteQueryDsl.() -> Unit = { - where(col(Data1::id).equal(1)) - } - - // when - val actual: Query = queryFactory.deleteQuery(dsl) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - queryFactory.deleteQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - - @Test - fun subquery() { - // given - every { queryFactory.subquery(any(), any()) } returns subqueryExpressionSpec - - val dsl: SubqueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: SubqueryExpressionSpec = queryFactory.subquery(dsl) - - // then - assertThat(actual).isEqualTo(subqueryExpressionSpec) - - verify(exactly = 1) { - queryFactory.subquery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - data class Data1( - val id: Int = 100 - ) -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/QueryFactoryImplTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/QueryFactoryImplTest.kt deleted file mode 100644 index 70dac32cc..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/QueryFactoryImplTest.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.EmptySqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.emptySqlHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.LimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.EqualValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery - -@ExtendWith(MockKExtension::class) -internal class QueryFactoryImplTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: QueryFactoryImpl - - @MockK - private lateinit var criteriaQueryCreator: CriteriaQueryCreator - - @MockK - private lateinit var subqueryCreator: SubqueryCreator - - @Test - fun selectQuery() { - // given - val typedQuery: TypedQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>()) } returns typedQuery - - // when - - val actual = sut.selectQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - criteriaQueryCreator.createQuery( - QueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = LimitClause.empty(), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun updateQuery() { - // given - val query: Query = mockk() - - every { criteriaQueryCreator.createQuery(any>()) } returns query - - // when - val actual = sut.updateQuery(Data1::class) { - where(col(Data1::id).equal(1)) - set(col(Data1::id), 2) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - QueryDslImpl.CriteriaUpdateQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = EmptySqlQueryHintClause, - set = SetClause(mapOf(columnSpec to 2)), - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun deleteQuery() { - // given - val query: Query = mockk() - - every { criteriaQueryCreator.createQuery(any>()) } returns query - - // when - val actual = sut.deleteQuery(Data1::class) { - where(col(Data1::id).equal(1)) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - QueryDslImpl.CriteriaDeleteQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = EmptySqlQueryHintClause, - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun subquery() { - // when - val actual = sut.subquery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - val subquerySpec = QueryDslImpl.SubquerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - ) - - assertThat(actual).isEqualTo(SubqueryExpressionSpec(subquerySpec, subqueryCreator)) - } - - data class Data1( - val id: Int = 1 - ) -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClauseImplTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClauseImplTest.kt deleted file mode 100644 index e71b70a7a..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClauseImplTest.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.Query - -@ExtendWith(MockKExtension::class) -internal class JpaQueryHintClauseImplTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: Query - - @Test - fun apply() { - // given - val hints = mapOf( - "cacheable" to true, - "sql.hint" to "index" - ) - - every { query.setHint(any(), any()) } returns query - - // when - JpaQueryHintClauseImpl(hints).apply(query) - - // then - verify(exactly = 1) { - query.setHint("cacheable", true) - query.setHint("sql.hint", "index") - } - - confirmVerified(query) - } -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/LimitClauseTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/LimitClauseTest.kt deleted file mode 100644 index 450302daa..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/LimitClauseTest.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.limit - -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.Query - -@ExtendWith(MockKExtension::class) -internal class LimitClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: Query - - @Test - fun apply() { - // given - val offset = 10 - val maxResults = 20 - - every { query.setFirstResult(10) } returns query - every { query.setMaxResults(20) } returns query - - // when - LimitClause(offset, maxResults).apply(query) - - // then - verify(exactly = 1) { - query.firstResult = offset - query.maxResults = maxResults - } - - confirmVerified(query) - } - - @Test - fun `apply - null`() { - // given - val offset: Int? = null - val maxResults: Int? = null - - // when - LimitClause(offset, maxResults).apply(query) - - // then - confirmVerified(query) - } -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreatorImplTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreatorImplTest.kt deleted file mode 100644 index c009bd750..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreatorImplTest.kt +++ /dev/null @@ -1,263 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.EntityManager -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery -import jakarta.persistence.criteria.* - -@Suppress("UnusedEquals") -@ExtendWith(MockKExtension::class) -internal class CriteriaQueryCreatorImplTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: CriteriaQueryCreatorImpl - - @MockK - private lateinit var em: EntityManager - - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun createQuery() { - data class TestCriteriaQuerySpec( - override val select: CriteriaQuerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: CriteriaQueryWhereClause, - override val groupBy: CriteriaQueryGroupByClause, - override val having: CriteriaQueryHavingClause, - override val orderBy: CriteriaQueryOrderByClause, - override val limit: QueryLimitClause>, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaQuerySpec> - // given - val createdQuery: CriteriaQuery = mockk() - val typedQuery: TypedQuery = mockk() - - val select: CriteriaQuerySelectClause = mockk { - every { returnType } returns Int::class.java - } - val from: FromClause<*> = mockk() - val join: JoinClause = mockk() - val where: CriteriaQueryWhereClause = mockk() - val groupBy: CriteriaQueryGroupByClause = mockk() - val having: CriteriaQueryHavingClause = mockk() - val orderBy: CriteriaQueryOrderByClause = mockk() - val limit: QueryLimitClause> = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - - val spec: CriteriaQuerySpec> = TestCriteriaQuerySpec( - from = from, - join = join, - where = where, - groupBy = groupBy, - having = having, - orderBy = orderBy, - limit = limit, - jpaHint = jpaHint, - sqlHint = sqlHint, - select = select - ) - - every { em.criteriaBuilder } returns criteriaBuilder - every { em.createQuery(createdQuery) } returns typedQuery - every { criteriaBuilder.createQuery(Int::class.java) } returns createdQuery - every { from.join(join, createdQuery, criteriaBuilder) } returns froms - every { select.apply(froms, createdQuery, criteriaBuilder) } just runs - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { groupBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { having.apply(froms, createdQuery, criteriaBuilder) } just runs - every { orderBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { limit.apply(typedQuery) } just runs - every { jpaHint.apply(typedQuery) } just runs - every { sqlHint.apply(typedQuery) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - em.criteriaBuilder - em.createQuery(createdQuery) - criteriaBuilder.createQuery(Int::class.java) - from.join(join, createdQuery, criteriaBuilder) - select.returnType - select.apply(froms, createdQuery, criteriaBuilder) - where.apply(froms, createdQuery, criteriaBuilder) - groupBy.apply(froms, createdQuery, criteriaBuilder) - having.apply(froms, createdQuery, criteriaBuilder) - orderBy.apply(froms, createdQuery, criteriaBuilder) - limit.apply(typedQuery) - jpaHint.apply(typedQuery) - sqlHint.apply(typedQuery) - typedQuery == typedQuery - } - - confirmVerified( - select, from, join, where, groupBy, having, orderBy, limit, jpaHint, sqlHint, - createdQuery, typedQuery, - em, froms, criteriaBuilder - ) - } - - @Test - fun createUpdateQuery() { - data class TestCriteriaUpdateQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - override val set: SetClause - ) : CriteriaUpdateQuerySpec - // given - val createdQuery: CriteriaUpdate = mockk() - val query: Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause = mockk() - val sqlHint: SqlQueryHintClause = mockk() - val set: SetClause = mockk() - - val spec: CriteriaUpdateQuerySpec = TestCriteriaUpdateQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - set = set, - targetEntity = Int::class.java - ) - - val setKey = mockk>() - every { createdQuery.set(setKey, 1234) } returns createdQuery - - every { em.criteriaBuilder } returns criteriaBuilder - every { em.createQuery(createdQuery) } returns query - every { criteriaBuilder.createCriteriaUpdate(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(query) } just runs - every { sqlHint.apply(query) } just runs - every { set.apply(froms, createdQuery, criteriaBuilder) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - em.criteriaBuilder - em.createQuery(createdQuery) - criteriaBuilder.createCriteriaUpdate(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - set.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query) - sqlHint.apply(query) - query == query - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, query, - em, froms, criteriaBuilder - ) - } - - @Test - fun createDeleteQuery() { - data class TestCriteriaDeleteQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - ) : CriteriaDeleteQuerySpec - // given - val createdQuery: CriteriaDelete = mockk() - val query: Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause = mockk() - val sqlHint: SqlQueryHintClause = mockk() - val set: SetClause = mockk() - - val spec: CriteriaDeleteQuerySpec = TestCriteriaDeleteQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - targetEntity = Int::class.java - ) - - every { em.criteriaBuilder } returns criteriaBuilder - every { em.createQuery(createdQuery) } returns query - every { criteriaBuilder.createCriteriaDelete(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(query) } just runs - every { sqlHint.apply(query) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - em.criteriaBuilder - em.createQuery(createdQuery) - criteriaBuilder.createCriteriaDelete(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query) - sqlHint.apply(query) - query == query - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, query, - em, froms, criteriaBuilder - ) - } -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/QueryDslImplExpressionTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/QueryDslImplExpressionTest.kt deleted file mode 100644 index e7dc7e12f..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/QueryDslImplExpressionTest.kt +++ /dev/null @@ -1,364 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.* -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class QueryDslImplExpressionTest : WithKotlinJdslAssertions { - @Test - fun entity() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class) - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java)) - } - - @Test - fun entityWithAlias() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class, "data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun alias() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = Data1::class.alias("data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun literal() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = literal(10) - } - - assertThat(actual).isEqualTo(LiteralSpec(10)) - } - - @Test - fun nullLiteral() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = nullLiteral(Int::class.java) - } - - assertThat(actual).isEqualTo(NullLiteralSpec(Int::class.java)) - } - - @Test - fun col() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = col(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun column() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = column(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun max() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = max(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MaxSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun min() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = min(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MinSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun avg() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = avg(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - AvgSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun sum() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = sum(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - SumSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun count() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = count(distinct = true, col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countNonDistinct() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = count(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countDistinct() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = countDistinct(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun greatest() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = greatest(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - GreatestSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun least() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = least(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - LeastSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun caseList() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = case( - listOf( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - ), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun caseVararg() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = case( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun `when`() { - val predicate1: PredicateSpec = mockk() - val expression1: ExpressionSpec = mockk() - - val actual: CaseSpec.WhenSpec - - QueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1, expression1) - } - - assertThat(actual).isEqualTo(CaseSpec.WhenSpec(predicate1, expression1)) - } - - @Test - fun whenWithPredicate() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - QueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1) - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - @Test - fun whenWithLambda() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - QueryDslImpl(Data1::class.java).apply { - actual = `when` { predicate1 } - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - @Test - fun functionVarArg() { - // when - val actual: FunctionSpec - QueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - @Test - fun functionList() { - // when - val actual: FunctionSpec - QueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - listOf( - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - class Data1 { - val id: Int = 10 - } -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplFetchTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplFetchTest.kt deleted file mode 100644 index aa2d5161b..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplFetchTest.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.spec.FetchJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import jakarta.persistence.criteria.JoinType - -internal class QueryDslImplFetchTest : WithKotlinJdslAssertions { - @Test - fun fetch() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - fetch(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val fetchSpec = FetchJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(fetchSpec, fetchSpec, fetchSpec, fetchSpec)) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("This query does not support fetch") - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplFromTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplFromTest.kt deleted file mode 100644 index 886fd5327..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplFromTest.kt +++ /dev/null @@ -1,77 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class QueryDslImplFromTest : WithKotlinJdslAssertions { - @Test - fun fromJavaClass() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromKotlinClass() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromEntitySpec() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class, "data1")) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - } - - class Data1 -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplJoinTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplJoinTest.kt deleted file mode 100644 index 6a43b54b0..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplJoinTest.kt +++ /dev/null @@ -1,253 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.CrossJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleAssociatedJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleJoinSpec -import com.linecorp.kotlinjdsl.query.spec.TreatJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.employee.Employee -import com.linecorp.kotlinjdsl.test.entity.employee.FullTimeEmployee -import com.linecorp.kotlinjdsl.test.entity.employee.Project -import io.mockk.mockk -import org.junit.jupiter.api.Test -import java.math.BigDecimal -import jakarta.persistence.criteria.JoinType - -internal class QueryDslImplJoinTest : WithKotlinJdslAssertions { - @Test - fun on() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(Data1::class.java).apply { - actual = on(predicateSpec) - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun onLambda() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(Data1::class.java).apply { - actual = on { predicateSpec } - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun join() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun associate() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun treat() { - // when - val actual = QueryDslImpl(FullTimeEmployee::class.java).apply { - val project: EntitySpec = Project::class.alias("project") - val fullTimeEmployee = FullTimeEmployee::class.alias("fe") - val employee = Employee::class.alias("e") - - selectDistinct(fullTimeEmployee) - from(project) - treat( - root = ColumnSpec(entity = project, path = Project::employees.name), - parent = employee, - child = fullTimeEmployee, - parentJoinType = JoinType.RIGHT - ) - where( - ColumnSpec(fullTimeEmployee, FullTimeEmployee::annualSalary.name) - .greaterThan(100000.toBigDecimal()) - ) - } - - // then - val joinSpec = TreatJoinSpec( - left = EntitySpec(Employee::class.java, "e"), - right = EntitySpec(FullTimeEmployee::class.java, "fe"), - joinType = JoinType.RIGHT, - root = ColumnSpec(EntitySpec(Project::class.java, "project"), Project::employees.name), - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec)) - ) - } - - @Test - fun updateAssociate() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaUpdateQuerySpec() - - assertThat(criteriaQuerySpec.associate).isEqualTo( - SimpleAssociatedJoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun updateAssociateOnlyAllowsSimpleAssociatedJoinSpec() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2)) - } - - val result = catchThrowable(IllegalStateException::class) { actual.createCriteriaUpdateQuerySpec() } - - assertThat(result).hasMessage("This query only support associate") - } - - @Test - fun crossJoin() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(Data2::class, on(predicateSpec1)) - join(entity(Data2::class), on(predicateSpec1)) - where(predicateSpec2) - } - - // then - val joinSpec = CrossJoinSpec(EntitySpec(Data2::class.java)) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplRelationTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplRelationTest.kt deleted file mode 100644 index 9022fa870..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplRelationTest.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class QueryDslImplRelationTest : WithKotlinJdslAssertions { - @Test - fun on() { - val actual: Relation - - QueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2) - } - - assertThat(actual).isEqualTo(Relation("data2")) - } - - @Test - fun onCollection() { - val actual: Relation - - QueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2List) - } - - assertThat(actual).isEqualTo(Relation("data2List")) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/QueryDslImplGroupByTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/QueryDslImplGroupByTest.kt deleted file mode 100644 index b2eab0b0c..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/QueryDslImplGroupByTest.kt +++ /dev/null @@ -1,88 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.groupby - -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class QueryDslImplGroupByTest : WithKotlinJdslAssertions { - @Test - fun noGroupBy() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - @Test - fun groupByVararg() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(columnSpec1, columnSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - } - - @Test - fun groupByList() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(listOf(columnSpec1, columnSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - } - - class Data1 -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/having/QueryDslImplHavingTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/having/QueryDslImplHavingTest.kt deleted file mode 100644 index 527570d79..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/having/QueryDslImplHavingTest.kt +++ /dev/null @@ -1,89 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.having - -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class QueryDslImplHavingTest : WithKotlinJdslAssertions { - @Test - fun noHaving() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - @Test - fun having() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - } - - @Test - fun multipleHaving() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec1) - having(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - class Data1 -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/QueryDslImplHintTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/QueryDslImplHintTest.kt deleted file mode 100644 index 5a39facd1..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/QueryDslImplHintTest.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint - -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClauseImpl -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import jakarta.persistence.Query - -internal class QueryDslImplHintTest : WithKotlinJdslAssertions { - @Test - fun noHints() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaQueryHintClauseImpl(emptyMap()) - ) - } - - @Test - fun hintsVararg() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints("hint1" to true, "hint2" to "comment") - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaQueryHintClauseImpl( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - ) - } - - @Test - fun hintsMap() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints(mapOf("hint1" to true, "hint2" to "comment")) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaQueryHintClauseImpl( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - ) - } - - class Data1 -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/QueryDslImplLimitTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/QueryDslImplLimitTest.kt deleted file mode 100644 index 2cd9a04be..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/QueryDslImplLimitTest.kt +++ /dev/null @@ -1,98 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.limit - -import com.linecorp.kotlinjdsl.query.clause.limit.LimitClause -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import jakarta.persistence.Query - -internal class QueryDslImplLimitTest : WithKotlinJdslAssertions { - @Test - fun noLimit() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = null, maxResults = null) - ) - } - - @Test - fun offset() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - offset(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = 10, maxResults = null) - ) - } - - @Test - fun maxResults() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - maxResults(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = null, maxResults = 10) - ) - } - - @Test - fun limitMaxResults() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = null, maxResults = 10) - ) - } - - @Test - fun limitOffsetAndMaxResults() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(1, 10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = 1, maxResults = 10) - ) - } - - class Data1 { - val id: String = "test" - val name: String = "test_name" - } -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/QueryDslImplOrderByWhereTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/QueryDslImplOrderByWhereTest.kt deleted file mode 100644 index c80c0603f..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/QueryDslImplOrderByWhereTest.kt +++ /dev/null @@ -1,98 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.orderby - -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.spec.ExpressionOrderSpec -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class QueryDslImplOrderByWhereTest : WithKotlinJdslAssertions { - @Test - fun noOrderBy() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun orderByVararg() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(orderSpec1, orderSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - } - - @Test - fun orderByList() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(listOf(orderSpec1, orderSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - } - - @Test - fun asc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - QueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.asc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, true)) - } - - @Test - fun desc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - QueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.desc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, false)) - } - - class Data1 -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/QueryDslImplPredicateTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/QueryDslImplPredicateTest.kt deleted file mode 100644 index 3efe05e3a..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/QueryDslImplPredicateTest.kt +++ /dev/null @@ -1,473 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.* -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class QueryDslImplPredicateTest : WithKotlinJdslAssertions { - @Test - fun not() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = not(predicateSpec) - } - - assertThat(actual).isEqualTo(NotSpec(predicateSpec)) - } - - @Test - fun andVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = and(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun andList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = and(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = or(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = or(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun equalValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.equal(value) - } - - assertThat(actual).isEqualTo(EqualValueSpec(expressionSpec, value)) - } - - @Test - fun equalExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.equal(expressionSpec2) - } - - assertThat(actual).isEqualTo(EqualExpressionSpec(expressionSpec1, expressionSpec2)) - } - - @Test - fun notEqualValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.notEqual(value) - } - - assertThat(actual).isEqualTo(NotSpec(EqualValueSpec(expressionSpec, value))) - } - - @Test - fun notEqualExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.notEqual(expressionSpec2) - } - - assertThat(actual).isEqualTo(NotSpec(EqualExpressionSpec(expressionSpec1, expressionSpec2))) - } - - @Test - fun inValueVararg() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(value1, value2) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inValueList() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(listOf(value1, value2)) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inExpressionVararg() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun inExpressionList() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(listOf(expressionSpec2, expressionSpec3)) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun greaterThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun greaterThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun greaterThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun greaterThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun lessThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun lessThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun betweenValue() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(value1, value2) - } - - assertThat(actual).isEqualTo(BetweenValueSpec(expressionSpec, value1, value2)) - } - - @Test - fun betweenExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.between(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(BetweenExpressionSpec(expressionSpec1, expressionSpec2, expressionSpec3)) - } - - @Test - fun isTrue() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.isTrue() - } - - assertThat(actual).isEqualTo(IsTrueSpec(expressionSpec)) - } - - @Test - fun isFalse() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.isFalse() - } - - assertThat(actual).isEqualTo(IsFalseSpec(expressionSpec)) - } - - @Test - fun isNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNull() - } - - assertThat(actual).isEqualTo(IsNullSpec(expressionSpec)) - } - - @Test - fun isNotNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNotNull() - } - - assertThat(actual).isEqualTo(NotSpec(IsNullSpec(expressionSpec))) - } - - @Test - fun like() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.like(value) - } - - assertThat(actual).isEqualTo(LikeSpec(expressionSpec, value)) - } - - @Test - fun notLike() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.notLike(value) - } - - assertThat(actual).isEqualTo(NotSpec(LikeSpec(expressionSpec, value))) - } -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/QueryDslImplMultiSelectTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/QueryDslImplMultiSelectTest.kt deleted file mode 100644 index 84d7d7028..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/QueryDslImplMultiSelectTest.kt +++ /dev/null @@ -1,253 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class QueryDslImplMultiSelectTest : WithKotlinJdslAssertions { - @Test - fun select() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - select(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectNonDistinct() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - select(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectDistinct() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - selectDistinct(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMulti() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - selectMulti(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiNonDistinctVararg() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - selectMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiNonDistinctList() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - selectMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiDistinctVararg() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - selectDistinctMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiDistinctList() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - selectDistinctMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - data class Row( - val id: String, - val name: String, - ) - - class Data1 { - val id: String = "test" - val name: String = "test_name" - } -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/QueryDslImplSingleSelectTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/QueryDslImplSingleSelectTest.kt deleted file mode 100644 index 106b2de49..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/QueryDslImplSingleSelectTest.kt +++ /dev/null @@ -1,168 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class QueryDslImplSingleSelectTest : WithKotlinJdslAssertions { - @Test - fun noSelect() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - from(entity(Data1::class)) - } - - // then - val exception1 = catchThrowable(IllegalStateException::class) { - actual.createCriteriaQuerySpec() - } - - assertThat(exception1).hasMessageContaining("There is no select clause in query") - - val exception2 = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception2).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectEntity() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectExpression() { - // when - val actual = QueryDslImpl(String::class.java).apply { - select(distinct = true, column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectNonDistinctEntity() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectNonDistinctExpression() { - // when - val actual = QueryDslImpl(String::class.java).apply { - select(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectDistinctEntity() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - selectDistinct(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectDistinctExpression() { - // when - val actual = QueryDslImpl(String::class.java).apply { - selectDistinct(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - class Data1 { - val id: String = "test" - } -} diff --git a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/where/QueryDslImplWhereTest.kt b/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/where/QueryDslImplWhereTest.kt deleted file mode 100644 index 677aebce2..000000000 --- a/core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/where/QueryDslImplWhereTest.kt +++ /dev/null @@ -1,277 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.where - -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.OrSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class QueryDslImplWhereTest : WithKotlinJdslAssertions { - @Test - fun noWhere() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - } - - @Test - fun nullInWhere() { - // given - val predicateSpec: PredicateSpec? = null - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - } - - @Test - fun where() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - } - - @Test - fun whereAndVararg() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereAnd(nullPredicateSpec, predicateSpec1, predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun whereAndList() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereAnd(listOf(nullPredicateSpec, predicateSpec1, predicateSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun whereOrVararg() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereOr(nullPredicateSpec, predicateSpec1, predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun whereOrList() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereOr(listOf(nullPredicateSpec, predicateSpec1, predicateSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun wheres() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(nullPredicateSpec) - where(predicateSpec1) - where(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun allTypeWheres() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(nullPredicateSpec) - where(predicateSpec1) - whereAnd(nullPredicateSpec, predicateSpec1, predicateSpec2) - whereOr(nullPredicateSpec, predicateSpec1, predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause( - AndSpec( - listOf( - predicateSpec1, - AndSpec(listOf(predicateSpec1, predicateSpec2)), - OrSpec(listOf(predicateSpec1, predicateSpec2)) - ) - ) - ) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause( - AndSpec( - listOf( - predicateSpec1, - AndSpec(listOf(predicateSpec1, predicateSpec2)), - OrSpec(listOf(predicateSpec1, predicateSpec2)) - ) - ) - ) - ) - } - - class Data1 -} diff --git a/core/build.gradle.kts b/core/build.gradle.kts deleted file mode 100644 index 9afab53a6..000000000 --- a/core/build.gradle.kts +++ /dev/null @@ -1,15 +0,0 @@ -apply() - -dependencies { - api(Modules.query) - - compileOnly(libs.java.persistence.api) - compileOnly(libs.slf4j) - compileOnly(libs.hibernate) - - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntity) - testImplementation(libs.java.persistence.api) - testImplementation(libs.hibernate) - testImplementation(libs.h2) -} diff --git a/core/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactory.kt b/core/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactory.kt deleted file mode 100644 index 53515e7c4..000000000 --- a/core/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactory.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import javax.persistence.Query -import javax.persistence.TypedQuery -import kotlin.reflect.KClass - -interface QueryFactory { - @Deprecated( - replaceWith = ReplaceWith(expression = "selectQuery"), - message = "This method has been replaced with selectQuery." - ) - fun typedQuery(returnType: Class, dsl: CriteriaQueryDsl.() -> Unit) = selectQuery(returnType, dsl) - fun selectQuery(returnType: Class, dsl: CriteriaQueryDsl.() -> Unit): TypedQuery - fun updateQuery(target: KClass, dsl: CriteriaUpdateQueryDsl.() -> Unit): Query - fun deleteQuery(target: KClass, dsl: CriteriaDeleteQueryDsl.() -> Unit): Query - fun subquery(returnType: Class, dsl: SubqueryDsl.() -> Unit): SubqueryExpressionSpec -} diff --git a/core/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactoryExtensions.kt b/core/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactoryExtensions.kt deleted file mode 100644 index 369a9ab6b..000000000 --- a/core/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactoryExtensions.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import java.util.stream.Stream - -inline fun QueryFactory.singleQuery( - noinline dsl: CriteriaQueryDsl.() -> Unit -): T = selectQuery(T::class.java, dsl).singleResult - -inline fun QueryFactory.listQuery( - noinline dsl: CriteriaQueryDsl.() -> Unit -): List = selectQuery(T::class.java, dsl).resultList - -inline fun QueryFactory.streamQuery( - noinline dsl: CriteriaQueryDsl.() -> Unit -): Stream = selectQuery(T::class.java, dsl).resultStream - - -@Deprecated( - replaceWith = ReplaceWith(expression = "selectQuery"), - message = "This method has been replaced with selectQuery." -) -inline fun QueryFactory.typedQuery(noinline dsl: CriteriaQueryDsl.() -> Unit) = selectQuery(dsl) - -inline fun QueryFactory.selectQuery(noinline dsl: CriteriaQueryDsl.() -> Unit) = - selectQuery(T::class.java, dsl) - -inline fun QueryFactory.updateQuery(noinline dsl: CriteriaUpdateQueryDsl.() -> Unit) = - updateQuery(T::class, dsl) - -inline fun QueryFactory.deleteQuery(noinline dsl: CriteriaDeleteQueryDsl.() -> Unit) = - deleteQuery(T::class, dsl) - -inline fun QueryFactory.subquery(noinline dsl: SubqueryDsl.() -> Unit) = - subquery(T::class.java, dsl) diff --git a/core/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactoryImpl.kt b/core/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactoryImpl.kt deleted file mode 100644 index 54c902e68..000000000 --- a/core/src/main/kotlin/com/linecorp/kotlinjdsl/QueryFactoryImpl.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.* -import javax.persistence.Query -import javax.persistence.TypedQuery -import kotlin.reflect.KClass - -class QueryFactoryImpl( - private val criteriaQueryCreator: CriteriaQueryCreator, - private val subqueryCreator: SubqueryCreator, -) : QueryFactory { - override fun selectQuery( - returnType: Class, - dsl: CriteriaQueryDsl.() -> Unit - ): TypedQuery { - val criteriaQuerySpec = QueryDslImpl(returnType).apply(dsl).createCriteriaQuerySpec() - - return criteriaQueryCreator.createQuery(criteriaQuerySpec) - } - - override fun updateQuery(target: KClass, dsl: CriteriaUpdateQueryDsl.() -> Unit): Query { - return criteriaQueryCreator.createQuery( - QueryDslImpl(target.java).apply(dsl).apply { from(target) }.createCriteriaUpdateQuerySpec() - ) - } - - override fun deleteQuery(target: KClass, dsl: CriteriaDeleteQueryDsl.() -> Unit): Query { - return criteriaQueryCreator.createQuery( - QueryDslImpl(target.java).apply(dsl).apply { from(target) }.createCriteriaDeleteQuerySpec() - ) - } - - override fun subquery( - returnType: Class, - dsl: SubqueryDsl.() -> Unit - ): SubqueryExpressionSpec { - val subquerySpec = QueryDslImpl(returnType).apply(dsl).createSubquerySpec() - - return SubqueryExpressionSpec(subquerySpec, subqueryCreator) - } -} diff --git a/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EmptySqlQueryHintClause.kt b/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EmptySqlQueryHintClause.kt deleted file mode 100644 index b193eef47..000000000 --- a/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EmptySqlQueryHintClause.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import org.slf4j.LoggerFactory -import javax.persistence.Query - -@Suppress("UNCHECKED_CAST") -inline fun emptySqlHintClause(): SqlQueryHintClause = EmptySqlQueryHintClause as SqlQueryHintClause - -object EmptySqlQueryHintClause : SqlQueryHintClause { - private val log = LoggerFactory.getLogger(EmptySqlQueryHintClause::class.java) - - override fun apply(query: Query) { - log.warn( - "We do not yet support the sql query hint of this jpa implementation. Please contact us through github." - ) - } -} diff --git a/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClauseImpl.kt b/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClauseImpl.kt deleted file mode 100644 index eb07905ff..000000000 --- a/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClauseImpl.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import javax.persistence.Query - -data class JpaQueryHintClauseImpl( - val hints: Map -) : JpaQueryHintClause { - override fun apply(query: Q) { - hints.forEach { (hintName, value) -> query.setHint(hintName, value) } - } -} diff --git a/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/LimitClause.kt b/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/LimitClause.kt deleted file mode 100644 index 956cad0d1..000000000 --- a/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/LimitClause.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.limit - -import javax.persistence.Query - -data class LimitClause( - private val offset: Int?, - private val maxResults: Int?, -) : QueryLimitClause { - companion object { - val empty = LimitClause(null, null) - - @Suppress("UNCHECKED_CAST") - fun empty(): LimitClause = empty as LimitClause - } - - override fun apply(query: Q) { - offset?.run { query.firstResult = this } - maxResults?.run { query.maxResults = this } - } -} diff --git a/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreator.kt b/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreator.kt deleted file mode 100644 index 3916345d8..000000000 --- a/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreator.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import javax.persistence.Query -import javax.persistence.TypedQuery - -interface CriteriaQueryCreator { - fun createQuery(spec: CriteriaQuerySpec>): TypedQuery - fun createQuery(spec: CriteriaUpdateQuerySpec): Query - fun createQuery(spec: CriteriaDeleteQuerySpec): Query -} diff --git a/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreatorImpl.kt b/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreatorImpl.kt deleted file mode 100644 index c895d6439..000000000 --- a/core/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreatorImpl.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import javax.persistence.EntityManager -import javax.persistence.Query -import javax.persistence.TypedQuery - -class CriteriaQueryCreatorImpl( - private val em: EntityManager, -) : CriteriaQueryCreator { - override fun createQuery(spec: CriteriaQuerySpec>): TypedQuery = - JpaCriteriaQueryBuilder.createQuery(spec, em.criteriaBuilder, em::createQuery) - - override fun createQuery(spec: CriteriaUpdateQuerySpec): Query = - JpaCriteriaQueryBuilder.createQuery(spec, em.criteriaBuilder, em::createQuery) - - override fun createQuery(spec: CriteriaDeleteQuerySpec): Query = - JpaCriteriaQueryBuilder.createQuery(spec, em.criteriaBuilder, em::createQuery) -} diff --git a/core/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/QueryDslImpl.kt b/core/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/QueryDslImpl.kt deleted file mode 100644 index 26734ad50..000000000 --- a/core/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/QueryDslImpl.kt +++ /dev/null @@ -1,386 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import com.linecorp.kotlinjdsl.query.SubquerySpec -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.clause.groupby.SubqueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.clause.having.SubqueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.LimitClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SubquerySelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause -import com.linecorp.kotlinjdsl.query.clause.where.SubqueryWhereClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.* -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.OrSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.from.Relation -import com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseProvider -import javax.persistence.Query -import javax.persistence.TypedQuery -import javax.persistence.criteria.JoinType - -/** - * Internal DSL Implementation - * - * Don't use this directly because it's an **INTERNAL** class. - * It does not support backward compatibility. - * This class should be used with the understanding that it is not thread safe and therefore not suitable for parallel processing. - */ -open class QueryDslImpl( - private val returnType: Class, -) : CriteriaQueryDsl, SubqueryDsl, CriteriaUpdateQueryDsl, CriteriaDeleteQueryDsl { - private var singleSelectClause: SingleSelectClause? = null - private var multiSelectClause: MultiSelectClause? = null - private var fromClause: FromClause<*>? = null - private var joins: MutableList>? = null - private var wheres: MutableList? = null - private var groupBys: MutableList>? = null - private var havings: MutableList? = null - private var orderBys: MutableList? = null - private var offset: Int? = null - private var maxResults: Int? = null - private var sqlHints: MutableList? = null - private var jpaHints: MutableMap? = null - private var params: MutableMap, Any?>? = null - - private fun lazyJoins() = (joins ?: mutableListOf>().apply { joins = this }) - private fun lazyWheres() = (wheres ?: mutableListOf().apply { wheres = this }) - private fun lazyGroupBys() = (groupBys ?: mutableListOf>().apply { groupBys = this }) - private fun lazyHavings() = (havings ?: mutableListOf().apply { havings = this }) - private fun lazyOrderBys() = (orderBys ?: mutableListOf().apply { orderBys = this }) - private fun lazySqlHints() = (sqlHints ?: mutableListOf().apply { sqlHints = this }) - private fun lazyJpaHints() = (jpaHints ?: mutableMapOf().apply { jpaHints = this }) - private fun lazyParams() = (params ?: mutableMapOf, Any?>().apply { params = this }) - - override fun select(distinct: Boolean, expression: ExpressionSpec): SingleSelectClause { - return SingleSelectClause( - returnType = returnType, - distinct = distinct, - expression = expression, - ).also { singleSelectClause = it } - } - - override fun select(distinct: Boolean, expressions: List>): MultiSelectClause { - return MultiSelectClause( - returnType = returnType, - distinct = distinct, - expressions = expressions, - ).also { multiSelectClause = it } - } - - override fun from(entity: EntitySpec<*>) { - fromClause = FromClause(entity) - } - - override fun join(left: EntitySpec, right: EntitySpec, relation: Relation, joinType: JoinType) { - lazyJoins().add(SimpleJoinSpec(left = left, right = right, path = relation.path, joinType = joinType)) - } - - override fun join(entity: EntitySpec, predicate: PredicateSpec) { - lazyJoins().add(CrossJoinSpec(entity)) - lazyWheres().add(predicate) - } - - override fun associate( - left: EntitySpec, - right: EntitySpec, - relation: Relation, - joinType: JoinType - ) { - lazyJoins().add(SimpleAssociatedJoinSpec(left = left, right = right, path = relation.path)) - } - - override fun treat( - root: ColumnSpec<*>, - parent: EntitySpec

, - child: EntitySpec, - parentJoinType: JoinType - ) { - lazyJoins().add(TreatJoinSpec(parent, child, parentJoinType, root)) - } - - override fun fetch( - left: EntitySpec, - right: EntitySpec, - relation: Relation, - joinType: JoinType - ) { - lazyJoins().add(FetchJoinSpec(left = left, right = right, path = relation.path, joinType = joinType)) - } - - override fun where(predicate: PredicateSpec?) { - predicate?.run { lazyWheres().add(this) } - } - - override fun whereAnd(predicates: List) { - predicates.filterNotNull() - .takeIf { it.isNotEmpty() } - ?.run { where(AndSpec(this)) } - } - - override fun whereOr(predicates: List) { - predicates.filterNotNull() - .takeIf { it.isNotEmpty() } - ?.run { where(OrSpec(this)) } - } - - override fun groupBy(columns: List>) { - lazyGroupBys().addAll(columns) - } - - override fun having(predicate: PredicateSpec) { - lazyHavings().add(predicate) - } - - override fun orderBy(orders: List) { - lazyOrderBys().addAll(orders) - } - - override fun offset(offset: Int) { - this.offset = offset - } - - override fun maxResults(maxResults: Int) { - this.maxResults = maxResults - } - - override fun sqlHints(hints: List) { - lazySqlHints().addAll(hints) - } - - override fun hints(hints: Map) { - lazyJpaHints().putAll(hints) - } - - override fun setParams(params: Map, Any?>) { - lazyParams().putAll(params) - } - - override fun set(column: ColumnSpec<*>, value: Any?) { - lazyParams()[column] = value - } - - fun createCriteriaQuerySpec(): CriteriaQuerySpec> { - return CriteriaQuerySpecImpl( - select = getCriteriaQuerySelectClause(), - from = getFromClause(), - join = getJoinClause(), - where = getWhereClause(), - groupBy = getGroupByClause(), - having = getHavingClause(), - orderBy = getOrderByClause(), - limit = getLimitClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - ) - } - - @Suppress("UNCHECKED_CAST") - fun createCriteriaUpdateQuerySpec(): CriteriaUpdateQuerySpec { - return CriteriaUpdateQuerySpecImpl( - targetEntity = returnType, - from = getFromClause() as FromClause, - associate = getSimpleAssociatedJoinClauseOnly(), - where = getWhereClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - set = getSetClause() - ) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getSetClause() = SetClause(params.orEmpty()) - - @Suppress("UNCHECKED_CAST") - fun createCriteriaDeleteQuerySpec(): CriteriaDeleteQuerySpec { - return CriteriaDeleteQuerySpecImpl( - targetEntity = returnType, - from = getFromClause() as FromClause, - associate = getSimpleAssociatedJoinClauseOnly(), - where = getWhereClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause() - ) - } - - fun createSubquerySpec(): SubquerySpec { - return SubquerySpecImpl( - select = getSubquerySelectClause(), - from = getFromClause(), - join = getJoinClauseDoesNotHaveFetch(), - where = getWhereClause(), - groupBy = getGroupByClause(), - having = getHavingClause(), - ) - } - - protected fun getCriteriaQuerySelectClause(): CriteriaQuerySelectClause { - mustBe(singleSelectClause != null || multiSelectClause != null) { - "There is no select clause in query" - } - - return singleSelectClause ?: multiSelectClause!! - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getSubquerySelectClause(): SubquerySelectClause { - mustBe(singleSelectClause != null) { "There is no select clause in query" } - - return singleSelectClause!! - } - - protected fun getFromClause(): FromClause<*> { - mustBe(fromClause != null) { "There is no from clause in query" } - - return fromClause!! - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getJoinClause(): JoinClause { - return JoinClause(joins.orEmpty()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getJoinClauseDoesNotHaveFetch(): JoinClause { - mustBe(joins.orEmpty().filterIsInstance>().isEmpty()) { "This query does not support fetch" } - - return getJoinClause() - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getSimpleAssociatedJoinClauseOnly(): SimpleAssociatedJoinClause { - val joins = joins.orEmpty() - return joins.filterIsInstance>().let { - mustBe(it.size == joins.size) { "This query only support associate" } - SimpleAssociatedJoinClause(it) - } - } - - protected fun getWhereClause(): WhereClause { - return WhereClause(wheres.orEmpty().merge()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getGroupByClause(): GroupByClause { - return GroupByClause(groupBys.orEmpty()) - } - - protected fun getEmptyGroupByClause(): GroupByClause { - return GroupByClause(emptyList()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getHavingClause(): HavingClause { - return HavingClause(havings.orEmpty().merge()) - } - - protected fun getEmptyHavingClause(): HavingClause { - return HavingClause(PredicateSpec.empty) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getOrderByClause(): CriteriaQueryOrderByClause { - return OrderByClause(orderBys.orEmpty()) - } - - protected fun getEmptyOrderByClause(): CriteriaQueryOrderByClause { - return OrderByClause.empty - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getLimitClause(): QueryLimitClause { - return LimitClause(offset, maxResults) - } - - protected fun getEmptyLimitClause(): QueryLimitClause { - return LimitClause.empty() - } - - protected fun getJpaQueryHintClause(): JpaQueryHintClause { - return JpaQueryHintClauseImpl(jpaHints.orEmpty()) - } - - @Suppress("UNCHECKED_CAST") - protected fun getSqlQueryHintClause(): SqlQueryHintClause { - return SqlQueryHintClauseProvider.provide(sqlHints.orEmpty()) as SqlQueryHintClause - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun List.merge(): PredicateSpec { - return when { - isEmpty() -> PredicateSpec.empty - size == 1 -> first() - else -> AndSpec(this) - } - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun mustBe(condition: Boolean, lazyMessage: () -> String) { - if (!condition) { - throw IllegalStateException(lazyMessage()) - } - } - - data class CriteriaQuerySpecImpl( - override val select: CriteriaQuerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: CriteriaQueryWhereClause, - override val groupBy: CriteriaQueryGroupByClause, - override val having: CriteriaQueryHavingClause, - override val orderBy: CriteriaQueryOrderByClause, - override val limit: QueryLimitClause>, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaQuerySpec> - - data class CriteriaUpdateQuerySpecImpl( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - override val set: SetClause - ) : CriteriaUpdateQuerySpec - - data class CriteriaDeleteQuerySpecImpl( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause - ) : CriteriaDeleteQuerySpec - - data class SubquerySpecImpl( - override val select: SubquerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: SubqueryWhereClause, - override val groupBy: SubqueryGroupByClause, - override val having: SubqueryHavingClause - ) : SubquerySpec -} diff --git a/core/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/SqlQueryHintClauseProvider.kt b/core/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/SqlQueryHintClauseProvider.kt deleted file mode 100644 index 8435ff000..000000000 --- a/core/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/SqlQueryHintClauseProvider.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint - -import com.linecorp.kotlinjdsl.query.clause.hint.EmptySqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import org.slf4j.LoggerFactory -import java.util.* -import javax.persistence.Query - -interface SqlQueryHintClauseFactoryProvider { - fun factory(): (List) -> SqlQueryHintClause - - companion object { - private val log = LoggerFactory.getLogger(SqlQueryHintClauseFactoryProvider::class.java) - val loadedFactory by lazy { - ServiceLoader.load(SqlQueryHintClauseFactoryProvider::class.java).checkDuplicate().firstOrNull()?.factory() - } - - private fun ServiceLoader.checkDuplicate(): ServiceLoader { - takeIf { count() > 1 } - ?.run { log.warn("Duplicate Factory implementation detected") } - return this - } - } -} - -object SqlQueryHintClauseProvider { - val provide: (List) -> SqlQueryHintClause - - init { - val factory = SqlQueryHintClauseFactoryProvider.loadedFactory ?: { EmptySqlQueryHintClause } - provide = { factory.invoke(it) } - } -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/QueryFactoryExtensionsTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/QueryFactoryExtensionsTest.kt deleted file mode 100644 index 1c4063ea2..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/QueryFactoryExtensionsTest.kt +++ /dev/null @@ -1,207 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import java.util.stream.Stream -import javax.persistence.Query -import javax.persistence.TypedQuery -import kotlin.streams.toList - -@ExtendWith(MockKExtension::class) -internal class QueryFactoryExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var queryFactory: QueryFactory - - @MockK - private lateinit var typedQuery: TypedQuery - - @MockK - private lateinit var subqueryExpressionSpec: SubqueryExpressionSpec - - @Test - fun singleQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - every { typedQuery.singleResult } returns Data1() - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: Data1 = queryFactory.singleQuery(dsl) - - // then - assertThat(actual).isEqualTo(Data1()) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - typedQuery.singleResult - } - - confirmVerified(queryFactory, typedQuery) - } - - @Test - fun listQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - every { typedQuery.resultList } returns listOf(Data1()) - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: List = queryFactory.listQuery(dsl) - - // then - assertThat(actual).isEqualTo(listOf(Data1())) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - typedQuery.resultList - } - - confirmVerified(queryFactory, typedQuery) - } - - @Test - fun streamQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - every { typedQuery.resultStream } returns Stream.of(Data1()) - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual = queryFactory.streamQuery(dsl).toList() - - // then - assertThat(actual).contains(Data1()) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - typedQuery.resultStream - } - - confirmVerified(queryFactory, typedQuery) - } - - @Test - fun selectQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: TypedQuery = queryFactory.selectQuery(dsl) - - @Suppress("DEPRECATION") - val typedActual: TypedQuery = queryFactory.typedQuery(dsl) - - // then - assertThat(actual).isEqualTo(typedQuery) - assertThat(typedActual).isEqualTo(typedQuery) - - verify(exactly = 2) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun updateQuery() { - // given - every { queryFactory.updateQuery(any(), any()) } returns typedQuery - - val dsl: CriteriaUpdateQueryDsl.() -> Unit = { - set(col(Data1::id), 1) - where(col(Data1::id).equal(2)) - } - - // when - val actual: Query = queryFactory.updateQuery(dsl) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - queryFactory.updateQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun deleteQuery() { - // given - every { queryFactory.deleteQuery(any(), any()) } returns typedQuery - - val dsl: CriteriaDeleteQueryDsl.() -> Unit = { - where(col(Data1::id).equal(1)) - } - - // when - val actual: Query = queryFactory.deleteQuery(dsl) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - queryFactory.deleteQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - - @Test - fun subquery() { - // given - every { queryFactory.subquery(any(), any()) } returns subqueryExpressionSpec - - val dsl: SubqueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: SubqueryExpressionSpec = queryFactory.subquery(dsl) - - // then - assertThat(actual).isEqualTo(subqueryExpressionSpec) - - verify(exactly = 1) { - queryFactory.subquery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - data class Data1( - val id: Int = 100 - ) -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/QueryFactoryImplTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/QueryFactoryImplTest.kt deleted file mode 100644 index c13624823..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/QueryFactoryImplTest.kt +++ /dev/null @@ -1,190 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.EmptySqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.emptySqlHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.LimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.EqualValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.Query -import javax.persistence.TypedQuery - -@ExtendWith(MockKExtension::class) -internal class QueryFactoryImplTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: QueryFactoryImpl - - @MockK - private lateinit var criteriaQueryCreator: CriteriaQueryCreator - - @MockK - private lateinit var subqueryCreator: SubqueryCreator - - @Test - fun selectQuery() { - // given - val typedQuery: TypedQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>()) } returns typedQuery - - // when - - val actual = sut.selectQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - @Suppress("DEPRECATION") - val actualTypedQuery = sut.typedQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - // then - assertThat(actual).isEqualTo(typedQuery) - assertThat(actualTypedQuery).isEqualTo(typedQuery) - - verify(exactly = 2) { - criteriaQueryCreator.createQuery( - QueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = LimitClause.empty(), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun updateQuery() { - // given - val query: Query = mockk() - - every { criteriaQueryCreator.createQuery(any>()) } returns query - - // when - val actual = sut.updateQuery(Data1::class) { - where(col(Data1::id).equal(1)) - set(col(Data1::id), 2) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - QueryDslImpl.CriteriaUpdateQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = EmptySqlQueryHintClause, - set = SetClause(mapOf(columnSpec to 2)), - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun deleteQuery() { - // given - val query: Query = mockk() - - every { criteriaQueryCreator.createQuery(any>()) } returns query - - // when - val actual = sut.deleteQuery(Data1::class) { - where(col(Data1::id).equal(1)) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - QueryDslImpl.CriteriaDeleteQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = EmptySqlQueryHintClause, - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun subquery() { - // when - val actual = sut.subquery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - val subquerySpec = QueryDslImpl.SubquerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - ) - - assertThat(actual).isEqualTo(SubqueryExpressionSpec(subquerySpec, subqueryCreator)) - } - - data class Data1( - val id: Int = 1 - ) -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClauseImplTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClauseImplTest.kt deleted file mode 100644 index c8b85c97a..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClauseImplTest.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.Query - -@ExtendWith(MockKExtension::class) -internal class JpaQueryHintClauseImplTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: Query - - @Test - fun apply() { - // given - val hints = mapOf( - "cacheable" to true, - "sql.hint" to "index" - ) - - every { query.setHint(any(), any()) } returns query - - // when - JpaQueryHintClauseImpl(hints).apply(query) - - // then - verify(exactly = 1) { - query.setHint("cacheable", true) - query.setHint("sql.hint", "index") - } - - confirmVerified(query) - } -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/LimitClauseTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/LimitClauseTest.kt deleted file mode 100644 index 81f6b34c3..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/LimitClauseTest.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.limit - -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.Query - -@ExtendWith(MockKExtension::class) -internal class LimitClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: Query - - @Test - fun apply() { - // given - val offset = 10 - val maxResults = 20 - - every { query.setFirstResult(10) } returns query - every { query.setMaxResults(20) } returns query - - // when - LimitClause(offset, maxResults).apply(query) - - // then - verify(exactly = 1) { - query.firstResult = offset - query.maxResults = maxResults - } - - confirmVerified(query) - } - - @Test - fun `apply - null`() { - // given - val offset: Int? = null - val maxResults: Int? = null - - // when - LimitClause(offset, maxResults).apply(query) - - // then - confirmVerified(query) - } -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreatorImplTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreatorImplTest.kt deleted file mode 100644 index 9573acda8..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/CriteriaQueryCreatorImplTest.kt +++ /dev/null @@ -1,263 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.EntityManager -import javax.persistence.Query -import javax.persistence.TypedQuery -import javax.persistence.criteria.* - -@Suppress("UnusedEquals") -@ExtendWith(MockKExtension::class) -internal class CriteriaQueryCreatorImplTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: CriteriaQueryCreatorImpl - - @MockK - private lateinit var em: EntityManager - - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun createQuery() { - data class TestCriteriaQuerySpec( - override val select: CriteriaQuerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: CriteriaQueryWhereClause, - override val groupBy: CriteriaQueryGroupByClause, - override val having: CriteriaQueryHavingClause, - override val orderBy: CriteriaQueryOrderByClause, - override val limit: QueryLimitClause>, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaQuerySpec> - // given - val createdQuery: CriteriaQuery = mockk() - val typedQuery: TypedQuery = mockk() - - val select: CriteriaQuerySelectClause = mockk { - every { returnType } returns Int::class.java - } - val from: FromClause<*> = mockk() - val join: JoinClause = mockk() - val where: CriteriaQueryWhereClause = mockk() - val groupBy: CriteriaQueryGroupByClause = mockk() - val having: CriteriaQueryHavingClause = mockk() - val orderBy: CriteriaQueryOrderByClause = mockk() - val limit: QueryLimitClause> = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - - val spec: CriteriaQuerySpec> = TestCriteriaQuerySpec( - from = from, - join = join, - where = where, - groupBy = groupBy, - having = having, - orderBy = orderBy, - limit = limit, - jpaHint = jpaHint, - sqlHint = sqlHint, - select = select - ) - - every { em.criteriaBuilder } returns criteriaBuilder - every { em.createQuery(createdQuery) } returns typedQuery - every { criteriaBuilder.createQuery(Int::class.java) } returns createdQuery - every { from.join(join, createdQuery, criteriaBuilder) } returns froms - every { select.apply(froms, createdQuery, criteriaBuilder) } just runs - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { groupBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { having.apply(froms, createdQuery, criteriaBuilder) } just runs - every { orderBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { limit.apply(typedQuery) } just runs - every { jpaHint.apply(typedQuery) } just runs - every { sqlHint.apply(typedQuery) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - em.criteriaBuilder - em.createQuery(createdQuery) - criteriaBuilder.createQuery(Int::class.java) - from.join(join, createdQuery, criteriaBuilder) - select.returnType - select.apply(froms, createdQuery, criteriaBuilder) - where.apply(froms, createdQuery, criteriaBuilder) - groupBy.apply(froms, createdQuery, criteriaBuilder) - having.apply(froms, createdQuery, criteriaBuilder) - orderBy.apply(froms, createdQuery, criteriaBuilder) - limit.apply(typedQuery) - jpaHint.apply(typedQuery) - sqlHint.apply(typedQuery) - typedQuery == typedQuery - } - - confirmVerified( - select, from, join, where, groupBy, having, orderBy, limit, jpaHint, sqlHint, - createdQuery, typedQuery, - em, froms, criteriaBuilder - ) - } - - @Test - fun createUpdateQuery() { - data class TestCriteriaUpdateQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - override val set: SetClause - ) : CriteriaUpdateQuerySpec - // given - val createdQuery: CriteriaUpdate = mockk() - val query: Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause = mockk() - val sqlHint: SqlQueryHintClause = mockk() - val set: SetClause = mockk() - - val spec: CriteriaUpdateQuerySpec = TestCriteriaUpdateQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - set = set, - targetEntity = Int::class.java - ) - - val setKey = mockk>() - every { createdQuery.set(setKey, 1234) } returns createdQuery - - every { em.criteriaBuilder } returns criteriaBuilder - every { em.createQuery(createdQuery) } returns query - every { criteriaBuilder.createCriteriaUpdate(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(query) } just runs - every { sqlHint.apply(query) } just runs - every { set.apply(froms, createdQuery, criteriaBuilder) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - em.criteriaBuilder - em.createQuery(createdQuery) - criteriaBuilder.createCriteriaUpdate(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - set.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query) - sqlHint.apply(query) - query == query - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, query, - em, froms, criteriaBuilder - ) - } - - @Test - fun createDeleteQuery() { - data class TestCriteriaDeleteQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - ) : CriteriaDeleteQuerySpec - // given - val createdQuery: CriteriaDelete = mockk() - val query: Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause = mockk() - val sqlHint: SqlQueryHintClause = mockk() - val set: SetClause = mockk() - - val spec: CriteriaDeleteQuerySpec = TestCriteriaDeleteQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - targetEntity = Int::class.java - ) - - every { em.criteriaBuilder } returns criteriaBuilder - every { em.createQuery(createdQuery) } returns query - every { criteriaBuilder.createCriteriaDelete(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(query) } just runs - every { sqlHint.apply(query) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - em.criteriaBuilder - em.createQuery(createdQuery) - criteriaBuilder.createCriteriaDelete(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query) - sqlHint.apply(query) - query == query - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, query, - em, froms, criteriaBuilder - ) - } -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/QueryDslImplExpressionTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/QueryDslImplExpressionTest.kt deleted file mode 100644 index e7dc7e12f..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/QueryDslImplExpressionTest.kt +++ /dev/null @@ -1,364 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.* -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class QueryDslImplExpressionTest : WithKotlinJdslAssertions { - @Test - fun entity() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class) - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java)) - } - - @Test - fun entityWithAlias() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class, "data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun alias() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = Data1::class.alias("data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun literal() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = literal(10) - } - - assertThat(actual).isEqualTo(LiteralSpec(10)) - } - - @Test - fun nullLiteral() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = nullLiteral(Int::class.java) - } - - assertThat(actual).isEqualTo(NullLiteralSpec(Int::class.java)) - } - - @Test - fun col() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = col(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun column() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = column(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun max() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = max(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MaxSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun min() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = min(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MinSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun avg() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = avg(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - AvgSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun sum() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = sum(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - SumSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun count() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = count(distinct = true, col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countNonDistinct() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = count(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countDistinct() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = countDistinct(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun greatest() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = greatest(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - GreatestSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun least() { - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = least(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - LeastSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun caseList() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = case( - listOf( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - ), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun caseVararg() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - QueryDslImpl(Data1::class.java).apply { - actual = case( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun `when`() { - val predicate1: PredicateSpec = mockk() - val expression1: ExpressionSpec = mockk() - - val actual: CaseSpec.WhenSpec - - QueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1, expression1) - } - - assertThat(actual).isEqualTo(CaseSpec.WhenSpec(predicate1, expression1)) - } - - @Test - fun whenWithPredicate() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - QueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1) - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - @Test - fun whenWithLambda() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - QueryDslImpl(Data1::class.java).apply { - actual = `when` { predicate1 } - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - @Test - fun functionVarArg() { - // when - val actual: FunctionSpec - QueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - @Test - fun functionList() { - // when - val actual: FunctionSpec - QueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - listOf( - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - class Data1 { - val id: Int = 10 - } -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplFetchTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplFetchTest.kt deleted file mode 100644 index dfd7a2248..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplFetchTest.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.spec.FetchJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import javax.persistence.criteria.JoinType - -internal class QueryDslImplFetchTest : WithKotlinJdslAssertions { - @Test - fun fetch() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - fetch(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val fetchSpec = FetchJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(fetchSpec, fetchSpec, fetchSpec, fetchSpec)) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("This query does not support fetch") - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplFromTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplFromTest.kt deleted file mode 100644 index 886fd5327..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplFromTest.kt +++ /dev/null @@ -1,77 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class QueryDslImplFromTest : WithKotlinJdslAssertions { - @Test - fun fromJavaClass() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromKotlinClass() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromEntitySpec() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class, "data1")) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - } - - class Data1 -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplJoinTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplJoinTest.kt deleted file mode 100644 index ec3085a7f..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplJoinTest.kt +++ /dev/null @@ -1,253 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.CrossJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleAssociatedJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleJoinSpec -import com.linecorp.kotlinjdsl.query.spec.TreatJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.employee.Employee -import com.linecorp.kotlinjdsl.test.entity.employee.FullTimeEmployee -import com.linecorp.kotlinjdsl.test.entity.employee.Project -import io.mockk.mockk -import org.junit.jupiter.api.Test -import java.math.BigDecimal -import javax.persistence.criteria.JoinType - -internal class QueryDslImplJoinTest : WithKotlinJdslAssertions { - @Test - fun on() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(Data1::class.java).apply { - actual = on(predicateSpec) - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun onLambda() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(Data1::class.java).apply { - actual = on { predicateSpec } - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun join() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun associate() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun treat() { - // when - val actual = QueryDslImpl(FullTimeEmployee::class.java).apply { - val project: EntitySpec = Project::class.alias("project") - val fullTimeEmployee = FullTimeEmployee::class.alias("fe") - val employee = Employee::class.alias("e") - - selectDistinct(fullTimeEmployee) - from(project) - treat( - root = ColumnSpec(entity = project, path = Project::employees.name), - parent = employee, - child = fullTimeEmployee, - parentJoinType = JoinType.RIGHT - ) - where( - ColumnSpec(fullTimeEmployee, FullTimeEmployee::annualSalary.name) - .greaterThan(100000.toBigDecimal()) - ) - } - - // then - val joinSpec = TreatJoinSpec( - left = EntitySpec(Employee::class.java, "e"), - right = EntitySpec(FullTimeEmployee::class.java, "fe"), - joinType = JoinType.RIGHT, - root = ColumnSpec(EntitySpec(Project::class.java, "project"), Project::employees.name), - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec)) - ) - } - - @Test - fun updateAssociate() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaUpdateQuerySpec() - - assertThat(criteriaQuerySpec.associate).isEqualTo( - SimpleAssociatedJoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun updateAssociateOnlyAllowsSimpleAssociatedJoinSpec() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2)) - } - - val result = catchThrowable(IllegalStateException::class) { actual.createCriteriaUpdateQuerySpec() } - - assertThat(result).hasMessage("This query only support associate") - } - - @Test - fun crossJoin() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(Data2::class, on(predicateSpec1)) - join(entity(Data2::class), on(predicateSpec1)) - where(predicateSpec2) - } - - // then - val joinSpec = CrossJoinSpec(EntitySpec(Data2::class.java)) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplRelationTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplRelationTest.kt deleted file mode 100644 index 9022fa870..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/QueryDslImplRelationTest.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class QueryDslImplRelationTest : WithKotlinJdslAssertions { - @Test - fun on() { - val actual: Relation - - QueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2) - } - - assertThat(actual).isEqualTo(Relation("data2")) - } - - @Test - fun onCollection() { - val actual: Relation - - QueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2List) - } - - assertThat(actual).isEqualTo(Relation("data2List")) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/QueryDslImplGroupByTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/QueryDslImplGroupByTest.kt deleted file mode 100644 index b2eab0b0c..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/QueryDslImplGroupByTest.kt +++ /dev/null @@ -1,88 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.groupby - -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class QueryDslImplGroupByTest : WithKotlinJdslAssertions { - @Test - fun noGroupBy() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - @Test - fun groupByVararg() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(columnSpec1, columnSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - } - - @Test - fun groupByList() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(listOf(columnSpec1, columnSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - } - - class Data1 -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/having/QueryDslImplHavingTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/having/QueryDslImplHavingTest.kt deleted file mode 100644 index 527570d79..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/having/QueryDslImplHavingTest.kt +++ /dev/null @@ -1,89 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.having - -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class QueryDslImplHavingTest : WithKotlinJdslAssertions { - @Test - fun noHaving() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - @Test - fun having() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - } - - @Test - fun multipleHaving() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec1) - having(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - class Data1 -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/QueryDslImplHintTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/QueryDslImplHintTest.kt deleted file mode 100644 index 0133acb36..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/QueryDslImplHintTest.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint - -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClauseImpl -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import javax.persistence.Query - -internal class QueryDslImplHintTest : WithKotlinJdslAssertions { - @Test - fun noHints() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaQueryHintClauseImpl(emptyMap()) - ) - } - - @Test - fun hintsVararg() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints("hint1" to true, "hint2" to "comment") - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaQueryHintClauseImpl( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - ) - } - - @Test - fun hintsMap() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints(mapOf("hint1" to true, "hint2" to "comment")) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaQueryHintClauseImpl( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - ) - } - - class Data1 -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/QueryDslImplLimitTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/QueryDslImplLimitTest.kt deleted file mode 100644 index a46451ecc..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/QueryDslImplLimitTest.kt +++ /dev/null @@ -1,98 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.limit - -import com.linecorp.kotlinjdsl.query.clause.limit.LimitClause -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import javax.persistence.Query - -internal class QueryDslImplLimitTest : WithKotlinJdslAssertions { - @Test - fun noLimit() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = null, maxResults = null) - ) - } - - @Test - fun offset() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - offset(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = 10, maxResults = null) - ) - } - - @Test - fun maxResults() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - maxResults(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = null, maxResults = 10) - ) - } - - @Test - fun limitMaxResults() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = null, maxResults = 10) - ) - } - - @Test - fun limitOffsetAndMaxResults() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(1, 10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = 1, maxResults = 10) - ) - } - - class Data1 { - val id: String = "test" - val name: String = "test_name" - } -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/QueryDslImplOrderByWhereTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/QueryDslImplOrderByWhereTest.kt deleted file mode 100644 index c80c0603f..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/QueryDslImplOrderByWhereTest.kt +++ /dev/null @@ -1,98 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.orderby - -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.spec.ExpressionOrderSpec -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class QueryDslImplOrderByWhereTest : WithKotlinJdslAssertions { - @Test - fun noOrderBy() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun orderByVararg() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(orderSpec1, orderSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - } - - @Test - fun orderByList() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(listOf(orderSpec1, orderSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - } - - @Test - fun asc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - QueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.asc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, true)) - } - - @Test - fun desc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - QueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.desc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, false)) - } - - class Data1 -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/QueryDslImplPredicateTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/QueryDslImplPredicateTest.kt deleted file mode 100644 index 3efe05e3a..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/QueryDslImplPredicateTest.kt +++ /dev/null @@ -1,473 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.* -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class QueryDslImplPredicateTest : WithKotlinJdslAssertions { - @Test - fun not() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = not(predicateSpec) - } - - assertThat(actual).isEqualTo(NotSpec(predicateSpec)) - } - - @Test - fun andVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = and(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun andList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = and(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = or(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = or(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun equalValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.equal(value) - } - - assertThat(actual).isEqualTo(EqualValueSpec(expressionSpec, value)) - } - - @Test - fun equalExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.equal(expressionSpec2) - } - - assertThat(actual).isEqualTo(EqualExpressionSpec(expressionSpec1, expressionSpec2)) - } - - @Test - fun notEqualValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.notEqual(value) - } - - assertThat(actual).isEqualTo(NotSpec(EqualValueSpec(expressionSpec, value))) - } - - @Test - fun notEqualExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.notEqual(expressionSpec2) - } - - assertThat(actual).isEqualTo(NotSpec(EqualExpressionSpec(expressionSpec1, expressionSpec2))) - } - - @Test - fun inValueVararg() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(value1, value2) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inValueList() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(listOf(value1, value2)) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inExpressionVararg() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun inExpressionList() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(listOf(expressionSpec2, expressionSpec3)) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun greaterThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun greaterThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun greaterThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun greaterThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun lessThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun lessThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun betweenValue() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(value1, value2) - } - - assertThat(actual).isEqualTo(BetweenValueSpec(expressionSpec, value1, value2)) - } - - @Test - fun betweenExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec1.between(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(BetweenExpressionSpec(expressionSpec1, expressionSpec2, expressionSpec3)) - } - - @Test - fun isTrue() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.isTrue() - } - - assertThat(actual).isEqualTo(IsTrueSpec(expressionSpec)) - } - - @Test - fun isFalse() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.isFalse() - } - - assertThat(actual).isEqualTo(IsFalseSpec(expressionSpec)) - } - - @Test - fun isNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNull() - } - - assertThat(actual).isEqualTo(IsNullSpec(expressionSpec)) - } - - @Test - fun isNotNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNotNull() - } - - assertThat(actual).isEqualTo(NotSpec(IsNullSpec(expressionSpec))) - } - - @Test - fun like() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.like(value) - } - - assertThat(actual).isEqualTo(LikeSpec(expressionSpec, value)) - } - - @Test - fun notLike() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - QueryDslImpl(String::class.java).apply { - actual = expressionSpec.notLike(value) - } - - assertThat(actual).isEqualTo(NotSpec(LikeSpec(expressionSpec, value))) - } -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/QueryDslImplMultiSelectTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/QueryDslImplMultiSelectTest.kt deleted file mode 100644 index ee770a682..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/QueryDslImplMultiSelectTest.kt +++ /dev/null @@ -1,253 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class QueryDslImplMultiSelectTest : WithKotlinJdslAssertions { - @Test - fun select() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - select(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectNonDistinct() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - select(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectDistinct() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - selectDistinct(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMulti() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - selectMulti(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiNonDistinctVararg() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - selectMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiNonDistinctList() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - selectMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiDistinctVararg() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - selectDistinctMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiDistinctList() { - // when - val actual = QueryDslImpl(Row::class.java).apply { - selectDistinctMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - data class Row( - val id: String, - val name: String, - ) - - class Data1 { - val id: String = "test" - val name: String = "test_name" - } -} \ No newline at end of file diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/QueryDslImplSingleSelectTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/QueryDslImplSingleSelectTest.kt deleted file mode 100644 index 106b2de49..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/QueryDslImplSingleSelectTest.kt +++ /dev/null @@ -1,168 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class QueryDslImplSingleSelectTest : WithKotlinJdslAssertions { - @Test - fun noSelect() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - from(entity(Data1::class)) - } - - // then - val exception1 = catchThrowable(IllegalStateException::class) { - actual.createCriteriaQuerySpec() - } - - assertThat(exception1).hasMessageContaining("There is no select clause in query") - - val exception2 = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception2).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectEntity() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectExpression() { - // when - val actual = QueryDslImpl(String::class.java).apply { - select(distinct = true, column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectNonDistinctEntity() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectNonDistinctExpression() { - // when - val actual = QueryDslImpl(String::class.java).apply { - select(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectDistinctEntity() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - selectDistinct(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectDistinctExpression() { - // when - val actual = QueryDslImpl(String::class.java).apply { - selectDistinct(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - class Data1 { - val id: String = "test" - } -} diff --git a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/where/QueryDslImplWhereTest.kt b/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/where/QueryDslImplWhereTest.kt deleted file mode 100644 index 677aebce2..000000000 --- a/core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/where/QueryDslImplWhereTest.kt +++ /dev/null @@ -1,277 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.where - -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.OrSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class QueryDslImplWhereTest : WithKotlinJdslAssertions { - @Test - fun noWhere() { - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - } - - @Test - fun nullInWhere() { - // given - val predicateSpec: PredicateSpec? = null - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - } - - @Test - fun where() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - } - - @Test - fun whereAndVararg() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereAnd(nullPredicateSpec, predicateSpec1, predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun whereAndList() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereAnd(listOf(nullPredicateSpec, predicateSpec1, predicateSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun whereOrVararg() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereOr(nullPredicateSpec, predicateSpec1, predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun whereOrList() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereOr(listOf(nullPredicateSpec, predicateSpec1, predicateSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun wheres() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(nullPredicateSpec) - where(predicateSpec1) - where(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun allTypeWheres() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = QueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(nullPredicateSpec) - where(predicateSpec1) - whereAnd(nullPredicateSpec, predicateSpec1, predicateSpec2) - whereOr(nullPredicateSpec, predicateSpec1, predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause( - AndSpec( - listOf( - predicateSpec1, - AndSpec(listOf(predicateSpec1, predicateSpec2)), - OrSpec(listOf(predicateSpec1, predicateSpec2)) - ) - ) - ) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause( - AndSpec( - listOf( - predicateSpec1, - AndSpec(listOf(predicateSpec1, predicateSpec2)), - OrSpec(listOf(predicateSpec1, predicateSpec2)) - ) - ) - ) - ) - } - - class Data1 -} diff --git a/document/image/Visual1.gif b/document/image/Visual1.gif deleted file mode 100644 index 263539db7..000000000 Binary files a/document/image/Visual1.gif and /dev/null differ diff --git a/document/image/Visual2.gif b/document/image/Visual2.gif deleted file mode 100644 index 9e152f783..000000000 Binary files a/document/image/Visual2.gif and /dev/null differ diff --git a/document/image/reactive/reactive1.png b/document/image/reactive/reactive1.png deleted file mode 100644 index 5eeb09e7f..000000000 Binary files a/document/image/reactive/reactive1.png and /dev/null differ diff --git a/document/image/reactive/reactive2.png b/document/image/reactive/reactive2.png deleted file mode 100644 index 90e5f80da..000000000 Binary files a/document/image/reactive/reactive2.png and /dev/null differ diff --git a/document/image/reactive1.png b/document/image/reactive1.png deleted file mode 100644 index bc19ffbc3..000000000 Binary files a/document/image/reactive1.png and /dev/null differ diff --git a/document/image/reactive2.png b/document/image/reactive2.png deleted file mode 100644 index 89fa5bc1b..000000000 Binary files a/document/image/reactive2.png and /dev/null differ diff --git a/document/image/reactive3.png b/document/image/reactive3.png deleted file mode 100644 index 2274b6f3e..000000000 Binary files a/document/image/reactive3.png and /dev/null differ diff --git a/dsl/build.gradle.kts b/dsl/build.gradle.kts new file mode 100644 index 000000000..418ed5b51 --- /dev/null +++ b/dsl/build.gradle.kts @@ -0,0 +1,3 @@ +dependencies { + api(projects.query) +} diff --git a/eclipselink-jakarta/build.gradle.kts b/eclipselink-jakarta/build.gradle.kts deleted file mode 100644 index 0da73c540..000000000 --- a/eclipselink-jakarta/build.gradle.kts +++ /dev/null @@ -1,18 +0,0 @@ -apply() - -dependencies { - api(Modules.coreJakarta) - - compileOnly(libs.eclipselink.v4) - compileOnly(libs.jakarta.persistence.api) - compileOnly(libs.slf4j) - - testImplementation(Modules.testFixtureIntegrationJakarta) - testImplementation(libs.eclipselink.v4) - testImplementation(libs.jakarta.persistence.api) - testImplementation(libs.h2) -} - -coverage { - exclude(project) -} diff --git a/eclipselink-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EclipselinkSqlQueryHintClause.kt b/eclipselink-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EclipselinkSqlQueryHintClause.kt deleted file mode 100644 index 4b0e5826c..000000000 --- a/eclipselink-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EclipselinkSqlQueryHintClause.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import org.eclipse.persistence.queries.DatabaseQuery -import org.slf4j.LoggerFactory -import jakarta.persistence.Query - -data class EclipselinkSqlQueryHintClause( - private val queryHints: List -) : SqlQueryHintClause { - companion object { - private val log = LoggerFactory.getLogger(EclipselinkSqlQueryHintClause::class.java) - } - - override fun apply(query: Query) { - if (queryHints.isEmpty()) return - - val unwrappedQuery = try { - query.unwrap(DatabaseQuery::class.java) - } catch (e: Exception) { - log.error("This query does not support eclipselink query hint", e) - null - } - - unwrappedQuery?.run { - queryHints.forEach { hintString = it } - } - } -} diff --git a/eclipselink-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/eclipselink/EclipselinkSqlQueryHintClauseFactoryProvider.kt b/eclipselink-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/eclipselink/EclipselinkSqlQueryHintClauseFactoryProvider.kt deleted file mode 100644 index c1bd565d1..000000000 --- a/eclipselink-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/eclipselink/EclipselinkSqlQueryHintClauseFactoryProvider.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint.eclipselink - -import com.linecorp.kotlinjdsl.query.clause.hint.EclipselinkSqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider -import jakarta.persistence.Query - -class EclipselinkSqlQueryHintClauseFactoryProvider : SqlQueryHintClauseFactoryProvider { - override fun factory(): (List) -> SqlQueryHintClause = { EclipselinkSqlQueryHintClause(it) } -} diff --git a/eclipselink-jakarta/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider b/eclipselink-jakarta/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider deleted file mode 100644 index b7858a19b..000000000 --- a/eclipselink-jakarta/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider +++ /dev/null @@ -1 +0,0 @@ -com.linecorp.kotlinjdsl.querydsl.hint.eclipselink.EclipselinkSqlQueryHintClauseFactoryProvider \ No newline at end of file diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkCriteriaDeleteIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkCriteriaDeleteIntegrationTest.kt deleted file mode 100644 index 5da729bb5..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkCriteriaDeleteIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractCriteriaDeleteIntegrationTest - -class EclipselinkCriteriaDeleteIntegrationTest : AbstractCriteriaDeleteIntegrationTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkFetchDslIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkFetchDslIntegrationTest.kt deleted file mode 100644 index 4e1ba11a6..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkFetchDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractFetchDslTest - -class EclipselinkFetchDslIntegrationTest : AbstractFetchDslTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkGroupByDslIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkGroupByDslIntegrationTest.kt deleted file mode 100644 index 8c8dfc470..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkGroupByDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractGroupByDslTest - -class EclipselinkGroupByDslIntegrationTest : AbstractGroupByDslTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkJoinDslIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkJoinDslIntegrationTest.kt deleted file mode 100644 index d5626380d..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkJoinDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractJoinDslTest - -class EclipselinkJoinDslIntegrationTest : AbstractJoinDslTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkLimitDslIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkLimitDslIntegrationTest.kt deleted file mode 100644 index 75da748fd..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkLimitDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractLimitDslTest - -class EclipselinkLimitDslIntegrationTest : AbstractLimitDslTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkOrderByDslIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkOrderByDslIntegrationTest.kt deleted file mode 100644 index f4166b64a..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkOrderByDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractOrderByDslTest - -class EclipselinkOrderByDslIntegrationTest : AbstractOrderByDslTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/expression/EclipselinkCriteriaQueryDslExpressionIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/expression/EclipselinkCriteriaQueryDslExpressionIntegrationTest.kt deleted file mode 100644 index 3a8654889..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/expression/EclipselinkCriteriaQueryDslExpressionIntegrationTest.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.expression - -import com.linecorp.kotlinjdsl.test.integration.querydsl.expression.AbstractCriteriaQueryDslExpressionIntegrationTest - -internal class EclipselinkCriteriaQueryDslExpressionIntegrationTest : - AbstractCriteriaQueryDslExpressionIntegrationTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/from/EclipselinkCriteriaQueryDslFromIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/from/EclipselinkCriteriaQueryDslFromIntegrationTest.kt deleted file mode 100644 index 4797b1b8a..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/from/EclipselinkCriteriaQueryDslFromIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.from - -import com.linecorp.kotlinjdsl.test.integration.querydsl.from.AbstractCriteriaQueryDslFromIntegrationTest - -internal class EclipselinkCriteriaQueryDslFromIntegrationTest : AbstractCriteriaQueryDslFromIntegrationTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/from/EclipselinkCriteriaQueryDslFromTreatIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/from/EclipselinkCriteriaQueryDslFromTreatIntegrationTest.kt deleted file mode 100644 index 7b260d465..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/from/EclipselinkCriteriaQueryDslFromTreatIntegrationTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.from - -import com.linecorp.kotlinjdsl.test.integration.querydsl.from.AbstractCriteriaQueryDslFromTreatIntegrationTest -import org.eclipse.persistence.exceptions.QueryException -import org.junit.jupiter.api.Test - -internal class EclipselinkCriteriaQueryDslFromTreatIntegrationTest : - AbstractCriteriaQueryDslFromTreatIntegrationTest() { - /** - * except Hibernate, select downcasting entity is prohibited - */ - @Test - override fun getProjectByFullTimeEmployeesSalarySelectFullTimeEmployee() { - assertThatThrownBy { super.getProjectByFullTimeEmployeesSalarySelectFullTimeEmployee() } - .hasRootCauseExactlyInstanceOf(QueryException::class.java) - } -} diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/groupby/EclipselinkCriteriaQueryDslGroupByIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/groupby/EclipselinkCriteriaQueryDslGroupByIntegrationTest.kt deleted file mode 100644 index 5a7067492..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/groupby/EclipselinkCriteriaQueryDslGroupByIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.groupby - -import com.linecorp.kotlinjdsl.test.integration.querydsl.groupby.AbstractCriteriaQueryDslGroupByIntegrationTest - -internal class EclipselinkCriteriaQueryDslGroupByIntegrationTest : AbstractCriteriaQueryDslGroupByIntegrationTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/having/EclipselinkCriteriaQueryDslHavingIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/having/EclipselinkCriteriaQueryDslHavingIntegrationTest.kt deleted file mode 100644 index 368dafe4f..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/having/EclipselinkCriteriaQueryDslHavingIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.having - -import com.linecorp.kotlinjdsl.test.integration.querydsl.having.AbstractCriteriaQueryDslHavingIntegrationTest - -internal class EclipselinkCriteriaQueryDslHavingIntegrationTest : AbstractCriteriaQueryDslHavingIntegrationTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/hint/EclipselinkCriteriaQueryDslHintIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/hint/EclipselinkCriteriaQueryDslHintIntegrationTest.kt deleted file mode 100644 index 6e2edf837..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/hint/EclipselinkCriteriaQueryDslHintIntegrationTest.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.hint - -import com.linecorp.kotlinjdsl.listQuery -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.min -import com.linecorp.kotlinjdsl.test.entity.order.Order -import com.linecorp.kotlinjdsl.test.integration.AbstractCriteriaQueryDslIntegrationTest -import org.eclipse.persistence.config.PessimisticLock -import org.eclipse.persistence.config.QueryHints -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test - -internal class EclipselinkCriteriaQueryDslHintIntegrationTest : AbstractCriteriaQueryDslIntegrationTest() { - - private val order1 = order { purchaserId = 1000 } - private val order2 = order { purchaserId = 1000 } - private val order3 = order { purchaserId = 2000 } - - @BeforeEach - fun setUp() { - entityManager.persistAll(order1, order2, order3) - entityManager.flushAndClear() - } - - @Test - fun sqlHint() { - // when - val purchaserIds = queryFactory.listQuery { - select(min(Order::purchaserId)) - from(entity(Order::class)) - where(col(Order::id).`in`(order1.id, order2.id, order3.id)) - // Since eclipselink does not put /*+ */ comments automatically in SQL hints, users must put all comments in hints. - sqlHints("/*+ idx1 */") - } - - // then - assertThat(purchaserIds).containsOnly(1000) - } - - @Test - fun jpaHint() { - // when - val purchaserIds = queryFactory.listQuery { - select(col(Order::purchaserId)) - from(entity(Order::class)) - hints(QueryHints.PESSIMISTIC_LOCK to PessimisticLock.LockNoWait) - } - - // then - assertThat(purchaserIds).containsOnly(1000, 2000) - } -} diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/limit/EclipselinkCriteriaQueryDslLimitIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/limit/EclipselinkCriteriaQueryDslLimitIntegrationTest.kt deleted file mode 100644 index dc8bfa9d0..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/limit/EclipselinkCriteriaQueryDslLimitIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.limit - -import com.linecorp.kotlinjdsl.test.integration.querydsl.limit.AbstractCriteriaQueryDslLimitIntegrationTest - -internal class EclipselinkCriteriaQueryDslLimitIntegrationTest : AbstractCriteriaQueryDslLimitIntegrationTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/orderby/EclipselinkCriteriaQueryDslOrderByIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/orderby/EclipselinkCriteriaQueryDslOrderByIntegrationTest.kt deleted file mode 100644 index ec039a787..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/orderby/EclipselinkCriteriaQueryDslOrderByIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.orderby - -import com.linecorp.kotlinjdsl.test.integration.querydsl.orderby.AbstractCriteriaQueryDslOrderByIntegrationTest - -internal class EclipselinkCriteriaQueryDslOrderByIntegrationTest : AbstractCriteriaQueryDslOrderByIntegrationTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/predicate/EclipselinkCriteriaQueryDslPredicateIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/predicate/EclipselinkCriteriaQueryDslPredicateIntegrationTest.kt deleted file mode 100644 index 674306064..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/predicate/EclipselinkCriteriaQueryDslPredicateIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.predicate - -import com.linecorp.kotlinjdsl.test.integration.querydsl.predicate.AbstractCriteriaQueryDslPredicateIntegrationTest - -internal class EclipselinkCriteriaQueryDslPredicateIntegrationTest : AbstractCriteriaQueryDslPredicateIntegrationTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/select/EclipselinkCriteriaQueryDslSelectIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/select/EclipselinkCriteriaQueryDslSelectIntegrationTest.kt deleted file mode 100644 index e2ee9b532..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/select/EclipselinkCriteriaQueryDslSelectIntegrationTest.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.select - -import com.linecorp.kotlinjdsl.test.integration.querydsl.select.AbstractCriteriaQueryDslSelectIntegrationTest -import org.eclipse.persistence.internal.jpa.querydef.SelectionImpl -import org.eclipse.persistence.internal.jpa.querydef.SubQueryImpl -import org.junit.jupiter.api.Test - -class EclipselinkCriteriaQueryDslSelectIntegrationTest : AbstractCriteriaQueryDslSelectIntegrationTest() { - - /** - * https://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#Sub-selects_in_FROM_clause - * eclipselink does not support subquery in select and jpa criteria does not support from subquery - * so kotlin-jdsl's eclipselink does not support subquery in select - */ - @Test - override fun `listQuery - subquery in select, subquery in from`() { - // when - val exception = - catchThrowable(ClassCastException::class) { super.`listQuery - subquery in select, subquery in from`() } - - // then - assertThat(exception) - .isInstanceOf(ClassCastException::class.java) - .hasMessageContaining(SubQueryImpl::class.qualifiedName) - .hasMessageContaining("cannot be cast") - .hasMessageContaining(SelectionImpl::class.qualifiedName) - } -} diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/set/EclipselinkCriteriaQueryUpdateDslTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/set/EclipselinkCriteriaQueryUpdateDslTest.kt deleted file mode 100644 index bd680d9b2..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/set/EclipselinkCriteriaQueryUpdateDslTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.set - -import com.linecorp.kotlinjdsl.test.integration.querydsl.set.AbstractCriteriaQueryDslUpdateByIntegrationTest - -class EclipselinkCriteriaQueryUpdateDslTest : AbstractCriteriaQueryDslUpdateByIntegrationTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/where/EclipselinkCriteriaQueryDslWhereIntegrationTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/where/EclipselinkCriteriaQueryDslWhereIntegrationTest.kt deleted file mode 100644 index 94e5e9d44..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/where/EclipselinkCriteriaQueryDslWhereIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.where - -import com.linecorp.kotlinjdsl.test.integration.querydsl.where.AbstractCriteriaQueryDslWhereIntegrationTest - -internal class EclipselinkCriteriaQueryDslWhereIntegrationTest : AbstractCriteriaQueryDslWhereIntegrationTest() diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EclipselinkSqlQueryHintClauseTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EclipselinkSqlQueryHintClauseTest.kt deleted file mode 100644 index ac08c39ae..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EclipselinkSqlQueryHintClauseTest.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import org.eclipse.persistence.queries.DatabaseQuery -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertDoesNotThrow -import jakarta.persistence.Query - -internal class EclipselinkSqlQueryHintClauseTest { - private val sut = EclipselinkSqlQueryHintClause(listOf("hint")) - - @Test - fun applyNormally() { - val persistenceQuery = mockk() - val query = mockk(relaxed = true) - every { persistenceQuery.unwrap(DatabaseQuery::class.java) } returns query - - assertDoesNotThrow { sut.apply(persistenceQuery) } - - verify { - query.hintString = "hint" - persistenceQuery.unwrap(DatabaseQuery::class.java) - } - } - - @Test - fun `apply nothing if query is not DatabaseQuery`() { - val query = mockk() - - assertDoesNotThrow { sut.apply(query) } - - verify { - query.unwrap(DatabaseQuery::class.java) - } - } -} diff --git a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/eclipselink/EclipseSqlQueryHintClauseFactoryProviderTest.kt b/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/eclipselink/EclipseSqlQueryHintClauseFactoryProviderTest.kt deleted file mode 100644 index ca62196c5..000000000 --- a/eclipselink-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/eclipselink/EclipseSqlQueryHintClauseFactoryProviderTest.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint.eclipselink - -import com.linecorp.kotlinjdsl.query.clause.hint.EclipselinkSqlQueryHintClause -import com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test - -internal class EclipseSqlQueryHintClauseFactoryProviderTest : WithAssertions { - - @Test - fun test() { - assertThat(SqlQueryHintClauseFactoryProvider.loadedFactory?.invoke(listOf("test"))).isInstanceOf( - EclipselinkSqlQueryHintClause::class.java - ) - } -} diff --git a/eclipselink-jakarta/src/test/resources/META-INF/persistence.xml b/eclipselink-jakarta/src/test/resources/META-INF/persistence.xml deleted file mode 100644 index fdde61c64..000000000 --- a/eclipselink-jakarta/src/test/resources/META-INF/persistence.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - com.linecorp.kotlinjdsl.test.entity.employee.ContractEmployee - com.linecorp.kotlinjdsl.test.entity.employee.Employee - com.linecorp.kotlinjdsl.test.entity.employee.FullTimeEmployee - com.linecorp.kotlinjdsl.test.entity.employee.PartTimeEmployee - com.linecorp.kotlinjdsl.test.entity.employee.Project - - com.linecorp.kotlinjdsl.test.entity.Address - - com.linecorp.kotlinjdsl.test.entity.order.Order - com.linecorp.kotlinjdsl.test.entity.order.OrderGroup - com.linecorp.kotlinjdsl.test.entity.order.OrderItem - com.linecorp.kotlinjdsl.test.entity.order.OrderAddress - - com.linecorp.kotlinjdsl.test.entity.delivery.Delivery - com.linecorp.kotlinjdsl.test.entity.delivery.DeliveryItem - com.linecorp.kotlinjdsl.test.entity.delivery.DeliveryAddress - com.linecorp.kotlinjdsl.test.entity.test.TestTable - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/eclipselink/build.gradle.kts b/eclipselink/build.gradle.kts deleted file mode 100644 index 143c14742..000000000 --- a/eclipselink/build.gradle.kts +++ /dev/null @@ -1,15 +0,0 @@ -apply() - -dependencies { - api(Modules.core) - - compileOnly(libs.eclipselink) - compileOnly(libs.java.persistence.api) - compileOnly(libs.slf4j) - - testImplementation(Modules.core) - testImplementation(Modules.testFixtureIntegration) - testImplementation(libs.eclipselink) - testImplementation(libs.java.persistence.api) - testImplementation(libs.h2) -} diff --git a/eclipselink/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EclipselinkSqlQueryHintClause.kt b/eclipselink/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EclipselinkSqlQueryHintClause.kt deleted file mode 100644 index 1b46b72f4..000000000 --- a/eclipselink/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EclipselinkSqlQueryHintClause.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import org.eclipse.persistence.queries.DatabaseQuery -import org.slf4j.LoggerFactory -import javax.persistence.Query - -data class EclipselinkSqlQueryHintClause( - private val queryHints: List -) : SqlQueryHintClause { - companion object { - private val log = LoggerFactory.getLogger(EclipselinkSqlQueryHintClause::class.java) - } - - override fun apply(query: Query) { - if (queryHints.isEmpty()) return - - val unwrappedQuery = try { - query.unwrap(DatabaseQuery::class.java) - } catch (e: Exception) { - log.error("This query does not support eclipselink query hint", e) - null - } - - unwrappedQuery?.run { - queryHints.forEach { hintString = it } - } - } -} diff --git a/eclipselink/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/eclipselink/EclipselinkSqlQueryHintClauseFactoryProvider.kt b/eclipselink/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/eclipselink/EclipselinkSqlQueryHintClauseFactoryProvider.kt deleted file mode 100644 index cb61990da..000000000 --- a/eclipselink/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/eclipselink/EclipselinkSqlQueryHintClauseFactoryProvider.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint.eclipselink - -import com.linecorp.kotlinjdsl.query.clause.hint.EclipselinkSqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider -import javax.persistence.Query - -class EclipselinkSqlQueryHintClauseFactoryProvider : SqlQueryHintClauseFactoryProvider { - override fun factory(): (List) -> SqlQueryHintClause = { EclipselinkSqlQueryHintClause(it) } -} diff --git a/eclipselink/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider b/eclipselink/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider deleted file mode 100644 index b7858a19b..000000000 --- a/eclipselink/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider +++ /dev/null @@ -1 +0,0 @@ -com.linecorp.kotlinjdsl.querydsl.hint.eclipselink.EclipselinkSqlQueryHintClauseFactoryProvider \ No newline at end of file diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkCriteriaDeleteIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkCriteriaDeleteIntegrationTest.kt deleted file mode 100644 index 5da729bb5..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkCriteriaDeleteIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractCriteriaDeleteIntegrationTest - -class EclipselinkCriteriaDeleteIntegrationTest : AbstractCriteriaDeleteIntegrationTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkFetchDslIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkFetchDslIntegrationTest.kt deleted file mode 100644 index 4e1ba11a6..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkFetchDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractFetchDslTest - -class EclipselinkFetchDslIntegrationTest : AbstractFetchDslTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkGroupByDslIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkGroupByDslIntegrationTest.kt deleted file mode 100644 index 8c8dfc470..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkGroupByDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractGroupByDslTest - -class EclipselinkGroupByDslIntegrationTest : AbstractGroupByDslTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkJoinDslIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkJoinDslIntegrationTest.kt deleted file mode 100644 index d5626380d..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkJoinDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractJoinDslTest - -class EclipselinkJoinDslIntegrationTest : AbstractJoinDslTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkLimitDslIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkLimitDslIntegrationTest.kt deleted file mode 100644 index 75da748fd..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkLimitDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractLimitDslTest - -class EclipselinkLimitDslIntegrationTest : AbstractLimitDslTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkOrderByDslIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkOrderByDslIntegrationTest.kt deleted file mode 100644 index f4166b64a..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/criteriaquery/EclipselinkOrderByDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractOrderByDslTest - -class EclipselinkOrderByDslIntegrationTest : AbstractOrderByDslTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/expression/EclipselinkCriteriaQueryDslExpressionIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/expression/EclipselinkCriteriaQueryDslExpressionIntegrationTest.kt deleted file mode 100644 index 3a8654889..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/expression/EclipselinkCriteriaQueryDslExpressionIntegrationTest.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.expression - -import com.linecorp.kotlinjdsl.test.integration.querydsl.expression.AbstractCriteriaQueryDslExpressionIntegrationTest - -internal class EclipselinkCriteriaQueryDslExpressionIntegrationTest : - AbstractCriteriaQueryDslExpressionIntegrationTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/from/EclipselinkCriteriaQueryDslFromIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/from/EclipselinkCriteriaQueryDslFromIntegrationTest.kt deleted file mode 100644 index 4797b1b8a..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/from/EclipselinkCriteriaQueryDslFromIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.from - -import com.linecorp.kotlinjdsl.test.integration.querydsl.from.AbstractCriteriaQueryDslFromIntegrationTest - -internal class EclipselinkCriteriaQueryDslFromIntegrationTest : AbstractCriteriaQueryDslFromIntegrationTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/from/EclipselinkCriteriaQueryDslFromTreatIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/from/EclipselinkCriteriaQueryDslFromTreatIntegrationTest.kt deleted file mode 100644 index 7b260d465..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/from/EclipselinkCriteriaQueryDslFromTreatIntegrationTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.from - -import com.linecorp.kotlinjdsl.test.integration.querydsl.from.AbstractCriteriaQueryDslFromTreatIntegrationTest -import org.eclipse.persistence.exceptions.QueryException -import org.junit.jupiter.api.Test - -internal class EclipselinkCriteriaQueryDslFromTreatIntegrationTest : - AbstractCriteriaQueryDslFromTreatIntegrationTest() { - /** - * except Hibernate, select downcasting entity is prohibited - */ - @Test - override fun getProjectByFullTimeEmployeesSalarySelectFullTimeEmployee() { - assertThatThrownBy { super.getProjectByFullTimeEmployeesSalarySelectFullTimeEmployee() } - .hasRootCauseExactlyInstanceOf(QueryException::class.java) - } -} diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/groupby/EclipselinkCriteriaQueryDslGroupByIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/groupby/EclipselinkCriteriaQueryDslGroupByIntegrationTest.kt deleted file mode 100644 index 5a7067492..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/groupby/EclipselinkCriteriaQueryDslGroupByIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.groupby - -import com.linecorp.kotlinjdsl.test.integration.querydsl.groupby.AbstractCriteriaQueryDslGroupByIntegrationTest - -internal class EclipselinkCriteriaQueryDslGroupByIntegrationTest : AbstractCriteriaQueryDslGroupByIntegrationTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/having/EclipselinkCriteriaQueryDslHavingIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/having/EclipselinkCriteriaQueryDslHavingIntegrationTest.kt deleted file mode 100644 index 368dafe4f..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/having/EclipselinkCriteriaQueryDslHavingIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.having - -import com.linecorp.kotlinjdsl.test.integration.querydsl.having.AbstractCriteriaQueryDslHavingIntegrationTest - -internal class EclipselinkCriteriaQueryDslHavingIntegrationTest : AbstractCriteriaQueryDslHavingIntegrationTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/hint/EclipselinkCriteriaQueryDslHintIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/hint/EclipselinkCriteriaQueryDslHintIntegrationTest.kt deleted file mode 100644 index 6e2edf837..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/hint/EclipselinkCriteriaQueryDslHintIntegrationTest.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.hint - -import com.linecorp.kotlinjdsl.listQuery -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.min -import com.linecorp.kotlinjdsl.test.entity.order.Order -import com.linecorp.kotlinjdsl.test.integration.AbstractCriteriaQueryDslIntegrationTest -import org.eclipse.persistence.config.PessimisticLock -import org.eclipse.persistence.config.QueryHints -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test - -internal class EclipselinkCriteriaQueryDslHintIntegrationTest : AbstractCriteriaQueryDslIntegrationTest() { - - private val order1 = order { purchaserId = 1000 } - private val order2 = order { purchaserId = 1000 } - private val order3 = order { purchaserId = 2000 } - - @BeforeEach - fun setUp() { - entityManager.persistAll(order1, order2, order3) - entityManager.flushAndClear() - } - - @Test - fun sqlHint() { - // when - val purchaserIds = queryFactory.listQuery { - select(min(Order::purchaserId)) - from(entity(Order::class)) - where(col(Order::id).`in`(order1.id, order2.id, order3.id)) - // Since eclipselink does not put /*+ */ comments automatically in SQL hints, users must put all comments in hints. - sqlHints("/*+ idx1 */") - } - - // then - assertThat(purchaserIds).containsOnly(1000) - } - - @Test - fun jpaHint() { - // when - val purchaserIds = queryFactory.listQuery { - select(col(Order::purchaserId)) - from(entity(Order::class)) - hints(QueryHints.PESSIMISTIC_LOCK to PessimisticLock.LockNoWait) - } - - // then - assertThat(purchaserIds).containsOnly(1000, 2000) - } -} diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/limit/EclipselinkCriteriaQueryDslLimitIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/limit/EclipselinkCriteriaQueryDslLimitIntegrationTest.kt deleted file mode 100644 index dc8bfa9d0..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/limit/EclipselinkCriteriaQueryDslLimitIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.limit - -import com.linecorp.kotlinjdsl.test.integration.querydsl.limit.AbstractCriteriaQueryDslLimitIntegrationTest - -internal class EclipselinkCriteriaQueryDslLimitIntegrationTest : AbstractCriteriaQueryDslLimitIntegrationTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/orderby/EclipselinkCriteriaQueryDslOrderByIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/orderby/EclipselinkCriteriaQueryDslOrderByIntegrationTest.kt deleted file mode 100644 index ec039a787..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/orderby/EclipselinkCriteriaQueryDslOrderByIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.orderby - -import com.linecorp.kotlinjdsl.test.integration.querydsl.orderby.AbstractCriteriaQueryDslOrderByIntegrationTest - -internal class EclipselinkCriteriaQueryDslOrderByIntegrationTest : AbstractCriteriaQueryDslOrderByIntegrationTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/predicate/EclipselinkCriteriaQueryDslPredicateIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/predicate/EclipselinkCriteriaQueryDslPredicateIntegrationTest.kt deleted file mode 100644 index 674306064..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/predicate/EclipselinkCriteriaQueryDslPredicateIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.predicate - -import com.linecorp.kotlinjdsl.test.integration.querydsl.predicate.AbstractCriteriaQueryDslPredicateIntegrationTest - -internal class EclipselinkCriteriaQueryDslPredicateIntegrationTest : AbstractCriteriaQueryDslPredicateIntegrationTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/select/EclipselinkCriteriaQueryDslSelectIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/select/EclipselinkCriteriaQueryDslSelectIntegrationTest.kt deleted file mode 100644 index e2ee9b532..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/select/EclipselinkCriteriaQueryDslSelectIntegrationTest.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.select - -import com.linecorp.kotlinjdsl.test.integration.querydsl.select.AbstractCriteriaQueryDslSelectIntegrationTest -import org.eclipse.persistence.internal.jpa.querydef.SelectionImpl -import org.eclipse.persistence.internal.jpa.querydef.SubQueryImpl -import org.junit.jupiter.api.Test - -class EclipselinkCriteriaQueryDslSelectIntegrationTest : AbstractCriteriaQueryDslSelectIntegrationTest() { - - /** - * https://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#Sub-selects_in_FROM_clause - * eclipselink does not support subquery in select and jpa criteria does not support from subquery - * so kotlin-jdsl's eclipselink does not support subquery in select - */ - @Test - override fun `listQuery - subquery in select, subquery in from`() { - // when - val exception = - catchThrowable(ClassCastException::class) { super.`listQuery - subquery in select, subquery in from`() } - - // then - assertThat(exception) - .isInstanceOf(ClassCastException::class.java) - .hasMessageContaining(SubQueryImpl::class.qualifiedName) - .hasMessageContaining("cannot be cast") - .hasMessageContaining(SelectionImpl::class.qualifiedName) - } -} diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/set/EclipselinkCriteriaQueryUpdateDslTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/set/EclipselinkCriteriaQueryUpdateDslTest.kt deleted file mode 100644 index bd680d9b2..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/set/EclipselinkCriteriaQueryUpdateDslTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.set - -import com.linecorp.kotlinjdsl.test.integration.querydsl.set.AbstractCriteriaQueryDslUpdateByIntegrationTest - -class EclipselinkCriteriaQueryUpdateDslTest : AbstractCriteriaQueryDslUpdateByIntegrationTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/where/EclipselinkCriteriaQueryDslWhereIntegrationTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/where/EclipselinkCriteriaQueryDslWhereIntegrationTest.kt deleted file mode 100644 index 94e5e9d44..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/eclipselink/integration/querydsl/where/EclipselinkCriteriaQueryDslWhereIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.integration.querydsl.where - -import com.linecorp.kotlinjdsl.test.integration.querydsl.where.AbstractCriteriaQueryDslWhereIntegrationTest - -internal class EclipselinkCriteriaQueryDslWhereIntegrationTest : AbstractCriteriaQueryDslWhereIntegrationTest() diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EclipselinkSqlQueryHintClauseTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EclipselinkSqlQueryHintClauseTest.kt deleted file mode 100644 index 5f553fe7d..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EclipselinkSqlQueryHintClauseTest.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import org.eclipse.persistence.queries.DatabaseQuery -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertDoesNotThrow -import javax.persistence.Query - -internal class EclipselinkSqlQueryHintClauseTest { - private val sut = EclipselinkSqlQueryHintClause(listOf("hint")) - - @Test - fun applyNormally() { - val persistenceQuery = mockk() - val query = mockk(relaxed = true) - every { persistenceQuery.unwrap(DatabaseQuery::class.java) } returns query - - assertDoesNotThrow { sut.apply(persistenceQuery) } - - verify { - query.hintString = "hint" - persistenceQuery.unwrap(DatabaseQuery::class.java) - } - } - - @Test - fun `apply nothing if query is not DatabaseQuery`() { - val query = mockk() - - assertDoesNotThrow { sut.apply(query) } - - verify { - query.unwrap(DatabaseQuery::class.java) - } - } -} diff --git a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/eclipselink/EclipseSqlQueryHintClauseFactoryProviderTest.kt b/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/eclipselink/EclipseSqlQueryHintClauseFactoryProviderTest.kt deleted file mode 100644 index ca62196c5..000000000 --- a/eclipselink/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/eclipselink/EclipseSqlQueryHintClauseFactoryProviderTest.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint.eclipselink - -import com.linecorp.kotlinjdsl.query.clause.hint.EclipselinkSqlQueryHintClause -import com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test - -internal class EclipseSqlQueryHintClauseFactoryProviderTest : WithAssertions { - - @Test - fun test() { - assertThat(SqlQueryHintClauseFactoryProvider.loadedFactory?.invoke(listOf("test"))).isInstanceOf( - EclipselinkSqlQueryHintClause::class.java - ) - } -} diff --git a/eclipselink/src/test/resources/META-INF/persistence.xml b/eclipselink/src/test/resources/META-INF/persistence.xml deleted file mode 100644 index 11f627f0c..000000000 --- a/eclipselink/src/test/resources/META-INF/persistence.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - com.linecorp.kotlinjdsl.test.entity.employee.ContractEmployee - com.linecorp.kotlinjdsl.test.entity.employee.Employee - com.linecorp.kotlinjdsl.test.entity.employee.FullTimeEmployee - com.linecorp.kotlinjdsl.test.entity.employee.PartTimeEmployee - com.linecorp.kotlinjdsl.test.entity.employee.Project - - com.linecorp.kotlinjdsl.test.entity.Address - - com.linecorp.kotlinjdsl.test.entity.order.Order - com.linecorp.kotlinjdsl.test.entity.order.OrderGroup - com.linecorp.kotlinjdsl.test.entity.order.OrderItem - com.linecorp.kotlinjdsl.test.entity.order.OrderAddress - - com.linecorp.kotlinjdsl.test.entity.delivery.Delivery - com.linecorp.kotlinjdsl.test.entity.delivery.DeliveryItem - com.linecorp.kotlinjdsl.test.entity.delivery.DeliveryAddress - com.linecorp.kotlinjdsl.test.entity.test.TestTable - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/eclipselink/build.gradle.kts b/examples/eclipselink/build.gradle.kts deleted file mode 100644 index a519e5fe7..000000000 --- a/examples/eclipselink/build.gradle.kts +++ /dev/null @@ -1,13 +0,0 @@ -coverage { - exclude(project) -} - -dependencies { - implementation(Modules.eclipselink) - implementation(libs.eclipselink) - implementation(libs.java.persistence.api) - implementation(libs.logback) - implementation(libs.h2) - - testImplementation(Modules.testFixtureCore) -} diff --git a/examples/eclipselink/src/main/kotlin/com/linecorp/kotlinjdsl/eclipselink/example/Main.kt b/examples/eclipselink/src/main/kotlin/com/linecorp/kotlinjdsl/eclipselink/example/Main.kt deleted file mode 100644 index 80d23067d..000000000 --- a/examples/eclipselink/src/main/kotlin/com/linecorp/kotlinjdsl/eclipselink/example/Main.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.example - -import com.linecorp.kotlinjdsl.QueryFactory -import com.linecorp.kotlinjdsl.QueryFactoryImpl -import com.linecorp.kotlinjdsl.eclipselink.example.entity.Book -import com.linecorp.kotlinjdsl.listQuery -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreatorImpl -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import javax.persistence.EntityManager -import javax.persistence.Persistence - -private val entityManagerFactory = Persistence.createEntityManagerFactory("example") - -fun main(args: Array) { - val entityManager = entityManagerFactory.createEntityManager().also { - it.initializeData() - } - - val queryFactory: QueryFactory = QueryFactoryImpl( - criteriaQueryCreator = CriteriaQueryCreatorImpl(entityManager), - subqueryCreator = SubqueryCreatorImpl() - ) - - val books: List = queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(or(args.map { col(Book::name).like("%${it}%") })) - } - - println(books) -} - -private fun EntityManager.initializeData() { - transaction.run { - begin() - persist(Book(name = "Hamlet")) - persist(Book(name = "King Lear")) - persist(Book(name = "Romeo and Juliet")) - persist(Book(name = "Macbeth")) - commit() - } -} diff --git a/examples/eclipselink/src/main/kotlin/com/linecorp/kotlinjdsl/eclipselink/example/entity/Book.kt b/examples/eclipselink/src/main/kotlin/com/linecorp/kotlinjdsl/eclipselink/example/entity/Book.kt deleted file mode 100644 index f63fab880..000000000 --- a/examples/eclipselink/src/main/kotlin/com/linecorp/kotlinjdsl/eclipselink/example/entity/Book.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.linecorp.kotlinjdsl.eclipselink.example.entity - -import javax.persistence.* - -@Entity -@Table(name = "book") -data class Book( - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - val id: Long = 0, - - @Column - val name: String, -) diff --git a/examples/eclipselink/src/main/resources/META-INF/persistence.xml b/examples/eclipselink/src/main/resources/META-INF/persistence.xml deleted file mode 100644 index 441230ab5..000000000 --- a/examples/eclipselink/src/main/resources/META-INF/persistence.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - com.linecorp.kotlinjdsl.eclipselink.example.entity.Book - - - - - - - - - - - diff --git a/examples/hibernate/build.gradle.kts b/examples/hibernate/build.gradle.kts deleted file mode 100644 index 6e5bb66a9..000000000 --- a/examples/hibernate/build.gradle.kts +++ /dev/null @@ -1,12 +0,0 @@ -coverage { - exclude(project) -} - -dependencies { - implementation(Modules.hibernate) - implementation(libs.hibernate) - implementation(libs.logback) - implementation(libs.h2) - - testImplementation(Modules.testFixtureCore) -} diff --git a/examples/hibernate/src/main/kotlin/com/linecorp/kotlinjdsl/hibernate/example/Main.kt b/examples/hibernate/src/main/kotlin/com/linecorp/kotlinjdsl/hibernate/example/Main.kt deleted file mode 100644 index 412f13fc5..000000000 --- a/examples/hibernate/src/main/kotlin/com/linecorp/kotlinjdsl/hibernate/example/Main.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.example - -import com.linecorp.kotlinjdsl.QueryFactory -import com.linecorp.kotlinjdsl.QueryFactoryImpl -import com.linecorp.kotlinjdsl.hibernate.example.entity.Book -import com.linecorp.kotlinjdsl.listQuery -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreatorImpl -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import javax.persistence.EntityManager -import javax.persistence.Persistence - -private val entityManagerFactory = Persistence.createEntityManagerFactory("example") - -fun main(args: Array) { - val entityManager = entityManagerFactory.createEntityManager().also { - it.initializeData() - } - - val queryFactory: QueryFactory = QueryFactoryImpl( - criteriaQueryCreator = CriteriaQueryCreatorImpl(entityManager), - subqueryCreator = SubqueryCreatorImpl() - ) - - val books: List = queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(or(args.map { col(Book::name).like("%${it}%") })) - } - - println(books) -} - -private fun EntityManager.initializeData() { - transaction.run { - begin() - persist(Book(name = "Hamlet")) - persist(Book(name = "King Lear")) - persist(Book(name = "Romeo and Juliet")) - persist(Book(name = "Macbeth")) - commit() - } -} \ No newline at end of file diff --git a/examples/hibernate/src/main/kotlin/com/linecorp/kotlinjdsl/hibernate/example/entity/Book.kt b/examples/hibernate/src/main/kotlin/com/linecorp/kotlinjdsl/hibernate/example/entity/Book.kt deleted file mode 100644 index 343900d38..000000000 --- a/examples/hibernate/src/main/kotlin/com/linecorp/kotlinjdsl/hibernate/example/entity/Book.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.example.entity - -import javax.persistence.* - -@Entity -@Table(name = "book") -data class Book( - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - val id: Long = 0, - - @Column - val name: String, -) \ No newline at end of file diff --git a/examples/hibernate/src/main/resources/META-INF/persistence.xml b/examples/hibernate/src/main/resources/META-INF/persistence.xml deleted file mode 100644 index 143f1c329..000000000 --- a/examples/hibernate/src/main/resources/META-INF/persistence.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - com.linecorp.kotlinjdsl.hibernate.example.entity.Book - - - - - - - - - - - - - - diff --git a/examples/spring-boot-2.4/build.gradle.kts b/examples/spring-boot-2.4/build.gradle.kts deleted file mode 100644 index 5b9fd5cba..000000000 --- a/examples/spring-boot-2.4/build.gradle.kts +++ /dev/null @@ -1,30 +0,0 @@ -plugins { - id("org.springframework.boot") version "2.4.13" - kotlin("plugin.spring") - kotlin("plugin.jpa") -} - -apply(plugin = "org.springframework.boot") -apply(plugin = "kotlin-spring") -apply(plugin = "kotlin-jpa") - -coverage { - exclude(project) -} - -dependencies { - // implementation("com.linecorp.kotlin-jdsl:hibernate-kotlin-jdsl:x.y.z") - implementation(Modules.hibernate) - // implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-core:x.y.z") - implementation(Modules.springDataCore) - // implementation("spring-data-kotlin-jdsl-autoconfigure:x.y.z") - implementation(Modules.springDataAutoconfigure) - - implementation("org.springframework.boot:spring-boot-starter-web") - implementation("org.springframework.boot:spring-boot-starter-data-jpa") - implementation(libs.jackson.kotlin.module) - implementation(libs.h2) - implementation(platform("org.springframework.boot:spring-boot-dependencies:${"2.4.13"}")) - - testImplementation("org.springframework.boot:spring-boot-starter-test") -} diff --git a/examples/spring-boot-2.4/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt b/examples/spring-boot-2.4/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt deleted file mode 100644 index 848b7c815..000000000 --- a/examples/spring-boot-2.4/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt +++ /dev/null @@ -1,80 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactory -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import com.linecorp.kotlinjdsl.spring.data.listQuery -import com.linecorp.kotlinjdsl.spring.data.singleQuery -import org.springframework.http.ResponseEntity -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional -import org.springframework.web.bind.annotation.* -import javax.persistence.EntityManager - -@RestController -@RequestMapping("/api/v1/books") -class BookController( - private val bookService: BookService, -) { - @PostMapping - fun createBook(@RequestBody spec: BookService.CreateBookSpec): ResponseEntity { - val book = bookService.create(spec) - - return ResponseEntity.ok(book.id) - } - - @GetMapping("/{bookId}") - fun findById(@PathVariable bookId: Long): ResponseEntity { - val book = bookService.findById(bookId) - - return ResponseEntity.ok(book) - } - - @GetMapping - fun findAll(@RequestParam("name") name: String): ResponseEntity> { - val books = bookService.findAll(BookService.FindBookSpec(name = name)) - - return ResponseEntity.ok(books) - } -} - -@Service -@Transactional -class BookService( - private val entityManager: EntityManager, - private val queryFactory: SpringDataQueryFactory, -) { - fun create(spec: CreateBookSpec): Book { - return Book(name = spec.name).also { - entityManager.persist(it) - } - } - - fun findById(id: Long): Book { - return queryFactory.singleQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::id).equal(id)) - } - } - - fun findAll(spec: FindBookSpec): List { - return queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::name).like("%${spec.name}%")) - } - } - - data class CreateBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } - - data class FindBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } -} diff --git a/examples/spring-boot-2.4/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt b/examples/spring-boot-2.4/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt deleted file mode 100644 index 752348683..000000000 --- a/examples/spring-boot-2.4/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.runApplication - -@SpringBootApplication -class ExampleApplication - -fun main(args: Array) { - runApplication(*args) -} diff --git a/examples/spring-boot-2.4/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt b/examples/spring-boot-2.4/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt deleted file mode 100644 index e1137c86e..000000000 --- a/examples/spring-boot-2.4/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example.entity - -import javax.persistence.* - -@Entity -@Table(name = "book") -data class Book( - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - val id: Long = 0, - - @Column - val name: String, -) { - fun toJson() = """{"id":$id,"name":"$name"}""" -} diff --git a/examples/spring-boot-2.4/src/main/resources/application.yml b/examples/spring-boot-2.4/src/main/resources/application.yml deleted file mode 100644 index 68c2c56fc..000000000 --- a/examples/spring-boot-2.4/src/main/resources/application.yml +++ /dev/null @@ -1,20 +0,0 @@ -spring: - datasource: - driver-class-name: org.h2.Driver - url: jdbc:h2:mem:test;MODE=MYSQL;DATABASE_TO_LOWER=TRUE - username: sa - password: password - - jpa: - database-platform: org.hibernate.dialect.MySQL8Dialect - hibernate: - ddl-auto: update - use-new-id-generator-mappings: true - naming: - physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl - properties: - hibernate: - check_nullability: true - use_sql_comments: true - format_sql: true - show_sql: true \ No newline at end of file diff --git a/examples/spring-boot-2.4/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt b/examples/spring-boot-2.4/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt deleted file mode 100644 index ba3a0b35c..000000000 --- a/examples/spring-boot-2.4/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.http.MediaType -import org.springframework.test.web.servlet.MockMvc -import org.springframework.test.web.servlet.MockMvcResultMatchersDsl -import org.springframework.test.web.servlet.get -import org.springframework.test.web.servlet.post - -@SpringBootTest -@AutoConfigureMockMvc -internal class BookControllerIntegrationTest : WithAssertions { - @Autowired - private lateinit var mockMvc: MockMvc - - private val context = "/api/v1/books" - - @Test - fun createBook() { - createBook(BookService.CreateBookSpec("name")) { - status { isOk() } - } - } - - @Test - fun findById() { - val spec = BookService.CreateBookSpec("name1") - val id = createBook(spec) - mockMvc.get("$context/$id") - .andExpect { - status { isOk() } - content { - json(Book(id = id, name = spec.name).toJson()) - } - } - } - - @Test - fun findByName() { - val spec1 = BookService.CreateBookSpec("name2") - val spec2 = BookService.CreateBookSpec("name2") - val id1 = createBook(spec1) - val id2 = createBook(spec2) - mockMvc.get(context) { - param("name", spec1.name) - } - .andExpect { - status { isOk() } - content { - json( - buildString { - append("[") - append(Book(id = id1, name = spec1.name).toJson()) - append(",") - append(Book(id = id2, name = spec2.name).toJson()) - append("]") - } - ) - } - } - } - - private fun createBook(spec: BookService.CreateBookSpec, dsl: MockMvcResultMatchersDsl.() -> Unit = {}) = mockMvc.post(context) { - contentType = MediaType.APPLICATION_JSON - content = spec.toJson() - }.andExpect(dsl) - .andReturn() - .response - .contentAsString.toLong() -} diff --git a/examples/spring-boot-2.5/build.gradle.kts b/examples/spring-boot-2.5/build.gradle.kts deleted file mode 100644 index b74ad1c52..000000000 --- a/examples/spring-boot-2.5/build.gradle.kts +++ /dev/null @@ -1,30 +0,0 @@ -plugins { - id("org.springframework.boot") version "2.5.14" - kotlin("plugin.spring") - kotlin("plugin.jpa") -} - -apply(plugin = "org.springframework.boot") -apply(plugin = "kotlin-spring") -apply(plugin = "kotlin-jpa") - -coverage { - exclude(project) -} - -dependencies { - // implementation("com.linecorp.kotlin-jdsl:hibernate-kotlin-jdsl:x.y.z") - implementation(Modules.hibernate) - // implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-core:x.y.z") - implementation(Modules.springDataCore) - // implementation("spring-data-kotlin-jdsl-autoconfigure:x.y.z") - implementation(Modules.springDataAutoconfigure) - - implementation("org.springframework.boot:spring-boot-starter-web") - implementation("org.springframework.boot:spring-boot-starter-data-jpa") - implementation(libs.jackson.kotlin.module) - implementation(libs.h2) - implementation(platform("org.springframework.boot:spring-boot-dependencies:2.5.14")) - - testImplementation("org.springframework.boot:spring-boot-starter-test") -} diff --git a/examples/spring-boot-2.5/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt b/examples/spring-boot-2.5/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt deleted file mode 100644 index 848b7c815..000000000 --- a/examples/spring-boot-2.5/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt +++ /dev/null @@ -1,80 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactory -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import com.linecorp.kotlinjdsl.spring.data.listQuery -import com.linecorp.kotlinjdsl.spring.data.singleQuery -import org.springframework.http.ResponseEntity -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional -import org.springframework.web.bind.annotation.* -import javax.persistence.EntityManager - -@RestController -@RequestMapping("/api/v1/books") -class BookController( - private val bookService: BookService, -) { - @PostMapping - fun createBook(@RequestBody spec: BookService.CreateBookSpec): ResponseEntity { - val book = bookService.create(spec) - - return ResponseEntity.ok(book.id) - } - - @GetMapping("/{bookId}") - fun findById(@PathVariable bookId: Long): ResponseEntity { - val book = bookService.findById(bookId) - - return ResponseEntity.ok(book) - } - - @GetMapping - fun findAll(@RequestParam("name") name: String): ResponseEntity> { - val books = bookService.findAll(BookService.FindBookSpec(name = name)) - - return ResponseEntity.ok(books) - } -} - -@Service -@Transactional -class BookService( - private val entityManager: EntityManager, - private val queryFactory: SpringDataQueryFactory, -) { - fun create(spec: CreateBookSpec): Book { - return Book(name = spec.name).also { - entityManager.persist(it) - } - } - - fun findById(id: Long): Book { - return queryFactory.singleQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::id).equal(id)) - } - } - - fun findAll(spec: FindBookSpec): List { - return queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::name).like("%${spec.name}%")) - } - } - - data class CreateBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } - - data class FindBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } -} diff --git a/examples/spring-boot-2.5/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt b/examples/spring-boot-2.5/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt deleted file mode 100644 index 752348683..000000000 --- a/examples/spring-boot-2.5/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.runApplication - -@SpringBootApplication -class ExampleApplication - -fun main(args: Array) { - runApplication(*args) -} diff --git a/examples/spring-boot-2.5/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt b/examples/spring-boot-2.5/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt deleted file mode 100644 index e1137c86e..000000000 --- a/examples/spring-boot-2.5/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example.entity - -import javax.persistence.* - -@Entity -@Table(name = "book") -data class Book( - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - val id: Long = 0, - - @Column - val name: String, -) { - fun toJson() = """{"id":$id,"name":"$name"}""" -} diff --git a/examples/spring-boot-2.5/src/main/resources/application.yml b/examples/spring-boot-2.5/src/main/resources/application.yml deleted file mode 100644 index 68c2c56fc..000000000 --- a/examples/spring-boot-2.5/src/main/resources/application.yml +++ /dev/null @@ -1,20 +0,0 @@ -spring: - datasource: - driver-class-name: org.h2.Driver - url: jdbc:h2:mem:test;MODE=MYSQL;DATABASE_TO_LOWER=TRUE - username: sa - password: password - - jpa: - database-platform: org.hibernate.dialect.MySQL8Dialect - hibernate: - ddl-auto: update - use-new-id-generator-mappings: true - naming: - physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl - properties: - hibernate: - check_nullability: true - use_sql_comments: true - format_sql: true - show_sql: true \ No newline at end of file diff --git a/examples/spring-boot-2.5/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt b/examples/spring-boot-2.5/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt deleted file mode 100644 index ba3a0b35c..000000000 --- a/examples/spring-boot-2.5/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.http.MediaType -import org.springframework.test.web.servlet.MockMvc -import org.springframework.test.web.servlet.MockMvcResultMatchersDsl -import org.springframework.test.web.servlet.get -import org.springframework.test.web.servlet.post - -@SpringBootTest -@AutoConfigureMockMvc -internal class BookControllerIntegrationTest : WithAssertions { - @Autowired - private lateinit var mockMvc: MockMvc - - private val context = "/api/v1/books" - - @Test - fun createBook() { - createBook(BookService.CreateBookSpec("name")) { - status { isOk() } - } - } - - @Test - fun findById() { - val spec = BookService.CreateBookSpec("name1") - val id = createBook(spec) - mockMvc.get("$context/$id") - .andExpect { - status { isOk() } - content { - json(Book(id = id, name = spec.name).toJson()) - } - } - } - - @Test - fun findByName() { - val spec1 = BookService.CreateBookSpec("name2") - val spec2 = BookService.CreateBookSpec("name2") - val id1 = createBook(spec1) - val id2 = createBook(spec2) - mockMvc.get(context) { - param("name", spec1.name) - } - .andExpect { - status { isOk() } - content { - json( - buildString { - append("[") - append(Book(id = id1, name = spec1.name).toJson()) - append(",") - append(Book(id = id2, name = spec2.name).toJson()) - append("]") - } - ) - } - } - } - - private fun createBook(spec: BookService.CreateBookSpec, dsl: MockMvcResultMatchersDsl.() -> Unit = {}) = mockMvc.post(context) { - contentType = MediaType.APPLICATION_JSON - content = spec.toJson() - }.andExpect(dsl) - .andReturn() - .response - .contentAsString.toLong() -} diff --git a/examples/spring-boot-2.6/build.gradle.kts b/examples/spring-boot-2.6/build.gradle.kts deleted file mode 100644 index 26e490671..000000000 --- a/examples/spring-boot-2.6/build.gradle.kts +++ /dev/null @@ -1,27 +0,0 @@ -plugins { - id("org.springframework.boot") version "2.6.9" - kotlin("plugin.spring") - kotlin("plugin.jpa") -} - -apply(plugin = "org.springframework.boot") -apply(plugin = "kotlin-spring") -apply(plugin = "kotlin-jpa") - -coverage { - exclude(project) -} - -dependencies { - // implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-starter:x.y.z") - implementation(Modules.springDataStarter) - - implementation("org.springframework.boot:spring-boot-starter-web") - implementation("org.springframework.boot:spring-boot-starter-data-jpa") - implementation(libs.jackson.kotlin.module) - implementation(libs.h2) - implementation(platform("org.springframework.boot:spring-boot-dependencies:2.6.9")) - - testImplementation("org.springframework.boot:spring-boot-starter-test") -} - diff --git a/examples/spring-boot-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt b/examples/spring-boot-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt deleted file mode 100644 index 848b7c815..000000000 --- a/examples/spring-boot-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt +++ /dev/null @@ -1,80 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactory -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import com.linecorp.kotlinjdsl.spring.data.listQuery -import com.linecorp.kotlinjdsl.spring.data.singleQuery -import org.springframework.http.ResponseEntity -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional -import org.springframework.web.bind.annotation.* -import javax.persistence.EntityManager - -@RestController -@RequestMapping("/api/v1/books") -class BookController( - private val bookService: BookService, -) { - @PostMapping - fun createBook(@RequestBody spec: BookService.CreateBookSpec): ResponseEntity { - val book = bookService.create(spec) - - return ResponseEntity.ok(book.id) - } - - @GetMapping("/{bookId}") - fun findById(@PathVariable bookId: Long): ResponseEntity { - val book = bookService.findById(bookId) - - return ResponseEntity.ok(book) - } - - @GetMapping - fun findAll(@RequestParam("name") name: String): ResponseEntity> { - val books = bookService.findAll(BookService.FindBookSpec(name = name)) - - return ResponseEntity.ok(books) - } -} - -@Service -@Transactional -class BookService( - private val entityManager: EntityManager, - private val queryFactory: SpringDataQueryFactory, -) { - fun create(spec: CreateBookSpec): Book { - return Book(name = spec.name).also { - entityManager.persist(it) - } - } - - fun findById(id: Long): Book { - return queryFactory.singleQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::id).equal(id)) - } - } - - fun findAll(spec: FindBookSpec): List { - return queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::name).like("%${spec.name}%")) - } - } - - data class CreateBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } - - data class FindBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } -} diff --git a/examples/spring-boot-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt b/examples/spring-boot-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt deleted file mode 100644 index 752348683..000000000 --- a/examples/spring-boot-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.runApplication - -@SpringBootApplication -class ExampleApplication - -fun main(args: Array) { - runApplication(*args) -} diff --git a/examples/spring-boot-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt b/examples/spring-boot-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt deleted file mode 100644 index e1137c86e..000000000 --- a/examples/spring-boot-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example.entity - -import javax.persistence.* - -@Entity -@Table(name = "book") -data class Book( - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - val id: Long = 0, - - @Column - val name: String, -) { - fun toJson() = """{"id":$id,"name":"$name"}""" -} diff --git a/examples/spring-boot-2.6/src/main/resources/application.yml b/examples/spring-boot-2.6/src/main/resources/application.yml deleted file mode 100644 index 68c2c56fc..000000000 --- a/examples/spring-boot-2.6/src/main/resources/application.yml +++ /dev/null @@ -1,20 +0,0 @@ -spring: - datasource: - driver-class-name: org.h2.Driver - url: jdbc:h2:mem:test;MODE=MYSQL;DATABASE_TO_LOWER=TRUE - username: sa - password: password - - jpa: - database-platform: org.hibernate.dialect.MySQL8Dialect - hibernate: - ddl-auto: update - use-new-id-generator-mappings: true - naming: - physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl - properties: - hibernate: - check_nullability: true - use_sql_comments: true - format_sql: true - show_sql: true \ No newline at end of file diff --git a/examples/spring-boot-2.6/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt b/examples/spring-boot-2.6/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt deleted file mode 100644 index ba3a0b35c..000000000 --- a/examples/spring-boot-2.6/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.http.MediaType -import org.springframework.test.web.servlet.MockMvc -import org.springframework.test.web.servlet.MockMvcResultMatchersDsl -import org.springframework.test.web.servlet.get -import org.springframework.test.web.servlet.post - -@SpringBootTest -@AutoConfigureMockMvc -internal class BookControllerIntegrationTest : WithAssertions { - @Autowired - private lateinit var mockMvc: MockMvc - - private val context = "/api/v1/books" - - @Test - fun createBook() { - createBook(BookService.CreateBookSpec("name")) { - status { isOk() } - } - } - - @Test - fun findById() { - val spec = BookService.CreateBookSpec("name1") - val id = createBook(spec) - mockMvc.get("$context/$id") - .andExpect { - status { isOk() } - content { - json(Book(id = id, name = spec.name).toJson()) - } - } - } - - @Test - fun findByName() { - val spec1 = BookService.CreateBookSpec("name2") - val spec2 = BookService.CreateBookSpec("name2") - val id1 = createBook(spec1) - val id2 = createBook(spec2) - mockMvc.get(context) { - param("name", spec1.name) - } - .andExpect { - status { isOk() } - content { - json( - buildString { - append("[") - append(Book(id = id1, name = spec1.name).toJson()) - append(",") - append(Book(id = id2, name = spec2.name).toJson()) - append("]") - } - ) - } - } - } - - private fun createBook(spec: BookService.CreateBookSpec, dsl: MockMvcResultMatchersDsl.() -> Unit = {}) = mockMvc.post(context) { - contentType = MediaType.APPLICATION_JSON - content = spec.toJson() - }.andExpect(dsl) - .andReturn() - .response - .contentAsString.toLong() -} diff --git a/examples/spring-boot-2.7/build.gradle.kts b/examples/spring-boot-2.7/build.gradle.kts deleted file mode 100644 index e1e4b2101..000000000 --- a/examples/spring-boot-2.7/build.gradle.kts +++ /dev/null @@ -1,27 +0,0 @@ -@Suppress("DSL_SCOPE_VIOLATION") -plugins { - alias(libs.plugins.spring.boot) - kotlin("plugin.spring") - kotlin("plugin.jpa") -} - -apply(plugin = "org.springframework.boot") -apply(plugin = "kotlin-spring") -apply(plugin = "kotlin-jpa") - -coverage { - exclude(project) -} - -dependencies { - // implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-starter:x.y.z") - implementation(Modules.springDataStarter) - - implementation(libs.spring.boot.web) - implementation(libs.spring.boot.jpa) - implementation(libs.jackson.kotlin.module) - implementation(libs.h2) - implementation(platform(libs.spring.boot.bom)) - - testImplementation(libs.spring.boot.test) -} diff --git a/examples/spring-boot-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt b/examples/spring-boot-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt deleted file mode 100644 index 848b7c815..000000000 --- a/examples/spring-boot-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt +++ /dev/null @@ -1,80 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactory -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import com.linecorp.kotlinjdsl.spring.data.listQuery -import com.linecorp.kotlinjdsl.spring.data.singleQuery -import org.springframework.http.ResponseEntity -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional -import org.springframework.web.bind.annotation.* -import javax.persistence.EntityManager - -@RestController -@RequestMapping("/api/v1/books") -class BookController( - private val bookService: BookService, -) { - @PostMapping - fun createBook(@RequestBody spec: BookService.CreateBookSpec): ResponseEntity { - val book = bookService.create(spec) - - return ResponseEntity.ok(book.id) - } - - @GetMapping("/{bookId}") - fun findById(@PathVariable bookId: Long): ResponseEntity { - val book = bookService.findById(bookId) - - return ResponseEntity.ok(book) - } - - @GetMapping - fun findAll(@RequestParam("name") name: String): ResponseEntity> { - val books = bookService.findAll(BookService.FindBookSpec(name = name)) - - return ResponseEntity.ok(books) - } -} - -@Service -@Transactional -class BookService( - private val entityManager: EntityManager, - private val queryFactory: SpringDataQueryFactory, -) { - fun create(spec: CreateBookSpec): Book { - return Book(name = spec.name).also { - entityManager.persist(it) - } - } - - fun findById(id: Long): Book { - return queryFactory.singleQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::id).equal(id)) - } - } - - fun findAll(spec: FindBookSpec): List { - return queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::name).like("%${spec.name}%")) - } - } - - data class CreateBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } - - data class FindBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } -} diff --git a/examples/spring-boot-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt b/examples/spring-boot-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt deleted file mode 100644 index 752348683..000000000 --- a/examples/spring-boot-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.runApplication - -@SpringBootApplication -class ExampleApplication - -fun main(args: Array) { - runApplication(*args) -} diff --git a/examples/spring-boot-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt b/examples/spring-boot-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt deleted file mode 100644 index e1137c86e..000000000 --- a/examples/spring-boot-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example.entity - -import javax.persistence.* - -@Entity -@Table(name = "book") -data class Book( - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - val id: Long = 0, - - @Column - val name: String, -) { - fun toJson() = """{"id":$id,"name":"$name"}""" -} diff --git a/examples/spring-boot-2.7/src/main/resources/application.yml b/examples/spring-boot-2.7/src/main/resources/application.yml deleted file mode 100644 index 68c2c56fc..000000000 --- a/examples/spring-boot-2.7/src/main/resources/application.yml +++ /dev/null @@ -1,20 +0,0 @@ -spring: - datasource: - driver-class-name: org.h2.Driver - url: jdbc:h2:mem:test;MODE=MYSQL;DATABASE_TO_LOWER=TRUE - username: sa - password: password - - jpa: - database-platform: org.hibernate.dialect.MySQL8Dialect - hibernate: - ddl-auto: update - use-new-id-generator-mappings: true - naming: - physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl - properties: - hibernate: - check_nullability: true - use_sql_comments: true - format_sql: true - show_sql: true \ No newline at end of file diff --git a/examples/spring-boot-2.7/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt b/examples/spring-boot-2.7/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt deleted file mode 100644 index ba3a0b35c..000000000 --- a/examples/spring-boot-2.7/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.http.MediaType -import org.springframework.test.web.servlet.MockMvc -import org.springframework.test.web.servlet.MockMvcResultMatchersDsl -import org.springframework.test.web.servlet.get -import org.springframework.test.web.servlet.post - -@SpringBootTest -@AutoConfigureMockMvc -internal class BookControllerIntegrationTest : WithAssertions { - @Autowired - private lateinit var mockMvc: MockMvc - - private val context = "/api/v1/books" - - @Test - fun createBook() { - createBook(BookService.CreateBookSpec("name")) { - status { isOk() } - } - } - - @Test - fun findById() { - val spec = BookService.CreateBookSpec("name1") - val id = createBook(spec) - mockMvc.get("$context/$id") - .andExpect { - status { isOk() } - content { - json(Book(id = id, name = spec.name).toJson()) - } - } - } - - @Test - fun findByName() { - val spec1 = BookService.CreateBookSpec("name2") - val spec2 = BookService.CreateBookSpec("name2") - val id1 = createBook(spec1) - val id2 = createBook(spec2) - mockMvc.get(context) { - param("name", spec1.name) - } - .andExpect { - status { isOk() } - content { - json( - buildString { - append("[") - append(Book(id = id1, name = spec1.name).toJson()) - append(",") - append(Book(id = id2, name = spec2.name).toJson()) - append("]") - } - ) - } - } - } - - private fun createBook(spec: BookService.CreateBookSpec, dsl: MockMvcResultMatchersDsl.() -> Unit = {}) = mockMvc.post(context) { - contentType = MediaType.APPLICATION_JSON - content = spec.toJson() - }.andExpect(dsl) - .andReturn() - .response - .contentAsString.toLong() -} diff --git a/examples/spring-boot-3/build.gradle.kts b/examples/spring-boot-3/build.gradle.kts deleted file mode 100644 index d32775cba..000000000 --- a/examples/spring-boot-3/build.gradle.kts +++ /dev/null @@ -1,27 +0,0 @@ -@Suppress("DSL_SCOPE_VIOLATION") -plugins { - alias(libs.plugins.spring.boot3) - kotlin("plugin.spring") - kotlin("plugin.jpa") -} - -apply(plugin = "org.springframework.boot") -apply(plugin = "kotlin-spring") -apply(plugin = "kotlin-jpa") - -coverage { - exclude(project) -} - -dependencies { - // implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-starter:x.y.z") - implementation(Modules.springDataStarterJakarta) - - implementation(libs.spring.boot3.web) - implementation(libs.spring.boot3.jpa) - implementation(libs.jackson.kotlin.module) - implementation(libs.h2) - implementation(platform(libs.spring.boot3.bom)) - - testImplementation(libs.spring.boot3.test) -} diff --git a/examples/spring-boot-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt b/examples/spring-boot-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt deleted file mode 100644 index d5a356d7f..000000000 --- a/examples/spring-boot-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt +++ /dev/null @@ -1,82 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactory -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import com.linecorp.kotlinjdsl.spring.data.listQuery -import com.linecorp.kotlinjdsl.spring.data.singleQuery -import org.springframework.http.ResponseEntity -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional -import org.springframework.web.bind.annotation.* -import org.springframework.data.jpa.repository.JpaRepository - -@RestController -@RequestMapping("/api/v1/books") -class BookController( - private val bookService: BookService, -) { - @PostMapping - fun createBook(@RequestBody spec: BookService.CreateBookSpec): ResponseEntity { - val book = bookService.create(spec) - - return ResponseEntity.ok(book.id) - } - - @GetMapping("/{bookId}") - fun findById(@PathVariable bookId: Long): ResponseEntity { - val book = bookService.findById(bookId) - - return ResponseEntity.ok(book) - } - - @GetMapping - fun findAll(@RequestParam("name") name: String): ResponseEntity> { - val books = bookService.findAll(BookService.FindBookSpec(name = name)) - - return ResponseEntity.ok(books) - } -} - -interface BookRepository : JpaRepository - -@Service -@Transactional -class BookService( - private val repository: BookRepository, - private val queryFactory: SpringDataQueryFactory, -) { - fun create(spec: CreateBookSpec): Book { - return Book(name = spec.name).also { - repository.save(it) - } - } - - fun findById(id: Long): Book { - return queryFactory.singleQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::id).equal(id)) - } - } - - fun findAll(spec: FindBookSpec): List { - return queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::name).like("%${spec.name}%")) - } - } - - data class CreateBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } - - data class FindBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } -} diff --git a/examples/spring-boot-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt b/examples/spring-boot-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt deleted file mode 100644 index 752348683..000000000 --- a/examples/spring-boot-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.runApplication - -@SpringBootApplication -class ExampleApplication - -fun main(args: Array) { - runApplication(*args) -} diff --git a/examples/spring-boot-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt b/examples/spring-boot-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt deleted file mode 100644 index b4982284a..000000000 --- a/examples/spring-boot-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example.entity - -import jakarta.persistence.* - -@Entity -@Table(name = "book") -data class Book( - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - val id: Long = 0, - - @Column - val name: String, -) { - fun toJson() = """{"id":$id,"name":"$name"}""" -} diff --git a/examples/spring-boot-3/src/main/resources/application.yml b/examples/spring-boot-3/src/main/resources/application.yml deleted file mode 100644 index 08c0794ee..000000000 --- a/examples/spring-boot-3/src/main/resources/application.yml +++ /dev/null @@ -1,19 +0,0 @@ -spring: - datasource: - driver-class-name: org.h2.Driver - url: jdbc:h2:mem:test;MODE=MYSQL;DATABASE_TO_LOWER=TRUE - username: sa - password: password - - jpa: - database-platform: org.hibernate.dialect.MySQL8Dialect - hibernate: - ddl-auto: update - naming: - physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl - properties: - hibernate: - check_nullability: true - use_sql_comments: true - format_sql: true - show_sql: true \ No newline at end of file diff --git a/examples/spring-boot-3/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt b/examples/spring-boot-3/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt deleted file mode 100644 index ba3a0b35c..000000000 --- a/examples/spring-boot-3/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.http.MediaType -import org.springframework.test.web.servlet.MockMvc -import org.springframework.test.web.servlet.MockMvcResultMatchersDsl -import org.springframework.test.web.servlet.get -import org.springframework.test.web.servlet.post - -@SpringBootTest -@AutoConfigureMockMvc -internal class BookControllerIntegrationTest : WithAssertions { - @Autowired - private lateinit var mockMvc: MockMvc - - private val context = "/api/v1/books" - - @Test - fun createBook() { - createBook(BookService.CreateBookSpec("name")) { - status { isOk() } - } - } - - @Test - fun findById() { - val spec = BookService.CreateBookSpec("name1") - val id = createBook(spec) - mockMvc.get("$context/$id") - .andExpect { - status { isOk() } - content { - json(Book(id = id, name = spec.name).toJson()) - } - } - } - - @Test - fun findByName() { - val spec1 = BookService.CreateBookSpec("name2") - val spec2 = BookService.CreateBookSpec("name2") - val id1 = createBook(spec1) - val id2 = createBook(spec2) - mockMvc.get(context) { - param("name", spec1.name) - } - .andExpect { - status { isOk() } - content { - json( - buildString { - append("[") - append(Book(id = id1, name = spec1.name).toJson()) - append(",") - append(Book(id = id2, name = spec2.name).toJson()) - append("]") - } - ) - } - } - } - - private fun createBook(spec: BookService.CreateBookSpec, dsl: MockMvcResultMatchersDsl.() -> Unit = {}) = mockMvc.post(context) { - contentType = MediaType.APPLICATION_JSON - content = spec.toJson() - }.andExpect(dsl) - .andReturn() - .response - .contentAsString.toLong() -} diff --git a/examples/spring-boot-hibernate-reactive-2.6/build.gradle.kts b/examples/spring-boot-hibernate-reactive-2.6/build.gradle.kts deleted file mode 100644 index cb1535efb..000000000 --- a/examples/spring-boot-hibernate-reactive-2.6/build.gradle.kts +++ /dev/null @@ -1,33 +0,0 @@ -plugins { - id("org.springframework.boot") version "2.6.8" - kotlin("plugin.spring") - kotlin("plugin.jpa") -} - -apply(plugin = "org.springframework.boot") -apply(plugin = "kotlin-spring") -apply(plugin = "kotlin-jpa") - -coverage { - exclude(project) -} - -dependencies { - implementation(Modules.query) - // implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-hibernate-reactive:x.y.z") - implementation(Modules.springDataHibernateReactive) - implementation(libs.hibernate.reactive) - implementation(libs.coroutine.jdk8) - implementation(libs.coroutine.reactor) - implementation(libs.bundles.mutiny) - - implementation(Modules.testFixtureHibernateReactive) - - implementation("org.springframework.boot:spring-boot-starter-webflux") - implementation("org.springframework.boot:spring-boot-starter-data-jpa") - implementation(libs.jackson.kotlin.module) - implementation(libs.h2) - implementation(platform("org.springframework.boot:spring-boot-dependencies:2.6.8")) - - testImplementation("org.springframework.boot:spring-boot-starter-test") -} diff --git a/examples/spring-boot-hibernate-reactive-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt b/examples/spring-boot-hibernate-reactive-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt deleted file mode 100644 index 5f7eaa70f..000000000 --- a/examples/spring-boot-hibernate-reactive-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt +++ /dev/null @@ -1,78 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import com.linecorp.kotlinjdsl.spring.data.reactive.query.SpringDataHibernateMutinyReactiveQueryFactory -import com.linecorp.kotlinjdsl.spring.data.reactive.query.listQuery -import com.linecorp.kotlinjdsl.spring.data.reactive.query.singleQuery -import org.hibernate.reactive.mutiny.Mutiny -import org.springframework.http.ResponseEntity -import org.springframework.stereotype.Service -import org.springframework.web.bind.annotation.* -import reactor.core.publisher.Mono -import java.util.concurrent.CompletionStage - -@RestController -@RequestMapping("/api/v1/books") -class BookController( - private val bookService: BookService, -) { - @PostMapping - fun createBook(@RequestBody spec: BookService.CreateBookSpec): Mono> = - Mono.fromCompletionStage { bookService.create(spec) }.map { ResponseEntity.ok().body(it.id) } - - @GetMapping("/{bookId}") - suspend fun findById(@PathVariable bookId: Long): ResponseEntity { - val book = bookService.findById(bookId) - - return ResponseEntity.ok(book) - } - - @GetMapping - suspend fun findAll(@RequestParam("name") name: String): ResponseEntity> { - val books = bookService.findAll(BookService.FindBookSpec(name = name)) - - return ResponseEntity.ok(books) - } -} - -@Service -class BookService( - private val mutinySessionFactory: Mutiny.SessionFactory, - private val queryFactory: SpringDataHibernateMutinyReactiveQueryFactory, -) { - fun create(spec: CreateBookSpec): CompletionStage { - val book = Book(name = spec.name) - return mutinySessionFactory.withSession { session -> session.persist(book).flatMap { session.flush() } } - .map { book } - .subscribeAsCompletionStage() - } - - suspend fun findById(id: Long): Book { - return queryFactory.singleQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::id).equal(id)) - } - } - - suspend fun findAll(spec: FindBookSpec): List { - return queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::name).like("%${spec.name}%")) - } - } - - data class CreateBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } - - data class FindBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } -} diff --git a/examples/spring-boot-hibernate-reactive-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt b/examples/spring-boot-hibernate-reactive-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt deleted file mode 100644 index 752348683..000000000 --- a/examples/spring-boot-hibernate-reactive-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.runApplication - -@SpringBootApplication -class ExampleApplication - -fun main(args: Array) { - runApplication(*args) -} diff --git a/examples/spring-boot-hibernate-reactive-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/QueryFactoryConfiguration.kt b/examples/spring-boot-hibernate-reactive-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/QueryFactoryConfiguration.kt deleted file mode 100644 index d43344edf..000000000 --- a/examples/spring-boot-hibernate-reactive-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/QueryFactoryConfiguration.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.spring.data.reactive.query.SpringDataHibernateMutinyReactiveQueryFactory -import org.hibernate.reactive.mutiny.Mutiny.SessionFactory -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import javax.persistence.EntityManagerFactory -import javax.persistence.Persistence - -@Configuration -class QueryFactoryConfiguration { - @Bean - fun entityManagerFactory(): EntityManagerFactory = Persistence.createEntityManagerFactory("book") - - @Bean - fun mutinySessionFactory(entityManagerFactory: EntityManagerFactory): SessionFactory = - entityManagerFactory.unwrap(SessionFactory::class.java) - .apply { - withSession { - // currently H2 db does not support officially - // and does not allow extract & create schema with h2 db in hibernate-reactive - // so DDL query execute directly - it.createNativeQuery( - """ - create table book ( - id bigint not null auto_increment, - name varchar(255), - primary key (id) - ) - """.trimIndent() - ).executeUpdate() - }.subscribeAsCompletionStage().get() - } - - @Bean - fun queryFactory(sessionFactory: SessionFactory): SpringDataHibernateMutinyReactiveQueryFactory { - return SpringDataHibernateMutinyReactiveQueryFactory( - sessionFactory = sessionFactory, - subqueryCreator = SubqueryCreatorImpl() - ) - } -} diff --git a/examples/spring-boot-hibernate-reactive-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt b/examples/spring-boot-hibernate-reactive-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt deleted file mode 100644 index e1137c86e..000000000 --- a/examples/spring-boot-hibernate-reactive-2.6/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example.entity - -import javax.persistence.* - -@Entity -@Table(name = "book") -data class Book( - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - val id: Long = 0, - - @Column - val name: String, -) { - fun toJson() = """{"id":$id,"name":"$name"}""" -} diff --git a/examples/spring-boot-hibernate-reactive-2.6/src/main/resources/META-INF/persistence.xml b/examples/spring-boot-hibernate-reactive-2.6/src/main/resources/META-INF/persistence.xml deleted file mode 100644 index 9c618fe8c..000000000 --- a/examples/spring-boot-hibernate-reactive-2.6/src/main/resources/META-INF/persistence.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - org.hibernate.reactive.provider.ReactivePersistenceProvider - com.linecorp.kotlinjdsl.spring.data.example.entity.Book - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/spring-boot-hibernate-reactive-2.6/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt b/examples/spring-boot-hibernate-reactive-2.6/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt deleted file mode 100644 index ce12c959b..000000000 --- a/examples/spring-boot-hibernate-reactive-2.6/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.test.web.reactive.server.WebTestClient - -@SpringBootTest -@AutoConfigureWebTestClient(timeout = "100000") -internal class BookControllerIntegrationTest : WithAssertions { - @Autowired - private lateinit var client: WebTestClient - - private val context = "/api/v1/books" - - @Test - fun createBook() { - createBook(BookService.CreateBookSpec("name")) - } - - @Test - fun findById() { - val spec = BookService.CreateBookSpec("name1") - val id = createBook(spec) - client.get().uri("$context/$id") - .exchange() - .expectStatus().isOk - .expectBody(Book::class.java) - .value { - assertThat(Book(id = id, name = spec.name)).isEqualTo(it) - } - - } - - @Test - fun findByName() { - val spec1 = BookService.CreateBookSpec("name2") - val spec2 = BookService.CreateBookSpec("name2") - val id1 = createBook(spec1) - val id2 = createBook(spec2) - client.get().uri(context + "?name=${spec1.name}") - .exchange() - .expectStatus().isOk - .expectBodyList(Book::class.java) - .contains(Book(id = id1, name = spec1.name), Book(id = id2, name = spec2.name)) - } - - private fun createBook(spec: BookService.CreateBookSpec) = client.post().uri(context) - .bodyValue(spec) - .exchange() - .expectStatus().isOk - .returnResult(Long::class.java) - .responseBody - .blockFirst()!! -} diff --git a/examples/spring-boot-hibernate-reactive-2.7/build.gradle.kts b/examples/spring-boot-hibernate-reactive-2.7/build.gradle.kts deleted file mode 100644 index a35bad797..000000000 --- a/examples/spring-boot-hibernate-reactive-2.7/build.gradle.kts +++ /dev/null @@ -1,34 +0,0 @@ -@Suppress("DSL_SCOPE_VIOLATION") -plugins { - alias(libs.plugins.spring.boot) - kotlin("plugin.spring") - kotlin("plugin.jpa") -} - -apply(plugin = "org.springframework.boot") -apply(plugin = "kotlin-spring") -apply(plugin = "kotlin-jpa") - -coverage { - exclude(project) -} - -dependencies { - implementation(Modules.query) - // implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-hibernate-reactive:x.y.z") - implementation(Modules.springDataHibernateReactive) - implementation(libs.hibernate.reactive) - implementation(libs.coroutine.jdk8) - implementation(libs.coroutine.reactor) - implementation(libs.bundles.mutiny) - - implementation(Modules.testFixtureHibernateReactive) - - implementation(libs.spring.boot.webflux) - implementation(libs.spring.boot.jpa) - implementation(libs.jackson.kotlin.module) - implementation(libs.h2) - implementation(platform(libs.spring.boot.bom)) - - testImplementation(libs.spring.boot.test) -} diff --git a/examples/spring-boot-hibernate-reactive-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt b/examples/spring-boot-hibernate-reactive-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt deleted file mode 100644 index 5f7eaa70f..000000000 --- a/examples/spring-boot-hibernate-reactive-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt +++ /dev/null @@ -1,78 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import com.linecorp.kotlinjdsl.spring.data.reactive.query.SpringDataHibernateMutinyReactiveQueryFactory -import com.linecorp.kotlinjdsl.spring.data.reactive.query.listQuery -import com.linecorp.kotlinjdsl.spring.data.reactive.query.singleQuery -import org.hibernate.reactive.mutiny.Mutiny -import org.springframework.http.ResponseEntity -import org.springframework.stereotype.Service -import org.springframework.web.bind.annotation.* -import reactor.core.publisher.Mono -import java.util.concurrent.CompletionStage - -@RestController -@RequestMapping("/api/v1/books") -class BookController( - private val bookService: BookService, -) { - @PostMapping - fun createBook(@RequestBody spec: BookService.CreateBookSpec): Mono> = - Mono.fromCompletionStage { bookService.create(spec) }.map { ResponseEntity.ok().body(it.id) } - - @GetMapping("/{bookId}") - suspend fun findById(@PathVariable bookId: Long): ResponseEntity { - val book = bookService.findById(bookId) - - return ResponseEntity.ok(book) - } - - @GetMapping - suspend fun findAll(@RequestParam("name") name: String): ResponseEntity> { - val books = bookService.findAll(BookService.FindBookSpec(name = name)) - - return ResponseEntity.ok(books) - } -} - -@Service -class BookService( - private val mutinySessionFactory: Mutiny.SessionFactory, - private val queryFactory: SpringDataHibernateMutinyReactiveQueryFactory, -) { - fun create(spec: CreateBookSpec): CompletionStage { - val book = Book(name = spec.name) - return mutinySessionFactory.withSession { session -> session.persist(book).flatMap { session.flush() } } - .map { book } - .subscribeAsCompletionStage() - } - - suspend fun findById(id: Long): Book { - return queryFactory.singleQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::id).equal(id)) - } - } - - suspend fun findAll(spec: FindBookSpec): List { - return queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::name).like("%${spec.name}%")) - } - } - - data class CreateBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } - - data class FindBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } -} diff --git a/examples/spring-boot-hibernate-reactive-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt b/examples/spring-boot-hibernate-reactive-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt deleted file mode 100644 index 752348683..000000000 --- a/examples/spring-boot-hibernate-reactive-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.runApplication - -@SpringBootApplication -class ExampleApplication - -fun main(args: Array) { - runApplication(*args) -} diff --git a/examples/spring-boot-hibernate-reactive-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/QueryFactoryConfiguration.kt b/examples/spring-boot-hibernate-reactive-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/QueryFactoryConfiguration.kt deleted file mode 100644 index d43344edf..000000000 --- a/examples/spring-boot-hibernate-reactive-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/QueryFactoryConfiguration.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.spring.data.reactive.query.SpringDataHibernateMutinyReactiveQueryFactory -import org.hibernate.reactive.mutiny.Mutiny.SessionFactory -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import javax.persistence.EntityManagerFactory -import javax.persistence.Persistence - -@Configuration -class QueryFactoryConfiguration { - @Bean - fun entityManagerFactory(): EntityManagerFactory = Persistence.createEntityManagerFactory("book") - - @Bean - fun mutinySessionFactory(entityManagerFactory: EntityManagerFactory): SessionFactory = - entityManagerFactory.unwrap(SessionFactory::class.java) - .apply { - withSession { - // currently H2 db does not support officially - // and does not allow extract & create schema with h2 db in hibernate-reactive - // so DDL query execute directly - it.createNativeQuery( - """ - create table book ( - id bigint not null auto_increment, - name varchar(255), - primary key (id) - ) - """.trimIndent() - ).executeUpdate() - }.subscribeAsCompletionStage().get() - } - - @Bean - fun queryFactory(sessionFactory: SessionFactory): SpringDataHibernateMutinyReactiveQueryFactory { - return SpringDataHibernateMutinyReactiveQueryFactory( - sessionFactory = sessionFactory, - subqueryCreator = SubqueryCreatorImpl() - ) - } -} diff --git a/examples/spring-boot-hibernate-reactive-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt b/examples/spring-boot-hibernate-reactive-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt deleted file mode 100644 index e1137c86e..000000000 --- a/examples/spring-boot-hibernate-reactive-2.7/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example.entity - -import javax.persistence.* - -@Entity -@Table(name = "book") -data class Book( - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - val id: Long = 0, - - @Column - val name: String, -) { - fun toJson() = """{"id":$id,"name":"$name"}""" -} diff --git a/examples/spring-boot-hibernate-reactive-2.7/src/main/resources/META-INF/persistence.xml b/examples/spring-boot-hibernate-reactive-2.7/src/main/resources/META-INF/persistence.xml deleted file mode 100644 index 9c618fe8c..000000000 --- a/examples/spring-boot-hibernate-reactive-2.7/src/main/resources/META-INF/persistence.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - org.hibernate.reactive.provider.ReactivePersistenceProvider - com.linecorp.kotlinjdsl.spring.data.example.entity.Book - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/spring-boot-hibernate-reactive-2.7/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt b/examples/spring-boot-hibernate-reactive-2.7/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt deleted file mode 100644 index ce12c959b..000000000 --- a/examples/spring-boot-hibernate-reactive-2.7/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.test.web.reactive.server.WebTestClient - -@SpringBootTest -@AutoConfigureWebTestClient(timeout = "100000") -internal class BookControllerIntegrationTest : WithAssertions { - @Autowired - private lateinit var client: WebTestClient - - private val context = "/api/v1/books" - - @Test - fun createBook() { - createBook(BookService.CreateBookSpec("name")) - } - - @Test - fun findById() { - val spec = BookService.CreateBookSpec("name1") - val id = createBook(spec) - client.get().uri("$context/$id") - .exchange() - .expectStatus().isOk - .expectBody(Book::class.java) - .value { - assertThat(Book(id = id, name = spec.name)).isEqualTo(it) - } - - } - - @Test - fun findByName() { - val spec1 = BookService.CreateBookSpec("name2") - val spec2 = BookService.CreateBookSpec("name2") - val id1 = createBook(spec1) - val id2 = createBook(spec2) - client.get().uri(context + "?name=${spec1.name}") - .exchange() - .expectStatus().isOk - .expectBodyList(Book::class.java) - .contains(Book(id = id1, name = spec1.name), Book(id = id2, name = spec2.name)) - } - - private fun createBook(spec: BookService.CreateBookSpec) = client.post().uri(context) - .bodyValue(spec) - .exchange() - .expectStatus().isOk - .returnResult(Long::class.java) - .responseBody - .blockFirst()!! -} diff --git a/examples/spring-boot-hibernate-reactive-3/build.gradle.kts b/examples/spring-boot-hibernate-reactive-3/build.gradle.kts deleted file mode 100644 index 7574a47e9..000000000 --- a/examples/spring-boot-hibernate-reactive-3/build.gradle.kts +++ /dev/null @@ -1,34 +0,0 @@ -@Suppress("DSL_SCOPE_VIOLATION") -plugins { - alias(libs.plugins.spring.boot3) - kotlin("plugin.spring") - kotlin("plugin.jpa") -} - -apply(plugin = "org.springframework.boot") -apply(plugin = "kotlin-spring") -apply(plugin = "kotlin-jpa") - -coverage { - exclude(project) -} - -dependencies { - implementation(Modules.queryJakarta) - // implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-hibernate-reactive-jakarta:x.y.z") - implementation(Modules.springDataHibernateReactiveJakarta) - implementation(libs.hibernate.reactive.jakarta) - implementation(libs.coroutine.jdk8) - implementation(libs.coroutine.reactor) - implementation(libs.bundles.mutiny) - - implementation(Modules.testFixtureHibernateReactiveJakarta) - - implementation(libs.spring.boot.webflux) - implementation(libs.spring.boot3.jpa) - implementation(libs.jackson.kotlin.module) - implementation(libs.h2) - implementation(platform(libs.spring.boot3.bom)) - - testImplementation(libs.spring.boot3.test) -} diff --git a/examples/spring-boot-hibernate-reactive-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt b/examples/spring-boot-hibernate-reactive-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt deleted file mode 100644 index 5f7eaa70f..000000000 --- a/examples/spring-boot-hibernate-reactive-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Books.kt +++ /dev/null @@ -1,78 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import com.linecorp.kotlinjdsl.spring.data.reactive.query.SpringDataHibernateMutinyReactiveQueryFactory -import com.linecorp.kotlinjdsl.spring.data.reactive.query.listQuery -import com.linecorp.kotlinjdsl.spring.data.reactive.query.singleQuery -import org.hibernate.reactive.mutiny.Mutiny -import org.springframework.http.ResponseEntity -import org.springframework.stereotype.Service -import org.springframework.web.bind.annotation.* -import reactor.core.publisher.Mono -import java.util.concurrent.CompletionStage - -@RestController -@RequestMapping("/api/v1/books") -class BookController( - private val bookService: BookService, -) { - @PostMapping - fun createBook(@RequestBody spec: BookService.CreateBookSpec): Mono> = - Mono.fromCompletionStage { bookService.create(spec) }.map { ResponseEntity.ok().body(it.id) } - - @GetMapping("/{bookId}") - suspend fun findById(@PathVariable bookId: Long): ResponseEntity { - val book = bookService.findById(bookId) - - return ResponseEntity.ok(book) - } - - @GetMapping - suspend fun findAll(@RequestParam("name") name: String): ResponseEntity> { - val books = bookService.findAll(BookService.FindBookSpec(name = name)) - - return ResponseEntity.ok(books) - } -} - -@Service -class BookService( - private val mutinySessionFactory: Mutiny.SessionFactory, - private val queryFactory: SpringDataHibernateMutinyReactiveQueryFactory, -) { - fun create(spec: CreateBookSpec): CompletionStage { - val book = Book(name = spec.name) - return mutinySessionFactory.withSession { session -> session.persist(book).flatMap { session.flush() } } - .map { book } - .subscribeAsCompletionStage() - } - - suspend fun findById(id: Long): Book { - return queryFactory.singleQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::id).equal(id)) - } - } - - suspend fun findAll(spec: FindBookSpec): List { - return queryFactory.listQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::name).like("%${spec.name}%")) - } - } - - data class CreateBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } - - data class FindBookSpec( - val name: String - ) { - fun toJson() = """{"name":"$name"}""" - } -} diff --git a/examples/spring-boot-hibernate-reactive-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt b/examples/spring-boot-hibernate-reactive-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt deleted file mode 100644 index 752348683..000000000 --- a/examples/spring-boot-hibernate-reactive-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/Main.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.runApplication - -@SpringBootApplication -class ExampleApplication - -fun main(args: Array) { - runApplication(*args) -} diff --git a/examples/spring-boot-hibernate-reactive-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/QueryFactoryConfiguration.kt b/examples/spring-boot-hibernate-reactive-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/QueryFactoryConfiguration.kt deleted file mode 100644 index 114fe893b..000000000 --- a/examples/spring-boot-hibernate-reactive-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/QueryFactoryConfiguration.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.spring.data.reactive.query.SpringDataHibernateMutinyReactiveQueryFactory -import org.hibernate.reactive.mutiny.Mutiny.SessionFactory -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import jakarta.persistence.EntityManagerFactory -import jakarta.persistence.Persistence - -@Configuration -class QueryFactoryConfiguration { - @Bean - fun entityManagerFactory(): EntityManagerFactory = Persistence.createEntityManagerFactory("book") - - @Bean - fun mutinySessionFactory(entityManagerFactory: EntityManagerFactory): SessionFactory = - entityManagerFactory.unwrap(SessionFactory::class.java) - .apply { - withSession { - // currently H2 db does not support officially - // and does not allow extract & create schema with h2 db in hibernate-reactive - // so DDL query execute directly - it.createNativeQuery( - """ - create table book ( - id bigint not null auto_increment, - name varchar(255), - primary key (id) - ) - """.trimIndent() - ).executeUpdate() - }.subscribeAsCompletionStage().get() - } - - @Bean - fun queryFactory(sessionFactory: SessionFactory): SpringDataHibernateMutinyReactiveQueryFactory { - return SpringDataHibernateMutinyReactiveQueryFactory( - sessionFactory = sessionFactory, - subqueryCreator = SubqueryCreatorImpl() - ) - } -} diff --git a/examples/spring-boot-hibernate-reactive-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt b/examples/spring-boot-hibernate-reactive-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt deleted file mode 100644 index b4982284a..000000000 --- a/examples/spring-boot-hibernate-reactive-3/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/example/entity/Book.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example.entity - -import jakarta.persistence.* - -@Entity -@Table(name = "book") -data class Book( - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - val id: Long = 0, - - @Column - val name: String, -) { - fun toJson() = """{"id":$id,"name":"$name"}""" -} diff --git a/examples/spring-boot-hibernate-reactive-3/src/main/resources/META-INF/persistence.xml b/examples/spring-boot-hibernate-reactive-3/src/main/resources/META-INF/persistence.xml deleted file mode 100644 index 20fcbc3b0..000000000 --- a/examples/spring-boot-hibernate-reactive-3/src/main/resources/META-INF/persistence.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - org.hibernate.reactive.provider.ReactivePersistenceProvider - com.linecorp.kotlinjdsl.spring.data.example.entity.Book - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/spring-boot-hibernate-reactive-3/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt b/examples/spring-boot-hibernate-reactive-3/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt deleted file mode 100644 index ce12c959b..000000000 --- a/examples/spring-boot-hibernate-reactive-3/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/example/BookControllerIntegrationTest.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.example - -import com.linecorp.kotlinjdsl.spring.data.example.entity.Book -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.test.web.reactive.server.WebTestClient - -@SpringBootTest -@AutoConfigureWebTestClient(timeout = "100000") -internal class BookControllerIntegrationTest : WithAssertions { - @Autowired - private lateinit var client: WebTestClient - - private val context = "/api/v1/books" - - @Test - fun createBook() { - createBook(BookService.CreateBookSpec("name")) - } - - @Test - fun findById() { - val spec = BookService.CreateBookSpec("name1") - val id = createBook(spec) - client.get().uri("$context/$id") - .exchange() - .expectStatus().isOk - .expectBody(Book::class.java) - .value { - assertThat(Book(id = id, name = spec.name)).isEqualTo(it) - } - - } - - @Test - fun findByName() { - val spec1 = BookService.CreateBookSpec("name2") - val spec2 = BookService.CreateBookSpec("name2") - val id1 = createBook(spec1) - val id2 = createBook(spec2) - client.get().uri(context + "?name=${spec1.name}") - .exchange() - .expectStatus().isOk - .expectBodyList(Book::class.java) - .contains(Book(id = id1, name = spec1.name), Book(id = id2, name = spec2.name)) - } - - private fun createBook(spec: BookService.CreateBookSpec) = client.post().uri(context) - .bodyValue(spec) - .exchange() - .expectStatus().isOk - .returnResult(Long::class.java) - .responseBody - .blockFirst()!! -} diff --git a/gradle.properties b/gradle.properties index 8c971b2d9..3fffb2341 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,4 @@ kotlin.code.style=official -org.gradle.jvmargs=-Xmx2G \ No newline at end of file +org.gradle.jvmargs=-Xmx2G +org.gradle.parallel=true +org.gradle.workers.max=4 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bdc9a83b1..37aef8d3f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/hibernate-jakarta/build.gradle.kts b/hibernate-jakarta/build.gradle.kts deleted file mode 100644 index bc3571a41..000000000 --- a/hibernate-jakarta/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -apply() - -dependencies { - api(Modules.coreJakarta) - - compileOnly(libs.hibernate6) - compileOnly(libs.slf4j) - - testImplementation(Modules.coreJakarta) - testImplementation(Modules.testFixtureIntegrationJakarta) - testImplementation(libs.hibernate6) - testImplementation(libs.h2) -} - -coverage { - exclude(project) -} diff --git a/hibernate-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlQueryHintClause.kt b/hibernate-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlQueryHintClause.kt deleted file mode 100644 index 776aede45..000000000 --- a/hibernate-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlQueryHintClause.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import org.slf4j.LoggerFactory -import jakarta.persistence.Query - -data class HibernateSqlQueryHintClause( - private val queryHints: List -) : SqlQueryHintClause { - companion object { - private val log = LoggerFactory.getLogger(HibernateSqlQueryHintClause::class.java) - } - - override fun apply(query: Query) { - if (queryHints.isEmpty()) return - - val unwrappedQuery = try { - query.unwrap(org.hibernate.query.Query::class.java) - } catch (e: Exception) { - log.error("This query does not support hibernate query hint", e) - null - } - - unwrappedQuery?.run { - queryHints.forEach { addQueryHint(it) } - } - } -} diff --git a/hibernate-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlQueryHintClauseFactoryProvider.kt b/hibernate-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlQueryHintClauseFactoryProvider.kt deleted file mode 100644 index 2007ab639..000000000 --- a/hibernate-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlQueryHintClauseFactoryProvider.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint.hibernate - -import com.linecorp.kotlinjdsl.query.clause.hint.HibernateSqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider -import jakarta.persistence.Query - -class HibernateSqlQueryHintClauseFactoryProvider : SqlQueryHintClauseFactoryProvider { - override fun factory(): (List) -> SqlQueryHintClause = { HibernateSqlQueryHintClause(it) } -} diff --git a/hibernate-jakarta/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider b/hibernate-jakarta/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider deleted file mode 100644 index 7e73a25bc..000000000 --- a/hibernate-jakarta/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider +++ /dev/null @@ -1 +0,0 @@ -com.linecorp.kotlinjdsl.querydsl.hint.hibernate.HibernateSqlQueryHintClauseFactoryProvider diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateCriteriaDeleteIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateCriteriaDeleteIntegrationTest.kt deleted file mode 100644 index 3f10e2117..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateCriteriaDeleteIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractCriteriaDeleteIntegrationTest - -class HibernateCriteriaDeleteIntegrationTest : AbstractCriteriaDeleteIntegrationTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateFetchDslIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateFetchDslIntegrationTest.kt deleted file mode 100644 index 78c8bb9f7..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateFetchDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractFetchDslTest - -class HibernateFetchDslIntegrationTest : AbstractFetchDslTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateGroupByDslIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateGroupByDslIntegrationTest.kt deleted file mode 100644 index 874774322..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateGroupByDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractGroupByDslTest - -class HibernateGroupByDslIntegrationTest : AbstractGroupByDslTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateJoinDslIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateJoinDslIntegrationTest.kt deleted file mode 100644 index cc6a16d6a..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateJoinDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractJoinDslTest - -class HibernateJoinDslIntegrationTest : AbstractJoinDslTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateLimitDslIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateLimitDslIntegrationTest.kt deleted file mode 100644 index d6af6111a..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateLimitDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractLimitDslTest - -class HibernateLimitDslIntegrationTest : AbstractLimitDslTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateOrderByDslIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateOrderByDslIntegrationTest.kt deleted file mode 100644 index e2a8ceba3..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateOrderByDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractOrderByDslTest - -class HibernateOrderByDslIntegrationTest : AbstractOrderByDslTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/expression/HibernateCriteriaQueryDslExpressionIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/expression/HibernateCriteriaQueryDslExpressionIntegrationTest.kt deleted file mode 100644 index 7e65c13a6..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/expression/HibernateCriteriaQueryDslExpressionIntegrationTest.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.expression - -import com.linecorp.kotlinjdsl.test.integration.querydsl.expression.AbstractCriteriaQueryDslExpressionIntegrationTest - -internal class HibernateCriteriaQueryDslExpressionIntegrationTest : - AbstractCriteriaQueryDslExpressionIntegrationTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/from/HibernateCriteriaQueryDslFromIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/from/HibernateCriteriaQueryDslFromIntegrationTest.kt deleted file mode 100644 index 4b5cc06ac..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/from/HibernateCriteriaQueryDslFromIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.from - -import com.linecorp.kotlinjdsl.test.integration.querydsl.from.AbstractCriteriaQueryDslFromIntegrationTest - -internal class HibernateCriteriaQueryDslFromIntegrationTest : AbstractCriteriaQueryDslFromIntegrationTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/from/HibernateCriteriaQueryDslFromTreatIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/from/HibernateCriteriaQueryDslFromTreatIntegrationTest.kt deleted file mode 100644 index d8863b2d6..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/from/HibernateCriteriaQueryDslFromTreatIntegrationTest.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.from - -import com.linecorp.kotlinjdsl.test.integration.querydsl.from.AbstractCriteriaQueryDslFromTreatIntegrationTest -import org.hibernate.sql.ast.SqlTreeCreationException -import org.junit.jupiter.api.Test - -/** - * https://discourse.hibernate.org/t/jpa-downcast-criteria-treat-vs-jpql-treat/2231 - * - * This isn't the case in all cases, and if the root and parent entities are the same when downcasting, there's no problem. - * However, if the root and parent entities are different and an attempt to downcast them to a child entity is not used, - * however, an additional join occurs in the query statement. - * In this case, if you treat distinct as in the test example, there is no problem. - */ -internal class HibernateCriteriaQueryDslFromTreatIntegrationTest : AbstractCriteriaQueryDslFromTreatIntegrationTest() { - - /** - * Unlike hibernate 5, subquery in select is not properly supported in 6. - * As the hibernate version upgrade progresses in the future, - * we expect this test to break and operate normally. - */ - override fun getProjectByFullTimeEmployeesSalarySelectFullTimeEmployee() { - assertThatThrownBy { super.getProjectByFullTimeEmployeesSalarySelectFullTimeEmployee() } - .hasMessageContaining("Could not locate TableGroup - treat") - .hasRootCauseExactlyInstanceOf(SqlTreeCreationException::class.java) - } -} diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/groupby/HibernateCriteriaQueryDslGroupByIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/groupby/HibernateCriteriaQueryDslGroupByIntegrationTest.kt deleted file mode 100644 index bc40f082a..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/groupby/HibernateCriteriaQueryDslGroupByIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.groupby - -import com.linecorp.kotlinjdsl.test.integration.querydsl.groupby.AbstractCriteriaQueryDslGroupByIntegrationTest - -internal class HibernateCriteriaQueryDslGroupByIntegrationTest : AbstractCriteriaQueryDslGroupByIntegrationTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/having/HibernateCriteriaQueryDslHavingIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/having/HibernateCriteriaQueryDslHavingIntegrationTest.kt deleted file mode 100644 index dfb82bce9..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/having/HibernateCriteriaQueryDslHavingIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.having - -import com.linecorp.kotlinjdsl.test.integration.querydsl.having.AbstractCriteriaQueryDslHavingIntegrationTest - -internal class HibernateCriteriaQueryDslHavingIntegrationTest : AbstractCriteriaQueryDslHavingIntegrationTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/hint/HibernateCriteriaQueryDslHintIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/hint/HibernateCriteriaQueryDslHintIntegrationTest.kt deleted file mode 100644 index 84c33b9f5..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/hint/HibernateCriteriaQueryDslHintIntegrationTest.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.hint - -import com.linecorp.kotlinjdsl.listQuery -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.min -import com.linecorp.kotlinjdsl.test.entity.order.Order -import com.linecorp.kotlinjdsl.test.integration.AbstractCriteriaQueryDslIntegrationTest -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test - -internal class HibernateCriteriaQueryDslHintIntegrationTest : AbstractCriteriaQueryDslIntegrationTest() { - - private val order1 = order { purchaserId = 1000 } - private val order2 = order { purchaserId = 1000 } - private val order3 = order { purchaserId = 2000 } - - @BeforeEach - fun setUp() { - entityManager.persistAll(order1, order2, order3) - entityManager.flushAndClear() - } - - @Test - fun sqlHint() { - // when - val purchaserIds = queryFactory.listQuery { - select(min(Order::purchaserId)) - from(entity(Order::class)) - // Hibernate query hint handler inject query hints only when query has where clause - // See org.hibernate.dialect.hint.IndexQueryHintHandler - where(col(Order::id).`in`(order1.id, order2.id, order3.id)) - sqlHints("idx1") - } - - // then - assertThat(purchaserIds).containsOnly(1000) - } - - @Test - fun jpaHint() { - // when - val purchaserIds = queryFactory.listQuery { - select(col(Order::purchaserId)) - from(entity(Order::class)) - hints("org.hibernate.comment" to "comment") - } - - // then - assertThat(purchaserIds).containsOnly(1000, 2000) - } -} diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/limit/HibernateCriteriaQueryDslLimitIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/limit/HibernateCriteriaQueryDslLimitIntegrationTest.kt deleted file mode 100644 index 5a06e483a..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/limit/HibernateCriteriaQueryDslLimitIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.limit - -import com.linecorp.kotlinjdsl.test.integration.querydsl.limit.AbstractCriteriaQueryDslLimitIntegrationTest - -internal class HibernateCriteriaQueryDslLimitIntegrationTest : AbstractCriteriaQueryDslLimitIntegrationTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/orderby/HibernateCriteriaQueryDslOrderByIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/orderby/HibernateCriteriaQueryDslOrderByIntegrationTest.kt deleted file mode 100644 index 5df61838f..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/orderby/HibernateCriteriaQueryDslOrderByIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.orderby - -import com.linecorp.kotlinjdsl.test.integration.querydsl.orderby.AbstractCriteriaQueryDslOrderByIntegrationTest - -internal class HibernateCriteriaQueryDslOrderByIntegrationTest : AbstractCriteriaQueryDslOrderByIntegrationTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/predicate/HibernateCriteriaQueryDslPredicateIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/predicate/HibernateCriteriaQueryDslPredicateIntegrationTest.kt deleted file mode 100644 index b1cbe56e9..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/predicate/HibernateCriteriaQueryDslPredicateIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.predicate - -import com.linecorp.kotlinjdsl.test.integration.querydsl.predicate.AbstractCriteriaQueryDslPredicateIntegrationTest - -internal class HibernateCriteriaQueryDslPredicateIntegrationTest : AbstractCriteriaQueryDslPredicateIntegrationTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/select/HibernateCriteriaQueryDslSelectIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/select/HibernateCriteriaQueryDslSelectIntegrationTest.kt deleted file mode 100644 index 88d5ec66e..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/select/HibernateCriteriaQueryDslSelectIntegrationTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.select - -import com.linecorp.kotlinjdsl.test.integration.querydsl.select.AbstractCriteriaQueryDslSelectIntegrationTest -import org.junit.jupiter.api.Test -import java.lang.AssertionError - -class HibernateCriteriaQueryDslSelectIntegrationTest : AbstractCriteriaQueryDslSelectIntegrationTest() { - /** - * Unlike hibernate 5, subquery in select is not properly supported in 6. - * As the hibernate version upgrade progresses in the future, - * we expect this test to break and operate normally. - */ - @Test - override fun `listQuery - subquery in select, subquery in from`() { - catchThrowable(AssertionError::class) { super.`listQuery - subquery in select, subquery in from`() } - } -} diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/set/HibernateCriteriaQueryUpdateDslTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/set/HibernateCriteriaQueryUpdateDslTest.kt deleted file mode 100644 index 9c3be5f70..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/set/HibernateCriteriaQueryUpdateDslTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.set - -import com.linecorp.kotlinjdsl.test.integration.querydsl.set.AbstractCriteriaQueryDslUpdateByIntegrationTest - -class HibernateCriteriaQueryUpdateDslTest : AbstractCriteriaQueryDslUpdateByIntegrationTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/where/HibernateCriteriaQueryDslWhereIntegrationTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/where/HibernateCriteriaQueryDslWhereIntegrationTest.kt deleted file mode 100644 index 3e11243b3..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/where/HibernateCriteriaQueryDslWhereIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.where - -import com.linecorp.kotlinjdsl.test.integration.querydsl.where.AbstractCriteriaQueryDslWhereIntegrationTest - -internal class HibernateCriteriaQueryDslWhereIntegrationTest : AbstractCriteriaQueryDslWhereIntegrationTest() diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlQueryHintClauseTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlQueryHintClauseTest.kt deleted file mode 100644 index 1f14467fe..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlQueryHintClauseTest.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertDoesNotThrow -import org.hibernate.query.Query as HibernateQuery -internal class HibernateSqlQueryHintClauseTest { - private val sut = HibernateSqlQueryHintClause(listOf("hint")) - - @Test - fun applyNormally() { - val query = mockk>() - every { query.addQueryHint("hint") } returns query - every { query.unwrap(HibernateQuery::class.java) } returns query - - assertDoesNotThrow { sut.apply(query) } - - verify { - query.addQueryHint("hint") - query.unwrap(HibernateQuery::class.java) - } - } - - @Test - fun `apply nothing if query is not HibernateQuery`() { - val query = mockk> { - every { unwrap(HibernateQuery::class.java) } throws IllegalArgumentException() - } - - assertDoesNotThrow { sut.apply(query) } - - verify { - query.unwrap(HibernateQuery::class.java) - } - } -} diff --git a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlQueryHintClauseFactoryProviderTest.kt b/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlQueryHintClauseFactoryProviderTest.kt deleted file mode 100644 index a4bc7eecb..000000000 --- a/hibernate-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlQueryHintClauseFactoryProviderTest.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint.hibernate - -import com.linecorp.kotlinjdsl.query.clause.hint.HibernateSqlQueryHintClause -import com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test - -internal class HibernateSqlQueryHintClauseFactoryProviderTest : WithAssertions { - - @Test - fun test() { - assertThat(SqlQueryHintClauseFactoryProvider.loadedFactory?.invoke(listOf("test"))).isInstanceOf( - HibernateSqlQueryHintClause::class.java - ) - } -} diff --git a/hibernate-jakarta/src/test/resources/META-INF/persistence.xml b/hibernate-jakarta/src/test/resources/META-INF/persistence.xml deleted file mode 100644 index 810a25f58..000000000 --- a/hibernate-jakarta/src/test/resources/META-INF/persistence.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - com.linecorp.kotlinjdsl.test.entity.employee.ContractEmployee - com.linecorp.kotlinjdsl.test.entity.employee.Employee - com.linecorp.kotlinjdsl.test.entity.employee.FullTimeEmployee - com.linecorp.kotlinjdsl.test.entity.employee.PartTimeEmployee - com.linecorp.kotlinjdsl.test.entity.employee.Project - - com.linecorp.kotlinjdsl.test.entity.Address - - com.linecorp.kotlinjdsl.test.entity.order.Order - com.linecorp.kotlinjdsl.test.entity.order.OrderGroup - com.linecorp.kotlinjdsl.test.entity.order.OrderItem - com.linecorp.kotlinjdsl.test.entity.order.OrderAddress - - com.linecorp.kotlinjdsl.test.entity.delivery.Delivery - com.linecorp.kotlinjdsl.test.entity.delivery.DeliveryItem - com.linecorp.kotlinjdsl.test.entity.delivery.DeliveryAddress - com.linecorp.kotlinjdsl.test.entity.test.TestTable - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hibernate-reactive-jakarta/build.gradle.kts b/hibernate-reactive-jakarta/build.gradle.kts deleted file mode 100644 index a4fd494aa..000000000 --- a/hibernate-reactive-jakarta/build.gradle.kts +++ /dev/null @@ -1,23 +0,0 @@ -apply() - -coverage { - exclude(project) -} - -dependencies { - api(Modules.reactiveCoreJakarta) - - compileOnly(libs.hibernate.reactive.jakarta) - compileOnly(libs.slf4j) - compileOnly(libs.bundles.mutiny) - - testImplementation(libs.bundles.mutiny) - testImplementation(libs.coroutine.jdk8) - testImplementation(Modules.testFixtureIntegrationReactiveJakarta) - testImplementation(Modules.testFixtureHibernateReactiveJakarta) - testImplementation(libs.hibernate.reactive.jakarta) - testImplementation(libs.kotlin.reflect) - testImplementation(libs.h2) - testImplementation(libs.agroal.pool) - testImplementation(libs.vertx.jdbc.client) -} diff --git a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQuery.kt b/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQuery.kt deleted file mode 100644 index 191d04956..000000000 --- a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQuery.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import io.smallrye.mutiny.coroutines.awaitSuspending -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.Parameter -import kotlin.reflect.KClass - -class HibernateMutinyReactiveQuery(private val query: Mutiny.Query) : ReactiveQuery { - override suspend fun singleResult(): R = query.singleResult.awaitSuspending() - override suspend fun resultList(): List = query.resultList.awaitSuspending() - override suspend fun singleResultOrNull(): R? = query.singleResultOrNull.awaitSuspending() - override suspend fun executeUpdate(): Int = query.executeUpdate().awaitSuspending() - - override fun setParameter(position: Int, value: Any?): ReactiveQuery { - query.setParameter(position, value) - return this - } - - override fun setParameter(name: String, value: Any?): ReactiveQuery { - query.setParameter(name, value) - return this - } - - override fun setParameter(parameter: Parameter, value: T?): ReactiveQuery { - query.setParameter(parameter, value) - return this - } - - override fun setMaxResults(maxResults: Int): ReactiveQuery { - query.maxResults = maxResults - return this - } - - override fun setFirstResult(firstResult: Int): ReactiveQuery { - query.firstResult = firstResult - return this - } - override fun setQueryHint(hintName: String, value: Any) { - throw UnsupportedOperationException("Hibernate-reactive does not support JPA query hint yet. if hibernate-reactive setQueryHint method support officially please let us know. we will fix it") - } - - override val maxResults: Int - get() = query.maxResults - override val firstResult: Int - get() = query.firstResult - - @Suppress("UNCHECKED_CAST") - override fun unwrap(type: KClass): T { - return query as T - } -} diff --git a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQueryFactory.kt b/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQueryFactory.kt deleted file mode 100644 index 7d391ba1a..000000000 --- a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQueryFactory.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import com.linecorp.kotlinjdsl.ReactiveQueryFactory -import com.linecorp.kotlinjdsl.ReactiveQueryFactoryImpl -import com.linecorp.kotlinjdsl.query.creator.MutinyReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.MutinyStatelessReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import com.linecorp.kotlinjdsl.subquery -import io.smallrye.mutiny.coroutines.asUni -import io.smallrye.mutiny.coroutines.awaitSuspending -import kotlinx.coroutines.* -import org.hibernate.reactive.mutiny.Mutiny -import org.hibernate.reactive.mutiny.Mutiny.SessionFactory -import kotlin.coroutines.CoroutineContext - -class HibernateMutinyReactiveQueryFactory( - /** - * When methods such as withSession and withTransaction are executed, the scope responsible for the actual DB processing must always be executed in the thread where the withXXX method is executed. - * For this, we will use Unconfined Dispatcher by default. - * However, we prevent hard-coding the dispatcher and inject and process executeQueryContext so that we can change it to a separate CoroutineContext when we want to change it. - */ - private val executeQueryContext: CoroutineContext = Dispatchers.Unconfined, - private val sessionFactory: SessionFactory, - private val subqueryCreator: SubqueryCreator, -) { - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun withFactory(block: suspend (Mutiny.Session, ReactiveQueryFactory) -> T): T = - sessionFactory.withSession { session -> makeFactory(session).let { makeScope().async { block(session, it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun statelessWithFactory(block: suspend (ReactiveQueryFactory) -> T): T = - sessionFactory.withStatelessSession { makeFactory(it).let { makeScope().async { block(it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun withFactory(block: suspend (ReactiveQueryFactory) -> T): T = - sessionFactory.withSession { makeFactory(it).let { makeScope().async { block(it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun transactionWithFactory(block: suspend (ReactiveQueryFactory) -> T): T = - sessionFactory.withTransaction { session -> makeFactory(session).let { makeScope().async { block(it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun transactionWithFactory(block: suspend (Mutiny.Session, ReactiveQueryFactory) -> T): T = - sessionFactory.withTransaction { session -> makeFactory(session).let { makeScope().async { block(session, it) } }.asUni() } - .awaitSuspending() - - fun subquery(classType: Class, dsl: SubqueryDsl.() -> Unit) = subquery(classType, subqueryCreator, dsl) - - private fun makeScope() = CoroutineScope(SupervisorJob() + executeQueryContext) - - private fun makeFactory(it: Mutiny.Session) = ReactiveQueryFactoryImpl( - subqueryCreator = subqueryCreator, - criteriaQueryCreator = MutinyReactiveCriteriaQueryCreator(sessionFactory.criteriaBuilder, it) - ) - - private fun makeFactory(it: Mutiny.StatelessSession) = ReactiveQueryFactoryImpl( - subqueryCreator = subqueryCreator, - criteriaQueryCreator = MutinyStatelessReactiveCriteriaQueryCreator(sessionFactory.criteriaBuilder, it) - ) -} diff --git a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQueryFactoryExtensions.kt b/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQueryFactoryExtensions.kt deleted file mode 100644 index 323080f0f..000000000 --- a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQueryFactoryExtensions.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import com.linecorp.kotlinjdsl.* -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl - -suspend inline fun HibernateMutinyReactiveQueryFactory.singleQuery( - noinline dsl: CriteriaQueryDsl.() -> Unit -) = statelessWithFactory { queryFactory -> queryFactory.singleQuery(dsl) } - -suspend inline fun HibernateMutinyReactiveQueryFactory.singleQueryOrNull( - noinline dsl: CriteriaQueryDsl.() -> Unit -) = statelessWithFactory { queryFactory -> queryFactory.singleQueryOrNull(dsl) } - -suspend inline fun HibernateMutinyReactiveQueryFactory.listQuery( - noinline dsl: CriteriaQueryDsl.() -> Unit -) = statelessWithFactory { queryFactory -> queryFactory.listQuery(dsl) } - -suspend inline fun HibernateMutinyReactiveQueryFactory.updateQuery( - noinline dsl: CriteriaUpdateQueryDsl.() -> Unit -) = statelessWithFactory { queryFactory -> queryFactory.updateQuery(dsl).executeUpdate() } - -suspend inline fun HibernateMutinyReactiveQueryFactory.deleteQuery( - noinline dsl: CriteriaDeleteQueryDsl.() -> Unit -) = statelessWithFactory { queryFactory -> queryFactory.deleteQuery(dsl).executeUpdate() } - -inline fun HibernateMutinyReactiveQueryFactory.subquery( - noinline dsl: SubqueryDsl.() -> Unit -) = subquery(T::class.java, dsl) diff --git a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlMutinyReactiveQueryHintClause.kt b/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlMutinyReactiveQueryHintClause.kt deleted file mode 100644 index ca0fb83d5..000000000 --- a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlMutinyReactiveQueryHintClause.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import org.hibernate.reactive.mutiny.Mutiny -import org.slf4j.LoggerFactory - -data class HibernateSqlMutinyReactiveQueryHintClause( - private val queryHints: List -) : SqlQueryHintClause> { - companion object { - private val log = LoggerFactory.getLogger(HibernateSqlMutinyReactiveQueryHintClause::class.java) - } - - override fun apply(query: ReactiveQuery) { - if (queryHints.isEmpty()) return - - val unwrappedQuery = try { - query.unwrap(Mutiny.Query::class) - } catch (e: Exception) { - log.error("This query does not support hibernate query hint", e) - null - } - - unwrappedQuery?.run { - queryHints.forEach { setComment(it) } - } - } -} diff --git a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyReactiveCriteriaQueryCreator.kt b/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyReactiveCriteriaQueryCreator.kt deleted file mode 100644 index a817182b4..000000000 --- a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyReactiveCriteriaQueryCreator.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.* -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.criteria.CriteriaBuilder - -class MutinyReactiveCriteriaQueryCreator( - private val criteriaBuilder: CriteriaBuilder, private val session: Mutiny.Session -) : ReactiveCriteriaQueryCreator { - override fun createQuery(spec: CriteriaQuerySpec>): ReactiveQuery = - JpaCriteriaQueryBuilder.createQuery(spec = spec, criteriaBuilder = criteriaBuilder) { - HibernateMutinyReactiveQuery(session.createQuery(it)) - } - - override fun createQuery(spec: CriteriaUpdateQuerySpec>) = - JpaCriteriaQueryBuilder.createQuery(spec = spec, criteriaBuilder = criteriaBuilder) { - HibernateMutinyReactiveQuery(session.createQuery(it)) - } - - override fun createQuery(spec: CriteriaDeleteQuerySpec>) = - JpaCriteriaQueryBuilder.createQuery(spec = spec, criteriaBuilder = criteriaBuilder) { - HibernateMutinyReactiveQuery(session.createQuery(it)) - } -} diff --git a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyStatelessReactiveCriteriaQueryCreator.kt b/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyStatelessReactiveCriteriaQueryCreator.kt deleted file mode 100644 index 607a0bc2c..000000000 --- a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyStatelessReactiveCriteriaQueryCreator.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.* -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.criteria.CriteriaBuilder - -class MutinyStatelessReactiveCriteriaQueryCreator( - private val criteriaBuilder: CriteriaBuilder, private val session: Mutiny.StatelessSession -) : ReactiveCriteriaQueryCreator { - override fun createQuery(spec: CriteriaQuerySpec>): ReactiveQuery = - JpaCriteriaQueryBuilder.createQuery(spec = spec, criteriaBuilder = criteriaBuilder) { - HibernateMutinyReactiveQuery(session.createQuery(it)) - } - - override fun createQuery(spec: CriteriaUpdateQuerySpec>) = - JpaCriteriaQueryBuilder.createQuery(spec = spec, criteriaBuilder = criteriaBuilder) { - HibernateMutinyReactiveQuery(session.createQuery(it)) - } - - override fun createQuery(spec: CriteriaDeleteQuerySpec>) = - JpaCriteriaQueryBuilder.createQuery(spec = spec, criteriaBuilder = criteriaBuilder) { - HibernateMutinyReactiveQuery(session.createQuery(it)) - } -} diff --git a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlReactiveQueryHintClauseFactoryProvider.kt b/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlReactiveQueryHintClauseFactoryProvider.kt deleted file mode 100644 index ab22b9b40..000000000 --- a/hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlReactiveQueryHintClauseFactoryProvider.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint.hibernate - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.hint.HibernateSqlMutinyReactiveQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.querydsl.hint.SqlReactiveQueryHintClauseFactoryProvider - -class HibernateSqlReactiveQueryHintClauseFactoryProvider : SqlReactiveQueryHintClauseFactoryProvider { - override fun factory(): (List) -> SqlQueryHintClause> = - { HibernateSqlMutinyReactiveQueryHintClause(it) } -} diff --git a/hibernate-reactive-jakarta/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlReactiveQueryHintClauseFactoryProvider b/hibernate-reactive-jakarta/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlReactiveQueryHintClauseFactoryProvider deleted file mode 100644 index 004dbdf57..000000000 --- a/hibernate-reactive-jakarta/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlReactiveQueryHintClauseFactoryProvider +++ /dev/null @@ -1 +0,0 @@ -com.linecorp.kotlinjdsl.querydsl.hint.hibernate.HibernateSqlReactiveQueryHintClauseFactoryProvider diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlMutinyReactiveQueryHintClauseTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlMutinyReactiveQueryHintClauseTest.kt deleted file mode 100644 index 46d67ce8c..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlMutinyReactiveQueryHintClauseTest.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import com.linecorp.kotlinjdsl.query.HibernateMutinyReactiveQuery -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertDoesNotThrow - -internal class HibernateSqlMutinyReactiveQueryHintClauseTest { - private val sut = HibernateSqlMutinyReactiveQueryHintClause(listOf("hint")) - - @Test - fun applyNormally() { - val query = mockk>() - every { query.setComment("hint") } returns query - - assertDoesNotThrow { sut.apply(HibernateMutinyReactiveQuery(query)) } - - verify { - query.setComment("hint") - } - } - - @Test - fun `apply nothing if query is not Mutiny-Query`() { - val query = mockk> { - every { unwrap(Mutiny.Query::class) } throws IllegalArgumentException() - } - - assertDoesNotThrow { sut.apply(query) } - - verify { - query.unwrap(Mutiny.Query::class) - } - } -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyReactiveCriteriaQueryCreatorTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyReactiveCriteriaQueryCreatorTest.kt deleted file mode 100644 index 5f70d8ce6..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyReactiveCriteriaQueryCreatorTest.kt +++ /dev/null @@ -1,252 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.* -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class MutinyReactiveCriteriaQueryCreatorTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: MutinyReactiveCriteriaQueryCreator - - @MockK - private lateinit var session: Mutiny.Session - - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun createQuery() { - data class TestCriteriaQuerySpec( - override val select: CriteriaQuerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: CriteriaQueryWhereClause, - override val groupBy: CriteriaQueryGroupByClause, - override val having: CriteriaQueryHavingClause, - override val orderBy: CriteriaQueryOrderByClause, - override val limit: QueryLimitClause>, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaQuerySpec> - // given - val createdQuery: CriteriaQuery = mockk() - val query = slot>() - val stageQuery: Mutiny.Query = mockk() - - val select: CriteriaQuerySelectClause = mockk { - every { returnType } returns Int::class.java - } - val from: FromClause<*> = mockk() - val join: JoinClause = mockk() - val where: CriteriaQueryWhereClause = mockk() - val groupBy: CriteriaQueryGroupByClause = mockk() - val having: CriteriaQueryHavingClause = mockk() - val orderBy: CriteriaQueryOrderByClause = mockk() - val limit: QueryLimitClause> = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - - val spec: CriteriaQuerySpec> = TestCriteriaQuerySpec( - from = from, - join = join, - where = where, - groupBy = groupBy, - having = having, - orderBy = orderBy, - limit = limit, - jpaHint = jpaHint, - sqlHint = sqlHint, - select = select - ) - - every { session.createQuery(createdQuery) } returns stageQuery - every { criteriaBuilder.createQuery(Int::class.java) } returns createdQuery - every { from.join(join, createdQuery, criteriaBuilder) } returns froms - every { select.apply(froms, createdQuery, criteriaBuilder) } just runs - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { groupBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { having.apply(froms, createdQuery, criteriaBuilder) } just runs - every { orderBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { limit.apply(capture(query)) } just runs - every { jpaHint.apply(capture(query)) } just runs - every { sqlHint.apply(capture(query)) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query.captured) - - verify(exactly = 1) { - session.createQuery(createdQuery) - criteriaBuilder.createQuery(Int::class.java) - from.join(join, createdQuery, criteriaBuilder) - select.returnType - select.apply(froms, createdQuery, criteriaBuilder) - where.apply(froms, createdQuery, criteriaBuilder) - groupBy.apply(froms, createdQuery, criteriaBuilder) - having.apply(froms, createdQuery, criteriaBuilder) - orderBy.apply(froms, createdQuery, criteriaBuilder) - limit.apply(query.captured) - jpaHint.apply(query.captured) - sqlHint.apply(query.captured) - } - - confirmVerified( - select, from, join, where, groupBy, having, orderBy, limit, jpaHint, sqlHint, - createdQuery, - session, froms, criteriaBuilder - ) - } - - @Test - fun createUpdateQuery() { - data class TestCriteriaUpdateQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - override val set: SetClause - ) : CriteriaUpdateQuerySpec> - // given - val createdQuery: CriteriaUpdate = mockk() - val query = slot>() - val stageQuery: Mutiny.Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - val set: SetClause = mockk() - - val spec: CriteriaUpdateQuerySpec> = TestCriteriaUpdateQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - set = set, - targetEntity = Int::class.java - ) - - val setKey = mockk>() - every { createdQuery.set(setKey, 1234) } returns createdQuery - - every { session.createQuery(createdQuery) } returns stageQuery - every { criteriaBuilder.createCriteriaUpdate(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(capture(query)) } just runs - every { sqlHint.apply(capture(query)) } just runs - every { set.apply(froms, createdQuery, criteriaBuilder) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query.captured) - - verify(exactly = 1) { - session.createQuery(createdQuery) - criteriaBuilder.createCriteriaUpdate(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - set.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query.captured) - sqlHint.apply(query.captured) - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, - session, froms, criteriaBuilder - ) - } - - @Test - fun createDeleteQuery() { - data class TestCriteriaDeleteQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaDeleteQuerySpec> - // given - val createdQuery: CriteriaDelete = mockk() - val query = slot>() - val stageQuery: Mutiny.Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - val set: SetClause = mockk() - - val spec: CriteriaDeleteQuerySpec> = TestCriteriaDeleteQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - targetEntity = Int::class.java - ) - - every { session.createQuery(createdQuery) } returns stageQuery - every { criteriaBuilder.createCriteriaDelete(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(capture(query)) } just runs - every { sqlHint.apply(capture(query)) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query.captured) - - verify(exactly = 1) { - session.createQuery(createdQuery) - criteriaBuilder.createCriteriaDelete(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query.captured) - sqlHint.apply(query.captured) - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, - session, froms, criteriaBuilder - ) - } -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyStatelessReactiveCriteriaQueryCreatorTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyStatelessReactiveCriteriaQueryCreatorTest.kt deleted file mode 100644 index 9d0ab0971..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyStatelessReactiveCriteriaQueryCreatorTest.kt +++ /dev/null @@ -1,252 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.* -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class MutinyStatelessReactiveCriteriaQueryCreatorTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: MutinyStatelessReactiveCriteriaQueryCreator - - @MockK - private lateinit var session: Mutiny.StatelessSession - - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun createQuery() { - data class TestCriteriaQuerySpec( - override val select: CriteriaQuerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: CriteriaQueryWhereClause, - override val groupBy: CriteriaQueryGroupByClause, - override val having: CriteriaQueryHavingClause, - override val orderBy: CriteriaQueryOrderByClause, - override val limit: QueryLimitClause>, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaQuerySpec> - // given - val createdQuery: CriteriaQuery = mockk() - val query = slot>() - val stageQuery: Mutiny.Query = mockk() - - val select: CriteriaQuerySelectClause = mockk { - every { returnType } returns Int::class.java - } - val from: FromClause<*> = mockk() - val join: JoinClause = mockk() - val where: CriteriaQueryWhereClause = mockk() - val groupBy: CriteriaQueryGroupByClause = mockk() - val having: CriteriaQueryHavingClause = mockk() - val orderBy: CriteriaQueryOrderByClause = mockk() - val limit: QueryLimitClause> = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - - val spec: CriteriaQuerySpec> = TestCriteriaQuerySpec( - from = from, - join = join, - where = where, - groupBy = groupBy, - having = having, - orderBy = orderBy, - limit = limit, - jpaHint = jpaHint, - sqlHint = sqlHint, - select = select - ) - - every { session.createQuery(createdQuery) } returns stageQuery - every { criteriaBuilder.createQuery(Int::class.java) } returns createdQuery - every { from.join(join, createdQuery, criteriaBuilder) } returns froms - every { select.apply(froms, createdQuery, criteriaBuilder) } just runs - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { groupBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { having.apply(froms, createdQuery, criteriaBuilder) } just runs - every { orderBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { limit.apply(capture(query)) } just runs - every { jpaHint.apply(capture(query)) } just runs - every { sqlHint.apply(capture(query)) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query.captured) - - verify(exactly = 1) { - session.createQuery(createdQuery) - criteriaBuilder.createQuery(Int::class.java) - from.join(join, createdQuery, criteriaBuilder) - select.returnType - select.apply(froms, createdQuery, criteriaBuilder) - where.apply(froms, createdQuery, criteriaBuilder) - groupBy.apply(froms, createdQuery, criteriaBuilder) - having.apply(froms, createdQuery, criteriaBuilder) - orderBy.apply(froms, createdQuery, criteriaBuilder) - limit.apply(query.captured) - jpaHint.apply(query.captured) - sqlHint.apply(query.captured) - } - - confirmVerified( - select, from, join, where, groupBy, having, orderBy, limit, jpaHint, sqlHint, - createdQuery, - session, froms, criteriaBuilder - ) - } - - @Test - fun createUpdateQuery() { - data class TestCriteriaUpdateQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - override val set: SetClause - ) : CriteriaUpdateQuerySpec> - // given - val createdQuery: CriteriaUpdate = mockk() - val query = slot>() - val stageQuery: Mutiny.Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - val set: SetClause = mockk() - - val spec: CriteriaUpdateQuerySpec> = TestCriteriaUpdateQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - set = set, - targetEntity = Int::class.java - ) - - val setKey = mockk>() - every { createdQuery.set(setKey, 1234) } returns createdQuery - - every { session.createQuery(createdQuery) } returns stageQuery - every { criteriaBuilder.createCriteriaUpdate(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(capture(query)) } just runs - every { sqlHint.apply(capture(query)) } just runs - every { set.apply(froms, createdQuery, criteriaBuilder) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query.captured) - - verify(exactly = 1) { - session.createQuery(createdQuery) - criteriaBuilder.createCriteriaUpdate(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - set.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query.captured) - sqlHint.apply(query.captured) - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, - session, froms, criteriaBuilder - ) - } - - @Test - fun createDeleteQuery() { - data class TestCriteriaDeleteQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaDeleteQuerySpec> - // given - val createdQuery: CriteriaDelete = mockk() - val query = slot>() - val stageQuery: Mutiny.Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - val set: SetClause = mockk() - - val spec: CriteriaDeleteQuerySpec> = TestCriteriaDeleteQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - targetEntity = Int::class.java - ) - - every { session.createQuery(createdQuery) } returns stageQuery - every { criteriaBuilder.createCriteriaDelete(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(capture(query)) } just runs - every { sqlHint.apply(capture(query)) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query.captured) - - verify(exactly = 1) { - session.createQuery(createdQuery) - criteriaBuilder.createCriteriaDelete(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query.captured) - sqlHint.apply(query.captured) - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, - session, froms, criteriaBuilder - ) - } -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlMutinyReactiveQueryHintClauseFactoryProviderTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlMutinyReactiveQueryHintClauseFactoryProviderTest.kt deleted file mode 100644 index 3b1369396..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlMutinyReactiveQueryHintClauseFactoryProviderTest.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint.hibernate - -import com.linecorp.kotlinjdsl.query.clause.hint.HibernateSqlMutinyReactiveQueryHintClause -import com.linecorp.kotlinjdsl.querydsl.hint.SqlReactiveQueryHintClauseFactoryProvider -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test - -internal class HibernateSqlMutinyReactiveQueryHintClauseFactoryProviderTest : WithAssertions { - - @Test - fun test() { - assertThat(SqlReactiveQueryHintClauseFactoryProvider.loadedFactory?.invoke(listOf("test"))).isInstanceOf( - HibernateSqlMutinyReactiveQueryHintClause::class.java - ) - } -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/HibernateCriteriaIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/HibernateCriteriaIntegrationTest.kt deleted file mode 100644 index a52b9b169..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/HibernateCriteriaIntegrationTest.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive - -import com.linecorp.kotlinjdsl.ReactiveQueryFactory -import com.linecorp.kotlinjdsl.query.HibernateMutinyReactiveQueryFactory -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import io.smallrye.mutiny.coroutines.awaitSuspending -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MutinySessionFactoryExtension::class) -interface HibernateCriteriaIntegrationTest : CriteriaQueryDslIntegrationTest { - override suspend fun persist(entity: Any) { - entityManagerFactory.createEntityManager().apply { - transaction.apply { - begin() - persist(entity) - flush() - commit() - } - close() - } - } - - override suspend fun persistAll(vararg entities: Any) { - entities.forEach { entity -> persist(entity) } - } - - override suspend fun persistAll(entities: Collection) { - persistAll(entities.toTypedArray()) - } - - override suspend fun removeAll(vararg entities: Any) { - entities.forEach { entity -> - factory.withSession { session -> - session.merge(entity) - .flatMap { session.remove(it) } - .flatMap { session.flush() } - }.awaitSuspending() - } - } - - override suspend fun removeAll(entities: Collection) { - removeAll(entities.toTypedArray()) - } - - override suspend fun withFactory(block: suspend (ReactiveQueryFactory) -> T): T = - HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ).withFactory(block) -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateCriteriaDeleteIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateCriteriaDeleteIntegrationTest.kt deleted file mode 100644 index f4efffd94..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateCriteriaDeleteIntegrationTest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.criteriaquery - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -class HibernateCriteriaDeleteIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaDeleteIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateFetchDslIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateFetchDslIntegrationTest.kt deleted file mode 100644 index 51808acef..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateFetchDslIntegrationTest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.criteriaquery - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -class HibernateFetchDslIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractFetchDslTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateGroupByDslIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateGroupByDslIntegrationTest.kt deleted file mode 100644 index 0642d9067..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateGroupByDslIntegrationTest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.criteriaquery - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -class HibernateGroupByDslIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractGroupByDslTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateJoinDslIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateJoinDslIntegrationTest.kt deleted file mode 100644 index a1499aea7..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateJoinDslIntegrationTest.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.criteriaquery - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -class HibernateJoinDslIntegrationTest : HibernateCriteriaIntegrationTest, AbstractJoinDslTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateLimitDslIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateLimitDslIntegrationTest.kt deleted file mode 100644 index 8099cd6dd..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateLimitDslIntegrationTest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.criteriaquery - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -class HibernateLimitDslIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractLimitDslTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateOrderByDslIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateOrderByDslIntegrationTest.kt deleted file mode 100644 index f3580f32d..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateOrderByDslIntegrationTest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.criteriaquery - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -class HibernateOrderByDslIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractOrderByDslTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/expression/HibernateCriteriaQueryDslExpressionIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/expression/HibernateCriteriaQueryDslExpressionIntegrationTest.kt deleted file mode 100644 index a70dd3375..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/expression/HibernateCriteriaQueryDslExpressionIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.expression - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.expression.AbstractCriteriaQueryDslExpressionIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslExpressionIntegrationTest : - HibernateCriteriaIntegrationTest, AbstractCriteriaQueryDslExpressionIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/from/HibernateCriteriaQueryDslFromIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/from/HibernateCriteriaQueryDslFromIntegrationTest.kt deleted file mode 100644 index 43a5cbdd8..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/from/HibernateCriteriaQueryDslFromIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.from - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.from.AbstractCriteriaQueryDslFromIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslFromIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslFromIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/from/HibernateCriteriaQueryDslFromTreatIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/from/HibernateCriteriaQueryDslFromTreatIntegrationTest.kt deleted file mode 100644 index 9234dec26..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/from/HibernateCriteriaQueryDslFromTreatIntegrationTest.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.from - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.from.AbstractCriteriaQueryDslFromTreatIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.Test -import jakarta.persistence.EntityManagerFactory - -/** - * https://discourse.hibernate.org/t/jpa-downcast-criteria-treat-vs-jpql-treat/2231 - * - * This isn't the case in all cases, and if the root and parent entities are the same when downcasting, there's no problem. - * However, if the root and parent entities are different and an attempt to downcast them to a child entity is not used, - * however, an additional join occurs in the query statement. - * In this case, if you treat distinct as in the test example, there is no problem. - */ -internal class HibernateCriteriaQueryDslFromTreatIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslFromTreatIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory - - /** - * https://discourse.hibernate.org/t/can-fetch-be-used-as-parameter-of-treat-for-downcasting/3301 - * An UnsupportedOperationException is raised when fetching an entity intended for downcasting. - * The solution is to use the method in the link, Criteria API for Hibernate, - * but we use JPA standard Criteria API, so it is difficult to support until Hibernate fixes the bug. - */ - @Test - override fun getProjectsWithSupervisorSalaryEqualBySubqueryFullTimeEmployeesSalaryAndPartTimeEmployeeWeeklySalaryWithFetch() { - assertThatThrownBy { super.getProjectsWithSupervisorSalaryEqualBySubqueryFullTimeEmployeesSalaryAndPartTimeEmployeeWeeklySalaryWithFetch() } - .isInstanceOf(UnsupportedOperationException::class.java) - } -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/groupby/HibernateCriteriaQueryDslGroupByIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/groupby/HibernateCriteriaQueryDslGroupByIntegrationTest.kt deleted file mode 100644 index 3c671fc2c..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/groupby/HibernateCriteriaQueryDslGroupByIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.groupby - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.groupby.AbstractCriteriaQueryDslGroupByIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslGroupByIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslGroupByIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/having/HibernateCriteriaQueryDslHavingIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/having/HibernateCriteriaQueryDslHavingIntegrationTest.kt deleted file mode 100644 index eb9eae09c..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/having/HibernateCriteriaQueryDslHavingIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.having - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.having.AbstractCriteriaQueryDslHavingIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslHavingIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslHavingIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/hint/HibernateCriteriaQueryDslHintIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/hint/HibernateCriteriaQueryDslHintIntegrationTest.kt deleted file mode 100644 index 82d8f07f5..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/hint/HibernateCriteriaQueryDslHintIntegrationTest.kt +++ /dev/null @@ -1,60 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.hint - -import com.linecorp.kotlinjdsl.listQuery -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.min -import com.linecorp.kotlinjdsl.test.entity.order.Order -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.runBlocking -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import jakarta.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslHintIntegrationTest : HibernateCriteriaIntegrationTest { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory - private val order1 = order { purchaserId = 1000 } - private val order2 = order { purchaserId = 1000 } - private val order3 = order { purchaserId = 2000 } - - @BeforeEach - fun setUp() = runBlocking { - persistAll(order1, order2, order3) - } - - @Test - fun sqlHint() = runBlocking { - // when - val purchaserIds = withFactory { queryFactory -> - queryFactory.listQuery { - select(min(Order::purchaserId)) - from(entity(Order::class)) - // Hibernate query hint handler inject query hints only when query has where clause - // See org.hibernate.dialect.hint.IndexQueryHintHandler - where(col(Order::id).`in`(order1.id, order2.id, order3.id)) - sqlHints("idx1") - } - } - - // then - assertThat(purchaserIds).containsOnly(1000) - } - - @Test - fun jpaHint() = runBlocking { - try { - // when - withFactory { queryFactory -> - queryFactory.listQuery { - select(col(Order::purchaserId)) - from(entity(Order::class)) - hints("org.hibernate.comment" to "comment") - } - } - } catch (e: Throwable) { - // then - assertThat(e).hasMessage("Hibernate-reactive does not support JPA query hint yet. if hibernate-reactive setQueryHint method support officially please let us know. we will fix it") - } - } -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/limit/HibernateCriteriaQueryDslLimitIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/limit/HibernateCriteriaQueryDslLimitIntegrationTest.kt deleted file mode 100644 index 331aa7f98..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/limit/HibernateCriteriaQueryDslLimitIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.limit - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.limit.AbstractCriteriaQueryDslLimitIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslLimitIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslLimitIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/orderby/HibernateCriteriaQueryDslOrderByIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/orderby/HibernateCriteriaQueryDslOrderByIntegrationTest.kt deleted file mode 100644 index 0b0e6aa32..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/orderby/HibernateCriteriaQueryDslOrderByIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.orderby - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.orderby.AbstractCriteriaQueryDslOrderByIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslOrderByIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslOrderByIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/predicate/HibernateCriteriaQueryDslPredicateIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/predicate/HibernateCriteriaQueryDslPredicateIntegrationTest.kt deleted file mode 100644 index 6b4078c76..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/predicate/HibernateCriteriaQueryDslPredicateIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.predicate - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.predicate.AbstractCriteriaQueryDslPredicateIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslPredicateIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslPredicateIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/select/HibernateCriteriaQueryDslSelectIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/select/HibernateCriteriaQueryDslSelectIntegrationTest.kt deleted file mode 100644 index 52fcdde5a..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/select/HibernateCriteriaQueryDslSelectIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.select - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.select.AbstractCriteriaQueryDslSelectIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -class HibernateCriteriaQueryDslSelectIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslSelectIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/set/HibernateCriteriaQueryUpdateDslTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/set/HibernateCriteriaQueryUpdateDslTest.kt deleted file mode 100644 index 6eab36fda..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/set/HibernateCriteriaQueryUpdateDslTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.set - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.set.AbstractCriteriaQueryDslUpdateByIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -class HibernateCriteriaQueryUpdateDslTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslUpdateByIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/where/HibernateCriteriaQueryDslWhereIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/where/HibernateCriteriaQueryDslWhereIntegrationTest.kt deleted file mode 100644 index 0e0af5366..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/where/HibernateCriteriaQueryDslWhereIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.where - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.where.AbstractCriteriaQueryDslWhereIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import jakarta.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslWhereIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslWhereIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/query/HibernateMutinyReactiveQueryFactoryIntegrationTest.kt b/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/query/HibernateMutinyReactiveQueryFactoryIntegrationTest.kt deleted file mode 100644 index 2ad5f68c9..000000000 --- a/hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/query/HibernateMutinyReactiveQueryFactoryIntegrationTest.kt +++ /dev/null @@ -1,321 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.query - -import com.linecorp.kotlinjdsl.listQuery -import com.linecorp.kotlinjdsl.query.* -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.from.fetch -import com.linecorp.kotlinjdsl.selectQuery -import com.linecorp.kotlinjdsl.singleQuery -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.EntityDsl -import com.linecorp.kotlinjdsl.test.entity.order.Order -import com.linecorp.kotlinjdsl.test.entity.order.OrderGroup -import com.linecorp.kotlinjdsl.test.entity.order.OrderItem -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.MutinySessionFactoryExtension -import com.linecorp.kotlinjdsl.updateQuery -import io.smallrye.mutiny.coroutines.awaitSuspending -import kotlinx.coroutines.runBlocking -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.EntityManagerFactory - -@ExtendWith(MutinySessionFactoryExtension::class) -class HibernateMutinyReactiveQueryFactoryIntegrationTest : EntityDsl, WithKotlinJdslAssertions, - HibernateCriteriaIntegrationTest { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory - - @Test - fun executeSessionWithFactory() = runBlocking { - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, subqueryCreator = SubqueryCreatorImpl() - ) - val order = order { purchaserId = 5000 } - val actual = queryFactory.withFactory { session, factory -> - session.persist(order).awaitSuspending() - session.flush().awaitSuspending() - - factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(5000)) - } - } - - assertThat(actual.id).isEqualTo(order.id) - Unit - } - - @Test - fun withFactoryMultiOperations() = runBlocking { - val sessionFactory = initFactory() - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = sessionFactory, subqueryCreator = SubqueryCreatorImpl() - ) - val order = order { purchaserId = 5000 } - persist(order) - val actual = queryFactory.withFactory { factory -> - val firstOrder = factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(5000)) - } - - assertThat(firstOrder.id).isEqualTo(order.id) - - factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(5000)) - } - } - - assertThat(actual.id).isEqualTo(order.id) - sessionFactory.close() - } - - @Test - fun listQuery(): Unit = runBlocking { - val order = order {} - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val orders = queryFactory.listQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - } - - assertThat(orders) - .containsExactly(order) - } - - @Test - fun singleQuery(): Unit = runBlocking { - val order = order {} - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val actualOrder = queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).equal(order.id)) - } - - assertThat(actualOrder) - .isEqualTo(order) - } - - @Test - fun singleQueryOrNull(): Unit = runBlocking { - val order = order {} - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val actualOrder = queryFactory.singleQueryOrNull { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).equal(order.id)) - } - - assertThat(actualOrder) - .isEqualTo(order) - } - - @Test - fun `singleQueryOrNull null`(): Unit = runBlocking { - val order = order {} - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val actualOrder = queryFactory.singleQueryOrNull { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).isNull()) - } - - assertThat(actualOrder).isNull() - } - - @Test - fun updateQuery(): Unit = runBlocking { - val order = order {} - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - queryFactory.updateQuery { - where(col(Order::id).equal(order.id)) - set(col(Order::purchaserId), order.purchaserId + 1) - } - - assertThat(queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).equal(order.id)) - }) - .isEqualTo(order.copy(purchaserId = order.purchaserId + 1)) - } - - @Test - fun deleteQuery(): Unit = runBlocking { - val order = order {} - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - queryFactory.deleteQuery { - where(col(OrderItem::id).equal(order.groups.first().items.first().id)) - } - - assertThat(queryFactory.listQuery { - select(entity(OrderItem::class)) - from(entity(OrderItem::class)) - where(col(OrderItem::id).equal(order.groups.first().items.first().id)) - }).isEmpty() - } - - @Test - fun subquery(): Unit = runBlocking { - val orderItem1 = orderItem { } - val orderItem2 = orderItem { } - - val order1 = order { purchaserId = 1000 } - val order2 = order { purchaserId = 1000 } - val order3 = order { - purchaserId = 2000 - groups = hashSetOf(orderGroup { items = hashSetOf(orderItem1, orderItem2) }) - } - persistAll(order1, order2, order3) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val subquery = queryFactory.subquery { - val order = entity(Order::class, "o") - - select(count(col(order, Order::id))) - from(order) - where(col(order, Order::purchaserId).equal(col(Order::purchaserId))) - } - - // then - assertThat(queryFactory.listQuery { - select(subquery) - from(entity(Order::class)) - orderBy(col(Order::id).asc()) - }).isEqualTo(listOf(2L, 2L, 1L)) - } - - @Test - fun testTransaction(): Unit = runBlocking { - val order = order {} - persist(order) - - val producer = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - try { - producer.transactionWithFactory { session, queryFactory -> - session.merge(order).awaitSuspending() - - val orders = queryFactory.listQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - } - - queryFactory.updateQuery { - where(col(Order::id).equal(orders.first().id)) - set(col(Order::purchaserId), orders.first().purchaserId + 1) - }.executeUpdate() - - queryFactory.updateQuery { - throw IllegalStateException("transaction rollback") - }.executeUpdate() - } - } catch (e: IllegalStateException) { - assertThat(e).hasMessage("transaction rollback") - } - - assertThat(producer.transactionWithFactory { queryFactory -> - queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).equal(order.id)) - } - }).isEqualTo(order) - } - - @Test - fun unwrap(): Unit = runBlocking { - val order = order {} - persist(order) - - val factory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val orderItem = factory.withFactory { queryFactory -> - val query: Mutiny.Query = queryFactory.selectQuery { - select(entity(OrderItem::class)) - from(entity(OrderItem::class)) - where(col(OrderItem::id).equal(order.groups.first().items.first().id)) - }.unwrap() - - query.isReadOnly = true - - query.singleResult.awaitSuspending() - } - - assertThat(orderItem.id).isEqualTo(order.groups.first().items.first().id) - } -} diff --git a/hibernate-reactive/build.gradle.kts b/hibernate-reactive/build.gradle.kts deleted file mode 100644 index cd820ccf8..000000000 --- a/hibernate-reactive/build.gradle.kts +++ /dev/null @@ -1,19 +0,0 @@ -apply() - -dependencies { - api(Modules.reactiveCore) - - compileOnly(libs.hibernate.reactive) - compileOnly(libs.slf4j) - compileOnly(libs.bundles.mutiny) - - testImplementation(libs.bundles.mutiny) - testImplementation(libs.coroutine.jdk8) - testImplementation(Modules.testFixtureIntegrationReactive) - testImplementation(Modules.testFixtureHibernateReactive) - testImplementation(libs.hibernate.reactive) - testImplementation(libs.kotlin.reflect) - testImplementation(libs.h2) - testImplementation(libs.agroal.pool) - testImplementation(libs.vertx.jdbc.client) -} diff --git a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQuery.kt b/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQuery.kt deleted file mode 100644 index 0a6231a8e..000000000 --- a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQuery.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import io.smallrye.mutiny.coroutines.awaitSuspending -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.Parameter -import kotlin.reflect.KClass - -class HibernateMutinyReactiveQuery(private val query: Mutiny.Query) : ReactiveQuery { - override suspend fun singleResult(): R = query.singleResult.awaitSuspending() - override suspend fun resultList(): List = query.resultList.awaitSuspending() - override suspend fun singleResultOrNull(): R? = query.singleResultOrNull.awaitSuspending() - override suspend fun executeUpdate(): Int = query.executeUpdate().awaitSuspending() - - override fun setParameter(position: Int, value: Any?): ReactiveQuery { - query.setParameter(position, value) - return this - } - - override fun setParameter(name: String, value: Any?): ReactiveQuery { - query.setParameter(name, value) - return this - } - - override fun setParameter(parameter: Parameter, value: T?): ReactiveQuery { - query.setParameter(parameter, value) - return this - } - - override fun setMaxResults(maxResults: Int): ReactiveQuery { - query.maxResults = maxResults - return this - } - - override fun setFirstResult(firstResult: Int): ReactiveQuery { - query.firstResult = firstResult - return this - } - override fun setQueryHint(hintName: String, value: Any) { - throw UnsupportedOperationException("Hibernate-reactive does not support JPA query hint yet. if hibernate-reactive setQueryHint method support officially please let us know. we will fix it") - } - - override val maxResults: Int - get() = query.maxResults - override val firstResult: Int - get() = query.firstResult - - @Suppress("UNCHECKED_CAST") - override fun unwrap(type: KClass): T { - return query as T - } -} diff --git a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQueryFactory.kt b/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQueryFactory.kt deleted file mode 100644 index 7d391ba1a..000000000 --- a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQueryFactory.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import com.linecorp.kotlinjdsl.ReactiveQueryFactory -import com.linecorp.kotlinjdsl.ReactiveQueryFactoryImpl -import com.linecorp.kotlinjdsl.query.creator.MutinyReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.MutinyStatelessReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import com.linecorp.kotlinjdsl.subquery -import io.smallrye.mutiny.coroutines.asUni -import io.smallrye.mutiny.coroutines.awaitSuspending -import kotlinx.coroutines.* -import org.hibernate.reactive.mutiny.Mutiny -import org.hibernate.reactive.mutiny.Mutiny.SessionFactory -import kotlin.coroutines.CoroutineContext - -class HibernateMutinyReactiveQueryFactory( - /** - * When methods such as withSession and withTransaction are executed, the scope responsible for the actual DB processing must always be executed in the thread where the withXXX method is executed. - * For this, we will use Unconfined Dispatcher by default. - * However, we prevent hard-coding the dispatcher and inject and process executeQueryContext so that we can change it to a separate CoroutineContext when we want to change it. - */ - private val executeQueryContext: CoroutineContext = Dispatchers.Unconfined, - private val sessionFactory: SessionFactory, - private val subqueryCreator: SubqueryCreator, -) { - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun withFactory(block: suspend (Mutiny.Session, ReactiveQueryFactory) -> T): T = - sessionFactory.withSession { session -> makeFactory(session).let { makeScope().async { block(session, it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun statelessWithFactory(block: suspend (ReactiveQueryFactory) -> T): T = - sessionFactory.withStatelessSession { makeFactory(it).let { makeScope().async { block(it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun withFactory(block: suspend (ReactiveQueryFactory) -> T): T = - sessionFactory.withSession { makeFactory(it).let { makeScope().async { block(it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun transactionWithFactory(block: suspend (ReactiveQueryFactory) -> T): T = - sessionFactory.withTransaction { session -> makeFactory(session).let { makeScope().async { block(it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun transactionWithFactory(block: suspend (Mutiny.Session, ReactiveQueryFactory) -> T): T = - sessionFactory.withTransaction { session -> makeFactory(session).let { makeScope().async { block(session, it) } }.asUni() } - .awaitSuspending() - - fun subquery(classType: Class, dsl: SubqueryDsl.() -> Unit) = subquery(classType, subqueryCreator, dsl) - - private fun makeScope() = CoroutineScope(SupervisorJob() + executeQueryContext) - - private fun makeFactory(it: Mutiny.Session) = ReactiveQueryFactoryImpl( - subqueryCreator = subqueryCreator, - criteriaQueryCreator = MutinyReactiveCriteriaQueryCreator(sessionFactory.criteriaBuilder, it) - ) - - private fun makeFactory(it: Mutiny.StatelessSession) = ReactiveQueryFactoryImpl( - subqueryCreator = subqueryCreator, - criteriaQueryCreator = MutinyStatelessReactiveCriteriaQueryCreator(sessionFactory.criteriaBuilder, it) - ) -} diff --git a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQueryFactoryExtensions.kt b/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQueryFactoryExtensions.kt deleted file mode 100644 index 323080f0f..000000000 --- a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/HibernateMutinyReactiveQueryFactoryExtensions.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import com.linecorp.kotlinjdsl.* -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl - -suspend inline fun HibernateMutinyReactiveQueryFactory.singleQuery( - noinline dsl: CriteriaQueryDsl.() -> Unit -) = statelessWithFactory { queryFactory -> queryFactory.singleQuery(dsl) } - -suspend inline fun HibernateMutinyReactiveQueryFactory.singleQueryOrNull( - noinline dsl: CriteriaQueryDsl.() -> Unit -) = statelessWithFactory { queryFactory -> queryFactory.singleQueryOrNull(dsl) } - -suspend inline fun HibernateMutinyReactiveQueryFactory.listQuery( - noinline dsl: CriteriaQueryDsl.() -> Unit -) = statelessWithFactory { queryFactory -> queryFactory.listQuery(dsl) } - -suspend inline fun HibernateMutinyReactiveQueryFactory.updateQuery( - noinline dsl: CriteriaUpdateQueryDsl.() -> Unit -) = statelessWithFactory { queryFactory -> queryFactory.updateQuery(dsl).executeUpdate() } - -suspend inline fun HibernateMutinyReactiveQueryFactory.deleteQuery( - noinline dsl: CriteriaDeleteQueryDsl.() -> Unit -) = statelessWithFactory { queryFactory -> queryFactory.deleteQuery(dsl).executeUpdate() } - -inline fun HibernateMutinyReactiveQueryFactory.subquery( - noinline dsl: SubqueryDsl.() -> Unit -) = subquery(T::class.java, dsl) diff --git a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlMutinyReactiveQueryHintClause.kt b/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlMutinyReactiveQueryHintClause.kt deleted file mode 100644 index ca0fb83d5..000000000 --- a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlMutinyReactiveQueryHintClause.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import org.hibernate.reactive.mutiny.Mutiny -import org.slf4j.LoggerFactory - -data class HibernateSqlMutinyReactiveQueryHintClause( - private val queryHints: List -) : SqlQueryHintClause> { - companion object { - private val log = LoggerFactory.getLogger(HibernateSqlMutinyReactiveQueryHintClause::class.java) - } - - override fun apply(query: ReactiveQuery) { - if (queryHints.isEmpty()) return - - val unwrappedQuery = try { - query.unwrap(Mutiny.Query::class) - } catch (e: Exception) { - log.error("This query does not support hibernate query hint", e) - null - } - - unwrappedQuery?.run { - queryHints.forEach { setComment(it) } - } - } -} diff --git a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyReactiveCriteriaQueryCreator.kt b/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyReactiveCriteriaQueryCreator.kt deleted file mode 100644 index dd75a090e..000000000 --- a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyReactiveCriteriaQueryCreator.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.* -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.criteria.CriteriaBuilder - -class MutinyReactiveCriteriaQueryCreator( - private val criteriaBuilder: CriteriaBuilder, private val session: Mutiny.Session -) : ReactiveCriteriaQueryCreator { - override fun createQuery(spec: CriteriaQuerySpec>): ReactiveQuery = - JpaCriteriaQueryBuilder.createQuery(spec = spec, criteriaBuilder = criteriaBuilder) { - HibernateMutinyReactiveQuery(session.createQuery(it)) - } - - override fun createQuery(spec: CriteriaUpdateQuerySpec>) = - JpaCriteriaQueryBuilder.createQuery(spec = spec, criteriaBuilder = criteriaBuilder) { - HibernateMutinyReactiveQuery(session.createQuery(it)) - } - - override fun createQuery(spec: CriteriaDeleteQuerySpec>) = - JpaCriteriaQueryBuilder.createQuery(spec = spec, criteriaBuilder = criteriaBuilder) { - HibernateMutinyReactiveQuery(session.createQuery(it)) - } -} diff --git a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyStatelessReactiveCriteriaQueryCreator.kt b/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyStatelessReactiveCriteriaQueryCreator.kt deleted file mode 100644 index 92416dfc8..000000000 --- a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyStatelessReactiveCriteriaQueryCreator.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.* -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.criteria.CriteriaBuilder - -class MutinyStatelessReactiveCriteriaQueryCreator( - private val criteriaBuilder: CriteriaBuilder, private val session: Mutiny.StatelessSession -) : ReactiveCriteriaQueryCreator { - override fun createQuery(spec: CriteriaQuerySpec>): ReactiveQuery = - JpaCriteriaQueryBuilder.createQuery(spec = spec, criteriaBuilder = criteriaBuilder) { - HibernateMutinyReactiveQuery(session.createQuery(it)) - } - - override fun createQuery(spec: CriteriaUpdateQuerySpec>) = - JpaCriteriaQueryBuilder.createQuery(spec = spec, criteriaBuilder = criteriaBuilder) { - HibernateMutinyReactiveQuery(session.createQuery(it)) - } - - override fun createQuery(spec: CriteriaDeleteQuerySpec>) = - JpaCriteriaQueryBuilder.createQuery(spec = spec, criteriaBuilder = criteriaBuilder) { - HibernateMutinyReactiveQuery(session.createQuery(it)) - } -} diff --git a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlReactiveQueryHintClauseFactoryProvider.kt b/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlReactiveQueryHintClauseFactoryProvider.kt deleted file mode 100644 index ab22b9b40..000000000 --- a/hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlReactiveQueryHintClauseFactoryProvider.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint.hibernate - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.hint.HibernateSqlMutinyReactiveQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.querydsl.hint.SqlReactiveQueryHintClauseFactoryProvider - -class HibernateSqlReactiveQueryHintClauseFactoryProvider : SqlReactiveQueryHintClauseFactoryProvider { - override fun factory(): (List) -> SqlQueryHintClause> = - { HibernateSqlMutinyReactiveQueryHintClause(it) } -} diff --git a/hibernate-reactive/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlReactiveQueryHintClauseFactoryProvider b/hibernate-reactive/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlReactiveQueryHintClauseFactoryProvider deleted file mode 100644 index 004dbdf57..000000000 --- a/hibernate-reactive/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlReactiveQueryHintClauseFactoryProvider +++ /dev/null @@ -1 +0,0 @@ -com.linecorp.kotlinjdsl.querydsl.hint.hibernate.HibernateSqlReactiveQueryHintClauseFactoryProvider diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlMutinyReactiveQueryHintClauseTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlMutinyReactiveQueryHintClauseTest.kt deleted file mode 100644 index 46d67ce8c..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlMutinyReactiveQueryHintClauseTest.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import com.linecorp.kotlinjdsl.query.HibernateMutinyReactiveQuery -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertDoesNotThrow - -internal class HibernateSqlMutinyReactiveQueryHintClauseTest { - private val sut = HibernateSqlMutinyReactiveQueryHintClause(listOf("hint")) - - @Test - fun applyNormally() { - val query = mockk>() - every { query.setComment("hint") } returns query - - assertDoesNotThrow { sut.apply(HibernateMutinyReactiveQuery(query)) } - - verify { - query.setComment("hint") - } - } - - @Test - fun `apply nothing if query is not Mutiny-Query`() { - val query = mockk> { - every { unwrap(Mutiny.Query::class) } throws IllegalArgumentException() - } - - assertDoesNotThrow { sut.apply(query) } - - verify { - query.unwrap(Mutiny.Query::class) - } - } -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyReactiveCriteriaQueryCreatorTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyReactiveCriteriaQueryCreatorTest.kt deleted file mode 100644 index 4d76c18b6..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyReactiveCriteriaQueryCreatorTest.kt +++ /dev/null @@ -1,252 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.* -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class MutinyReactiveCriteriaQueryCreatorTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: MutinyReactiveCriteriaQueryCreator - - @MockK - private lateinit var session: Mutiny.Session - - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun createQuery() { - data class TestCriteriaQuerySpec( - override val select: CriteriaQuerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: CriteriaQueryWhereClause, - override val groupBy: CriteriaQueryGroupByClause, - override val having: CriteriaQueryHavingClause, - override val orderBy: CriteriaQueryOrderByClause, - override val limit: QueryLimitClause>, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaQuerySpec> - // given - val createdQuery: CriteriaQuery = mockk() - val query = slot>() - val stageQuery: Mutiny.Query = mockk() - - val select: CriteriaQuerySelectClause = mockk { - every { returnType } returns Int::class.java - } - val from: FromClause<*> = mockk() - val join: JoinClause = mockk() - val where: CriteriaQueryWhereClause = mockk() - val groupBy: CriteriaQueryGroupByClause = mockk() - val having: CriteriaQueryHavingClause = mockk() - val orderBy: CriteriaQueryOrderByClause = mockk() - val limit: QueryLimitClause> = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - - val spec: CriteriaQuerySpec> = TestCriteriaQuerySpec( - from = from, - join = join, - where = where, - groupBy = groupBy, - having = having, - orderBy = orderBy, - limit = limit, - jpaHint = jpaHint, - sqlHint = sqlHint, - select = select - ) - - every { session.createQuery(createdQuery) } returns stageQuery - every { criteriaBuilder.createQuery(Int::class.java) } returns createdQuery - every { from.join(join, createdQuery, criteriaBuilder) } returns froms - every { select.apply(froms, createdQuery, criteriaBuilder) } just runs - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { groupBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { having.apply(froms, createdQuery, criteriaBuilder) } just runs - every { orderBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { limit.apply(capture(query)) } just runs - every { jpaHint.apply(capture(query)) } just runs - every { sqlHint.apply(capture(query)) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query.captured) - - verify(exactly = 1) { - session.createQuery(createdQuery) - criteriaBuilder.createQuery(Int::class.java) - from.join(join, createdQuery, criteriaBuilder) - select.returnType - select.apply(froms, createdQuery, criteriaBuilder) - where.apply(froms, createdQuery, criteriaBuilder) - groupBy.apply(froms, createdQuery, criteriaBuilder) - having.apply(froms, createdQuery, criteriaBuilder) - orderBy.apply(froms, createdQuery, criteriaBuilder) - limit.apply(query.captured) - jpaHint.apply(query.captured) - sqlHint.apply(query.captured) - } - - confirmVerified( - select, from, join, where, groupBy, having, orderBy, limit, jpaHint, sqlHint, - createdQuery, - session, froms, criteriaBuilder - ) - } - - @Test - fun createUpdateQuery() { - data class TestCriteriaUpdateQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - override val set: SetClause - ) : CriteriaUpdateQuerySpec> - // given - val createdQuery: CriteriaUpdate = mockk() - val query = slot>() - val stageQuery: Mutiny.Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - val set: SetClause = mockk() - - val spec: CriteriaUpdateQuerySpec> = TestCriteriaUpdateQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - set = set, - targetEntity = Int::class.java - ) - - val setKey = mockk>() - every { createdQuery.set(setKey, 1234) } returns createdQuery - - every { session.createQuery(createdQuery) } returns stageQuery - every { criteriaBuilder.createCriteriaUpdate(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(capture(query)) } just runs - every { sqlHint.apply(capture(query)) } just runs - every { set.apply(froms, createdQuery, criteriaBuilder) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query.captured) - - verify(exactly = 1) { - session.createQuery(createdQuery) - criteriaBuilder.createCriteriaUpdate(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - set.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query.captured) - sqlHint.apply(query.captured) - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, - session, froms, criteriaBuilder - ) - } - - @Test - fun createDeleteQuery() { - data class TestCriteriaDeleteQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaDeleteQuerySpec> - // given - val createdQuery: CriteriaDelete = mockk() - val query = slot>() - val stageQuery: Mutiny.Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - val set: SetClause = mockk() - - val spec: CriteriaDeleteQuerySpec> = TestCriteriaDeleteQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - targetEntity = Int::class.java - ) - - every { session.createQuery(createdQuery) } returns stageQuery - every { criteriaBuilder.createCriteriaDelete(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(capture(query)) } just runs - every { sqlHint.apply(capture(query)) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query.captured) - - verify(exactly = 1) { - session.createQuery(createdQuery) - criteriaBuilder.createCriteriaDelete(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query.captured) - sqlHint.apply(query.captured) - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, - session, froms, criteriaBuilder - ) - } -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyStatelessReactiveCriteriaQueryCreatorTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyStatelessReactiveCriteriaQueryCreatorTest.kt deleted file mode 100644 index 9391e1939..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/MutinyStatelessReactiveCriteriaQueryCreatorTest.kt +++ /dev/null @@ -1,252 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.* -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class MutinyStatelessReactiveCriteriaQueryCreatorTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: MutinyStatelessReactiveCriteriaQueryCreator - - @MockK - private lateinit var session: Mutiny.StatelessSession - - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun createQuery() { - data class TestCriteriaQuerySpec( - override val select: CriteriaQuerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: CriteriaQueryWhereClause, - override val groupBy: CriteriaQueryGroupByClause, - override val having: CriteriaQueryHavingClause, - override val orderBy: CriteriaQueryOrderByClause, - override val limit: QueryLimitClause>, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaQuerySpec> - // given - val createdQuery: CriteriaQuery = mockk() - val query = slot>() - val stageQuery: Mutiny.Query = mockk() - - val select: CriteriaQuerySelectClause = mockk { - every { returnType } returns Int::class.java - } - val from: FromClause<*> = mockk() - val join: JoinClause = mockk() - val where: CriteriaQueryWhereClause = mockk() - val groupBy: CriteriaQueryGroupByClause = mockk() - val having: CriteriaQueryHavingClause = mockk() - val orderBy: CriteriaQueryOrderByClause = mockk() - val limit: QueryLimitClause> = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - - val spec: CriteriaQuerySpec> = TestCriteriaQuerySpec( - from = from, - join = join, - where = where, - groupBy = groupBy, - having = having, - orderBy = orderBy, - limit = limit, - jpaHint = jpaHint, - sqlHint = sqlHint, - select = select - ) - - every { session.createQuery(createdQuery) } returns stageQuery - every { criteriaBuilder.createQuery(Int::class.java) } returns createdQuery - every { from.join(join, createdQuery, criteriaBuilder) } returns froms - every { select.apply(froms, createdQuery, criteriaBuilder) } just runs - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { groupBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { having.apply(froms, createdQuery, criteriaBuilder) } just runs - every { orderBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { limit.apply(capture(query)) } just runs - every { jpaHint.apply(capture(query)) } just runs - every { sqlHint.apply(capture(query)) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query.captured) - - verify(exactly = 1) { - session.createQuery(createdQuery) - criteriaBuilder.createQuery(Int::class.java) - from.join(join, createdQuery, criteriaBuilder) - select.returnType - select.apply(froms, createdQuery, criteriaBuilder) - where.apply(froms, createdQuery, criteriaBuilder) - groupBy.apply(froms, createdQuery, criteriaBuilder) - having.apply(froms, createdQuery, criteriaBuilder) - orderBy.apply(froms, createdQuery, criteriaBuilder) - limit.apply(query.captured) - jpaHint.apply(query.captured) - sqlHint.apply(query.captured) - } - - confirmVerified( - select, from, join, where, groupBy, having, orderBy, limit, jpaHint, sqlHint, - createdQuery, - session, froms, criteriaBuilder - ) - } - - @Test - fun createUpdateQuery() { - data class TestCriteriaUpdateQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - override val set: SetClause - ) : CriteriaUpdateQuerySpec> - // given - val createdQuery: CriteriaUpdate = mockk() - val query = slot>() - val stageQuery: Mutiny.Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - val set: SetClause = mockk() - - val spec: CriteriaUpdateQuerySpec> = TestCriteriaUpdateQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - set = set, - targetEntity = Int::class.java - ) - - val setKey = mockk>() - every { createdQuery.set(setKey, 1234) } returns createdQuery - - every { session.createQuery(createdQuery) } returns stageQuery - every { criteriaBuilder.createCriteriaUpdate(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(capture(query)) } just runs - every { sqlHint.apply(capture(query)) } just runs - every { set.apply(froms, createdQuery, criteriaBuilder) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query.captured) - - verify(exactly = 1) { - session.createQuery(createdQuery) - criteriaBuilder.createCriteriaUpdate(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - set.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query.captured) - sqlHint.apply(query.captured) - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, - session, froms, criteriaBuilder - ) - } - - @Test - fun createDeleteQuery() { - data class TestCriteriaDeleteQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaDeleteQuerySpec> - // given - val createdQuery: CriteriaDelete = mockk() - val query = slot>() - val stageQuery: Mutiny.Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - val set: SetClause = mockk() - - val spec: CriteriaDeleteQuerySpec> = TestCriteriaDeleteQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - targetEntity = Int::class.java - ) - - every { session.createQuery(createdQuery) } returns stageQuery - every { criteriaBuilder.createCriteriaDelete(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(capture(query)) } just runs - every { sqlHint.apply(capture(query)) } just runs - - // when - val actual = sut.createQuery(spec) - - // then - assertThat(actual).isEqualTo(query.captured) - - verify(exactly = 1) { - session.createQuery(createdQuery) - criteriaBuilder.createCriteriaDelete(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query.captured) - sqlHint.apply(query.captured) - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, - session, froms, criteriaBuilder - ) - } -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlMutinyReactiveQueryHintClauseFactoryProviderTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlMutinyReactiveQueryHintClauseFactoryProviderTest.kt deleted file mode 100644 index 3b1369396..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlMutinyReactiveQueryHintClauseFactoryProviderTest.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint.hibernate - -import com.linecorp.kotlinjdsl.query.clause.hint.HibernateSqlMutinyReactiveQueryHintClause -import com.linecorp.kotlinjdsl.querydsl.hint.SqlReactiveQueryHintClauseFactoryProvider -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test - -internal class HibernateSqlMutinyReactiveQueryHintClauseFactoryProviderTest : WithAssertions { - - @Test - fun test() { - assertThat(SqlReactiveQueryHintClauseFactoryProvider.loadedFactory?.invoke(listOf("test"))).isInstanceOf( - HibernateSqlMutinyReactiveQueryHintClause::class.java - ) - } -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/HibernateCriteriaIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/HibernateCriteriaIntegrationTest.kt deleted file mode 100644 index a52b9b169..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/HibernateCriteriaIntegrationTest.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive - -import com.linecorp.kotlinjdsl.ReactiveQueryFactory -import com.linecorp.kotlinjdsl.query.HibernateMutinyReactiveQueryFactory -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import io.smallrye.mutiny.coroutines.awaitSuspending -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MutinySessionFactoryExtension::class) -interface HibernateCriteriaIntegrationTest : CriteriaQueryDslIntegrationTest { - override suspend fun persist(entity: Any) { - entityManagerFactory.createEntityManager().apply { - transaction.apply { - begin() - persist(entity) - flush() - commit() - } - close() - } - } - - override suspend fun persistAll(vararg entities: Any) { - entities.forEach { entity -> persist(entity) } - } - - override suspend fun persistAll(entities: Collection) { - persistAll(entities.toTypedArray()) - } - - override suspend fun removeAll(vararg entities: Any) { - entities.forEach { entity -> - factory.withSession { session -> - session.merge(entity) - .flatMap { session.remove(it) } - .flatMap { session.flush() } - }.awaitSuspending() - } - } - - override suspend fun removeAll(entities: Collection) { - removeAll(entities.toTypedArray()) - } - - override suspend fun withFactory(block: suspend (ReactiveQueryFactory) -> T): T = - HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ).withFactory(block) -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateCriteriaDeleteIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateCriteriaDeleteIntegrationTest.kt deleted file mode 100644 index b284b3e04..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateCriteriaDeleteIntegrationTest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.criteriaquery - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -class HibernateCriteriaDeleteIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaDeleteIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateFetchDslIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateFetchDslIntegrationTest.kt deleted file mode 100644 index d8ffb0ee8..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateFetchDslIntegrationTest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.criteriaquery - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -class HibernateFetchDslIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractFetchDslTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateGroupByDslIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateGroupByDslIntegrationTest.kt deleted file mode 100644 index 057c57ff5..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateGroupByDslIntegrationTest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.criteriaquery - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -class HibernateGroupByDslIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractGroupByDslTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateJoinDslIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateJoinDslIntegrationTest.kt deleted file mode 100644 index 9770be6be..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateJoinDslIntegrationTest.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.criteriaquery - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -class HibernateJoinDslIntegrationTest : HibernateCriteriaIntegrationTest, AbstractJoinDslTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateLimitDslIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateLimitDslIntegrationTest.kt deleted file mode 100644 index 0a6dc2680..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateLimitDslIntegrationTest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.criteriaquery - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -class HibernateLimitDslIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractLimitDslTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateOrderByDslIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateOrderByDslIntegrationTest.kt deleted file mode 100644 index c78a97a47..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/criteriaquery/HibernateOrderByDslIntegrationTest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.criteriaquery - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -class HibernateOrderByDslIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractOrderByDslTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/expression/HibernateCriteriaQueryDslExpressionIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/expression/HibernateCriteriaQueryDslExpressionIntegrationTest.kt deleted file mode 100644 index a8cccb4a7..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/expression/HibernateCriteriaQueryDslExpressionIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.expression - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.expression.AbstractCriteriaQueryDslExpressionIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslExpressionIntegrationTest : - HibernateCriteriaIntegrationTest, AbstractCriteriaQueryDslExpressionIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/from/HibernateCriteriaQueryDslFromIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/from/HibernateCriteriaQueryDslFromIntegrationTest.kt deleted file mode 100644 index cf8e1d85b..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/from/HibernateCriteriaQueryDslFromIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.from - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.from.AbstractCriteriaQueryDslFromIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslFromIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslFromIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/from/HibernateCriteriaQueryDslFromTreatIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/from/HibernateCriteriaQueryDslFromTreatIntegrationTest.kt deleted file mode 100644 index 8f8bb286b..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/from/HibernateCriteriaQueryDslFromTreatIntegrationTest.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.from - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.from.AbstractCriteriaQueryDslFromTreatIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.Test -import javax.persistence.EntityManagerFactory - -/** - * https://discourse.hibernate.org/t/jpa-downcast-criteria-treat-vs-jpql-treat/2231 - * - * This isn't the case in all cases, and if the root and parent entities are the same when downcasting, there's no problem. - * However, if the root and parent entities are different and an attempt to downcast them to a child entity is not used, - * however, an additional join occurs in the query statement. - * In this case, if you treat distinct as in the test example, there is no problem. - */ -internal class HibernateCriteriaQueryDslFromTreatIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslFromTreatIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory - - /** - * https://discourse.hibernate.org/t/can-fetch-be-used-as-parameter-of-treat-for-downcasting/3301 - * An UnsupportedOperationException is raised when fetching an entity intended for downcasting. - * The solution is to use the method in the link, Criteria API for Hibernate, - * but we use JPA standard Criteria API, so it is difficult to support until Hibernate fixes the bug. - */ - @Test - override fun getProjectsWithSupervisorSalaryEqualBySubqueryFullTimeEmployeesSalaryAndPartTimeEmployeeWeeklySalaryWithFetch() { - assertThatThrownBy { super.getProjectsWithSupervisorSalaryEqualBySubqueryFullTimeEmployeesSalaryAndPartTimeEmployeeWeeklySalaryWithFetch() } - .isInstanceOf(UnsupportedOperationException::class.java) - } -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/groupby/HibernateCriteriaQueryDslGroupByIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/groupby/HibernateCriteriaQueryDslGroupByIntegrationTest.kt deleted file mode 100644 index 5de495009..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/groupby/HibernateCriteriaQueryDslGroupByIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.groupby - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.groupby.AbstractCriteriaQueryDslGroupByIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslGroupByIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslGroupByIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/having/HibernateCriteriaQueryDslHavingIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/having/HibernateCriteriaQueryDslHavingIntegrationTest.kt deleted file mode 100644 index e0aecbaed..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/having/HibernateCriteriaQueryDslHavingIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.having - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.having.AbstractCriteriaQueryDslHavingIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslHavingIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslHavingIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/hint/HibernateCriteriaQueryDslHintIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/hint/HibernateCriteriaQueryDslHintIntegrationTest.kt deleted file mode 100644 index 66c0a6fd0..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/hint/HibernateCriteriaQueryDslHintIntegrationTest.kt +++ /dev/null @@ -1,60 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.hint - -import com.linecorp.kotlinjdsl.listQuery -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.min -import com.linecorp.kotlinjdsl.test.entity.order.Order -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.runBlocking -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import javax.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslHintIntegrationTest : HibernateCriteriaIntegrationTest { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory - private val order1 = order { purchaserId = 1000 } - private val order2 = order { purchaserId = 1000 } - private val order3 = order { purchaserId = 2000 } - - @BeforeEach - fun setUp() = runBlocking { - persistAll(order1, order2, order3) - } - - @Test - fun sqlHint() = runBlocking { - // when - val purchaserIds = withFactory { queryFactory -> - queryFactory.listQuery { - select(min(Order::purchaserId)) - from(entity(Order::class)) - // Hibernate query hint handler inject query hints only when query has where clause - // See org.hibernate.dialect.hint.IndexQueryHintHandler - where(col(Order::id).`in`(order1.id, order2.id, order3.id)) - sqlHints("idx1") - } - } - - // then - assertThat(purchaserIds).containsOnly(1000) - } - - @Test - fun jpaHint() = runBlocking { - try { - // when - withFactory { queryFactory -> - queryFactory.listQuery { - select(col(Order::purchaserId)) - from(entity(Order::class)) - hints("org.hibernate.comment" to "comment") - } - } - } catch (e: Throwable) { - // then - assertThat(e).hasMessage("Hibernate-reactive does not support JPA query hint yet. if hibernate-reactive setQueryHint method support officially please let us know. we will fix it") - } - } -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/limit/HibernateCriteriaQueryDslLimitIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/limit/HibernateCriteriaQueryDslLimitIntegrationTest.kt deleted file mode 100644 index f6c096525..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/limit/HibernateCriteriaQueryDslLimitIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.limit - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.limit.AbstractCriteriaQueryDslLimitIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslLimitIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslLimitIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/orderby/HibernateCriteriaQueryDslOrderByIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/orderby/HibernateCriteriaQueryDslOrderByIntegrationTest.kt deleted file mode 100644 index f3fa553d4..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/orderby/HibernateCriteriaQueryDslOrderByIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.orderby - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.orderby.AbstractCriteriaQueryDslOrderByIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslOrderByIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslOrderByIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/predicate/HibernateCriteriaQueryDslPredicateIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/predicate/HibernateCriteriaQueryDslPredicateIntegrationTest.kt deleted file mode 100644 index 3ce2ab605..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/predicate/HibernateCriteriaQueryDslPredicateIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.predicate - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.predicate.AbstractCriteriaQueryDslPredicateIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslPredicateIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslPredicateIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/select/HibernateCriteriaQueryDslSelectIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/select/HibernateCriteriaQueryDslSelectIntegrationTest.kt deleted file mode 100644 index b1a82d445..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/select/HibernateCriteriaQueryDslSelectIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.select - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.select.AbstractCriteriaQueryDslSelectIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -class HibernateCriteriaQueryDslSelectIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslSelectIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/set/HibernateCriteriaQueryUpdateDslTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/set/HibernateCriteriaQueryUpdateDslTest.kt deleted file mode 100644 index 2b756c4e1..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/set/HibernateCriteriaQueryUpdateDslTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.set - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.set.AbstractCriteriaQueryDslUpdateByIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -class HibernateCriteriaQueryUpdateDslTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslUpdateByIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/where/HibernateCriteriaQueryDslWhereIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/where/HibernateCriteriaQueryDslWhereIntegrationTest.kt deleted file mode 100644 index be7442ca2..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/integration/querydsl/where/HibernateCriteriaQueryDslWhereIntegrationTest.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.integration.querydsl.where - -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.querydsl.where.AbstractCriteriaQueryDslWhereIntegrationTest -import org.hibernate.reactive.mutiny.Mutiny -import javax.persistence.EntityManagerFactory - -internal class HibernateCriteriaQueryDslWhereIntegrationTest : HibernateCriteriaIntegrationTest, - AbstractCriteriaQueryDslWhereIntegrationTest() { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory -} diff --git a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/query/HibernateMutinyReactiveQueryFactoryIntegrationTest.kt b/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/query/HibernateMutinyReactiveQueryFactoryIntegrationTest.kt deleted file mode 100644 index 2daa3ff17..000000000 --- a/hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/test/reactive/query/HibernateMutinyReactiveQueryFactoryIntegrationTest.kt +++ /dev/null @@ -1,321 +0,0 @@ -package com.linecorp.kotlinjdsl.test.reactive.query - -import com.linecorp.kotlinjdsl.listQuery -import com.linecorp.kotlinjdsl.query.* -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.from.fetch -import com.linecorp.kotlinjdsl.selectQuery -import com.linecorp.kotlinjdsl.singleQuery -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.EntityDsl -import com.linecorp.kotlinjdsl.test.entity.order.Order -import com.linecorp.kotlinjdsl.test.entity.order.OrderGroup -import com.linecorp.kotlinjdsl.test.entity.order.OrderItem -import com.linecorp.kotlinjdsl.test.reactive.HibernateCriteriaIntegrationTest -import com.linecorp.kotlinjdsl.test.reactive.MutinySessionFactoryExtension -import com.linecorp.kotlinjdsl.updateQuery -import io.smallrye.mutiny.coroutines.awaitSuspending -import kotlinx.coroutines.runBlocking -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.EntityManagerFactory - -@ExtendWith(MutinySessionFactoryExtension::class) -class HibernateMutinyReactiveQueryFactoryIntegrationTest : EntityDsl, WithKotlinJdslAssertions, - HibernateCriteriaIntegrationTest { - override lateinit var factory: Mutiny.SessionFactory - override lateinit var entityManagerFactory: EntityManagerFactory - - @Test - fun executeSessionWithFactory() = runBlocking { - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, subqueryCreator = SubqueryCreatorImpl() - ) - val order = order { purchaserId = 5000 } - val actual = queryFactory.withFactory { session, factory -> - session.persist(order).awaitSuspending() - session.flush().awaitSuspending() - - factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(5000)) - } - } - - assertThat(actual.id).isEqualTo(order.id) - Unit - } - - @Test - fun withFactoryMultiOperations() = runBlocking { - val sessionFactory = initFactory() - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = sessionFactory, subqueryCreator = SubqueryCreatorImpl() - ) - val order = order { purchaserId = 5000 } - persist(order) - val actual = queryFactory.withFactory { factory -> - val firstOrder = factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(5000)) - } - - assertThat(firstOrder.id).isEqualTo(order.id) - - factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(5000)) - } - } - - assertThat(actual.id).isEqualTo(order.id) - sessionFactory.close() - } - - @Test - fun listQuery(): Unit = runBlocking { - val order = order {} - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val orders = queryFactory.listQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - } - - assertThat(orders) - .containsExactly(order) - } - - @Test - fun singleQuery(): Unit = runBlocking { - val order = order {} - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val actualOrder = queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).equal(order.id)) - } - - assertThat(actualOrder) - .isEqualTo(order) - } - - @Test - fun singleQueryOrNull(): Unit = runBlocking { - val order = order {} - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val actualOrder = queryFactory.singleQueryOrNull { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).equal(order.id)) - } - - assertThat(actualOrder) - .isEqualTo(order) - } - - @Test - fun `singleQueryOrNull null`(): Unit = runBlocking { - val order = order {} - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val actualOrder = queryFactory.singleQueryOrNull { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).isNull()) - } - - assertThat(actualOrder).isNull() - } - - @Test - fun updateQuery(): Unit = runBlocking { - val order = order {} - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - queryFactory.updateQuery { - where(col(Order::id).equal(order.id)) - set(col(Order::purchaserId), order.purchaserId + 1) - } - - assertThat(queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).equal(order.id)) - }) - .isEqualTo(order.copy(purchaserId = order.purchaserId + 1)) - } - - @Test - fun deleteQuery(): Unit = runBlocking { - val order = order {} - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - queryFactory.deleteQuery { - where(col(OrderItem::id).equal(order.groups.first().items.first().id)) - } - - assertThat(queryFactory.listQuery { - select(entity(OrderItem::class)) - from(entity(OrderItem::class)) - where(col(OrderItem::id).equal(order.groups.first().items.first().id)) - }).isEmpty() - } - - @Test - fun subquery(): Unit = runBlocking { - val orderItem1 = orderItem { } - val orderItem2 = orderItem { } - - val order1 = order { purchaserId = 1000 } - val order2 = order { purchaserId = 1000 } - val order3 = order { - purchaserId = 2000 - groups = hashSetOf(orderGroup { items = hashSetOf(orderItem1, orderItem2) }) - } - persistAll(order1, order2, order3) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val subquery = queryFactory.subquery { - val order = entity(Order::class, "o") - - select(count(col(order, Order::id))) - from(order) - where(col(order, Order::purchaserId).equal(col(Order::purchaserId))) - } - - // then - assertThat(queryFactory.listQuery { - select(subquery) - from(entity(Order::class)) - orderBy(col(Order::id).asc()) - }).isEqualTo(listOf(2L, 2L, 1L)) - } - - @Test - fun testTransaction(): Unit = runBlocking { - val order = order {} - persist(order) - - val producer = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - try { - producer.transactionWithFactory { session, queryFactory -> - session.merge(order).awaitSuspending() - - val orders = queryFactory.listQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - } - - queryFactory.updateQuery { - where(col(Order::id).equal(orders.first().id)) - set(col(Order::purchaserId), orders.first().purchaserId + 1) - }.executeUpdate() - - queryFactory.updateQuery { - throw IllegalStateException("transaction rollback") - }.executeUpdate() - } - } catch (e: IllegalStateException) { - assertThat(e).hasMessage("transaction rollback") - } - - assertThat(producer.transactionWithFactory { queryFactory -> - queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).equal(order.id)) - } - }).isEqualTo(order) - } - - @Test - fun unwrap(): Unit = runBlocking { - val order = order {} - persist(order) - - val factory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val orderItem = factory.withFactory { queryFactory -> - val query: Mutiny.Query = queryFactory.selectQuery { - select(entity(OrderItem::class)) - from(entity(OrderItem::class)) - where(col(OrderItem::id).equal(order.groups.first().items.first().id)) - }.unwrap() - - query.isReadOnly = true - - query.singleResult.awaitSuspending() - } - - assertThat(orderItem.id).isEqualTo(order.groups.first().items.first().id) - } -} diff --git a/hibernate/build.gradle.kts b/hibernate/build.gradle.kts deleted file mode 100644 index 9d650aa0b..000000000 --- a/hibernate/build.gradle.kts +++ /dev/null @@ -1,13 +0,0 @@ -apply() - -dependencies { - api(Modules.core) - - compileOnly(libs.hibernate) - compileOnly(libs.slf4j) - - testImplementation(Modules.core) - testImplementation(Modules.testFixtureIntegration) - testImplementation(libs.hibernate) - testImplementation(libs.h2) -} diff --git a/hibernate/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlQueryHintClause.kt b/hibernate/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlQueryHintClause.kt deleted file mode 100644 index 83405cbdd..000000000 --- a/hibernate/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlQueryHintClause.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import org.slf4j.LoggerFactory -import javax.persistence.Query - -data class HibernateSqlQueryHintClause( - private val queryHints: List -) : SqlQueryHintClause { - companion object { - private val log = LoggerFactory.getLogger(HibernateSqlQueryHintClause::class.java) - } - - override fun apply(query: Query) { - if (queryHints.isEmpty()) return - - val unwrappedQuery = try { - query.unwrap(org.hibernate.query.Query::class.java) - } catch (e: Exception) { - log.error("This query does not support hibernate query hint", e) - null - } - - unwrappedQuery?.run { - queryHints.forEach { addQueryHint(it) } - } - } -} diff --git a/hibernate/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlQueryHintClauseFactoryProvider.kt b/hibernate/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlQueryHintClauseFactoryProvider.kt deleted file mode 100644 index 2d617d288..000000000 --- a/hibernate/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlQueryHintClauseFactoryProvider.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint.hibernate - -import com.linecorp.kotlinjdsl.query.clause.hint.HibernateSqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider -import javax.persistence.Query - -class HibernateSqlQueryHintClauseFactoryProvider : SqlQueryHintClauseFactoryProvider { - override fun factory(): (List) -> SqlQueryHintClause = { HibernateSqlQueryHintClause(it) } -} diff --git a/hibernate/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider b/hibernate/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider deleted file mode 100644 index 7e73a25bc..000000000 --- a/hibernate/src/main/resources/META-INF/services/com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider +++ /dev/null @@ -1 +0,0 @@ -com.linecorp.kotlinjdsl.querydsl.hint.hibernate.HibernateSqlQueryHintClauseFactoryProvider diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateCriteriaDeleteIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateCriteriaDeleteIntegrationTest.kt deleted file mode 100644 index 3f10e2117..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateCriteriaDeleteIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractCriteriaDeleteIntegrationTest - -class HibernateCriteriaDeleteIntegrationTest : AbstractCriteriaDeleteIntegrationTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateFetchDslIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateFetchDslIntegrationTest.kt deleted file mode 100644 index 78c8bb9f7..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateFetchDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractFetchDslTest - -class HibernateFetchDslIntegrationTest : AbstractFetchDslTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateGroupByDslIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateGroupByDslIntegrationTest.kt deleted file mode 100644 index 874774322..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateGroupByDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractGroupByDslTest - -class HibernateGroupByDslIntegrationTest : AbstractGroupByDslTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateJoinDslIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateJoinDslIntegrationTest.kt deleted file mode 100644 index cc6a16d6a..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateJoinDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractJoinDslTest - -class HibernateJoinDslIntegrationTest : AbstractJoinDslTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateLimitDslIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateLimitDslIntegrationTest.kt deleted file mode 100644 index d6af6111a..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateLimitDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractLimitDslTest - -class HibernateLimitDslIntegrationTest : AbstractLimitDslTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateOrderByDslIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateOrderByDslIntegrationTest.kt deleted file mode 100644 index e2a8ceba3..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/criteriaquery/HibernateOrderByDslIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.criteriaquery - -import com.linecorp.kotlinjdsl.test.integration.criteriaquery.AbstractOrderByDslTest - -class HibernateOrderByDslIntegrationTest : AbstractOrderByDslTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/expression/HibernateCriteriaQueryDslExpressionIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/expression/HibernateCriteriaQueryDslExpressionIntegrationTest.kt deleted file mode 100644 index 7e65c13a6..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/expression/HibernateCriteriaQueryDslExpressionIntegrationTest.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.expression - -import com.linecorp.kotlinjdsl.test.integration.querydsl.expression.AbstractCriteriaQueryDslExpressionIntegrationTest - -internal class HibernateCriteriaQueryDslExpressionIntegrationTest : - AbstractCriteriaQueryDslExpressionIntegrationTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/from/HibernateCriteriaQueryDslFromIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/from/HibernateCriteriaQueryDslFromIntegrationTest.kt deleted file mode 100644 index 4b5cc06ac..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/from/HibernateCriteriaQueryDslFromIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.from - -import com.linecorp.kotlinjdsl.test.integration.querydsl.from.AbstractCriteriaQueryDslFromIntegrationTest - -internal class HibernateCriteriaQueryDslFromIntegrationTest : AbstractCriteriaQueryDslFromIntegrationTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/from/HibernateCriteriaQueryDslFromTreatIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/from/HibernateCriteriaQueryDslFromTreatIntegrationTest.kt deleted file mode 100644 index e8ccfb9eb..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/from/HibernateCriteriaQueryDslFromTreatIntegrationTest.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.from - -import com.linecorp.kotlinjdsl.test.integration.querydsl.from.AbstractCriteriaQueryDslFromTreatIntegrationTest -import org.junit.jupiter.api.Test - -/** - * https://discourse.hibernate.org/t/jpa-downcast-criteria-treat-vs-jpql-treat/2231 - * - * This isn't the case in all cases, and if the root and parent entities are the same when downcasting, there's no problem. - * However, if the root and parent entities are different and an attempt to downcast them to a child entity is not used, - * however, an additional join occurs in the query statement. - * In this case, if you treat distinct as in the test example, there is no problem. - */ -internal class HibernateCriteriaQueryDslFromTreatIntegrationTest : AbstractCriteriaQueryDslFromTreatIntegrationTest() { - - /** - * https://discourse.hibernate.org/t/can-fetch-be-used-as-parameter-of-treat-for-downcasting/3301 - * An UnsupportedOperationException is raised when fetching an entity intended for downcasting. - * The solution is to use the method in the link, Criteria API for Hibernate, - * but we use JPA standard Criteria API, so it is difficult to support until Hibernate fixes the bug. - */ - @Test - override fun getProjectsWithSupervisorSalaryEqualBySubqueryFullTimeEmployeesSalaryAndPartTimeEmployeeWeeklySalaryWithFetch() { - assertThatThrownBy { super.getProjectsWithSupervisorSalaryEqualBySubqueryFullTimeEmployeesSalaryAndPartTimeEmployeeWeeklySalaryWithFetch() } - .isInstanceOf(UnsupportedOperationException::class.java) - } -} diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/groupby/HibernateCriteriaQueryDslGroupByIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/groupby/HibernateCriteriaQueryDslGroupByIntegrationTest.kt deleted file mode 100644 index bc40f082a..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/groupby/HibernateCriteriaQueryDslGroupByIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.groupby - -import com.linecorp.kotlinjdsl.test.integration.querydsl.groupby.AbstractCriteriaQueryDslGroupByIntegrationTest - -internal class HibernateCriteriaQueryDslGroupByIntegrationTest : AbstractCriteriaQueryDslGroupByIntegrationTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/having/HibernateCriteriaQueryDslHavingIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/having/HibernateCriteriaQueryDslHavingIntegrationTest.kt deleted file mode 100644 index dfb82bce9..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/having/HibernateCriteriaQueryDslHavingIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.having - -import com.linecorp.kotlinjdsl.test.integration.querydsl.having.AbstractCriteriaQueryDslHavingIntegrationTest - -internal class HibernateCriteriaQueryDslHavingIntegrationTest : AbstractCriteriaQueryDslHavingIntegrationTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/hint/HibernateCriteriaQueryDslHintIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/hint/HibernateCriteriaQueryDslHintIntegrationTest.kt deleted file mode 100644 index 84c33b9f5..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/hint/HibernateCriteriaQueryDslHintIntegrationTest.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.hint - -import com.linecorp.kotlinjdsl.listQuery -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.min -import com.linecorp.kotlinjdsl.test.entity.order.Order -import com.linecorp.kotlinjdsl.test.integration.AbstractCriteriaQueryDslIntegrationTest -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test - -internal class HibernateCriteriaQueryDslHintIntegrationTest : AbstractCriteriaQueryDslIntegrationTest() { - - private val order1 = order { purchaserId = 1000 } - private val order2 = order { purchaserId = 1000 } - private val order3 = order { purchaserId = 2000 } - - @BeforeEach - fun setUp() { - entityManager.persistAll(order1, order2, order3) - entityManager.flushAndClear() - } - - @Test - fun sqlHint() { - // when - val purchaserIds = queryFactory.listQuery { - select(min(Order::purchaserId)) - from(entity(Order::class)) - // Hibernate query hint handler inject query hints only when query has where clause - // See org.hibernate.dialect.hint.IndexQueryHintHandler - where(col(Order::id).`in`(order1.id, order2.id, order3.id)) - sqlHints("idx1") - } - - // then - assertThat(purchaserIds).containsOnly(1000) - } - - @Test - fun jpaHint() { - // when - val purchaserIds = queryFactory.listQuery { - select(col(Order::purchaserId)) - from(entity(Order::class)) - hints("org.hibernate.comment" to "comment") - } - - // then - assertThat(purchaserIds).containsOnly(1000, 2000) - } -} diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/limit/HibernateCriteriaQueryDslLimitIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/limit/HibernateCriteriaQueryDslLimitIntegrationTest.kt deleted file mode 100644 index 5a06e483a..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/limit/HibernateCriteriaQueryDslLimitIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.limit - -import com.linecorp.kotlinjdsl.test.integration.querydsl.limit.AbstractCriteriaQueryDslLimitIntegrationTest - -internal class HibernateCriteriaQueryDslLimitIntegrationTest : AbstractCriteriaQueryDslLimitIntegrationTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/orderby/HibernateCriteriaQueryDslOrderByIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/orderby/HibernateCriteriaQueryDslOrderByIntegrationTest.kt deleted file mode 100644 index 5df61838f..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/orderby/HibernateCriteriaQueryDslOrderByIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.orderby - -import com.linecorp.kotlinjdsl.test.integration.querydsl.orderby.AbstractCriteriaQueryDslOrderByIntegrationTest - -internal class HibernateCriteriaQueryDslOrderByIntegrationTest : AbstractCriteriaQueryDslOrderByIntegrationTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/predicate/HibernateCriteriaQueryDslPredicateIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/predicate/HibernateCriteriaQueryDslPredicateIntegrationTest.kt deleted file mode 100644 index b1cbe56e9..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/predicate/HibernateCriteriaQueryDslPredicateIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.predicate - -import com.linecorp.kotlinjdsl.test.integration.querydsl.predicate.AbstractCriteriaQueryDslPredicateIntegrationTest - -internal class HibernateCriteriaQueryDslPredicateIntegrationTest : AbstractCriteriaQueryDslPredicateIntegrationTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/select/HibernateCriteriaQueryDslSelectIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/select/HibernateCriteriaQueryDslSelectIntegrationTest.kt deleted file mode 100644 index 649e80503..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/select/HibernateCriteriaQueryDslSelectIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.select - -import com.linecorp.kotlinjdsl.test.integration.querydsl.select.AbstractCriteriaQueryDslSelectIntegrationTest - -class HibernateCriteriaQueryDslSelectIntegrationTest : AbstractCriteriaQueryDslSelectIntegrationTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/set/HibernateCriteriaQueryUpdateDslTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/set/HibernateCriteriaQueryUpdateDslTest.kt deleted file mode 100644 index 9c3be5f70..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/set/HibernateCriteriaQueryUpdateDslTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.set - -import com.linecorp.kotlinjdsl.test.integration.querydsl.set.AbstractCriteriaQueryDslUpdateByIntegrationTest - -class HibernateCriteriaQueryUpdateDslTest : AbstractCriteriaQueryDslUpdateByIntegrationTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/where/HibernateCriteriaQueryDslWhereIntegrationTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/where/HibernateCriteriaQueryDslWhereIntegrationTest.kt deleted file mode 100644 index 3e11243b3..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/hibernate/integration/querydsl/where/HibernateCriteriaQueryDslWhereIntegrationTest.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.hibernate.integration.querydsl.where - -import com.linecorp.kotlinjdsl.test.integration.querydsl.where.AbstractCriteriaQueryDslWhereIntegrationTest - -internal class HibernateCriteriaQueryDslWhereIntegrationTest : AbstractCriteriaQueryDslWhereIntegrationTest() diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlQueryHintClauseTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlQueryHintClauseTest.kt deleted file mode 100644 index 1f14467fe..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/HibernateSqlQueryHintClauseTest.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertDoesNotThrow -import org.hibernate.query.Query as HibernateQuery -internal class HibernateSqlQueryHintClauseTest { - private val sut = HibernateSqlQueryHintClause(listOf("hint")) - - @Test - fun applyNormally() { - val query = mockk>() - every { query.addQueryHint("hint") } returns query - every { query.unwrap(HibernateQuery::class.java) } returns query - - assertDoesNotThrow { sut.apply(query) } - - verify { - query.addQueryHint("hint") - query.unwrap(HibernateQuery::class.java) - } - } - - @Test - fun `apply nothing if query is not HibernateQuery`() { - val query = mockk> { - every { unwrap(HibernateQuery::class.java) } throws IllegalArgumentException() - } - - assertDoesNotThrow { sut.apply(query) } - - verify { - query.unwrap(HibernateQuery::class.java) - } - } -} diff --git a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlQueryHintClauseFactoryProviderTest.kt b/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlQueryHintClauseFactoryProviderTest.kt deleted file mode 100644 index a4bc7eecb..000000000 --- a/hibernate/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/hibernate/HibernateSqlQueryHintClauseFactoryProviderTest.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint.hibernate - -import com.linecorp.kotlinjdsl.query.clause.hint.HibernateSqlQueryHintClause -import com.linecorp.kotlinjdsl.querydsl.hint.SqlQueryHintClauseFactoryProvider -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test - -internal class HibernateSqlQueryHintClauseFactoryProviderTest : WithAssertions { - - @Test - fun test() { - assertThat(SqlQueryHintClauseFactoryProvider.loadedFactory?.invoke(listOf("test"))).isInstanceOf( - HibernateSqlQueryHintClause::class.java - ) - } -} diff --git a/hibernate/src/test/resources/META-INF/persistence.xml b/hibernate/src/test/resources/META-INF/persistence.xml deleted file mode 100644 index e0cdda06c..000000000 --- a/hibernate/src/test/resources/META-INF/persistence.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - com.linecorp.kotlinjdsl.test.entity.employee.ContractEmployee - com.linecorp.kotlinjdsl.test.entity.employee.Employee - com.linecorp.kotlinjdsl.test.entity.employee.FullTimeEmployee - com.linecorp.kotlinjdsl.test.entity.employee.PartTimeEmployee - com.linecorp.kotlinjdsl.test.entity.employee.Project - - com.linecorp.kotlinjdsl.test.entity.Address - - com.linecorp.kotlinjdsl.test.entity.order.Order - com.linecorp.kotlinjdsl.test.entity.order.OrderGroup - com.linecorp.kotlinjdsl.test.entity.order.OrderItem - com.linecorp.kotlinjdsl.test.entity.order.OrderAddress - - com.linecorp.kotlinjdsl.test.entity.delivery.Delivery - com.linecorp.kotlinjdsl.test.entity.delivery.DeliveryItem - com.linecorp.kotlinjdsl.test.entity.delivery.DeliveryAddress - com.linecorp.kotlinjdsl.test.entity.test.TestTable - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/libs.versions.toml b/libs.versions.toml index 54f6202b9..cbe73dc70 100644 --- a/libs.versions.toml +++ b/libs.versions.toml @@ -4,6 +4,7 @@ spring-core = "5.3.26" spring-core6 = "6.0.7" spring-boot = "2.7.10" spring-boot3 = "3.0.5" +spring-data-core = "3.1.0" spring-data-jpa = "2.7.10" spring-data-jpa3 = "3.0.4" coroutine = "1.6.4" @@ -17,7 +18,7 @@ kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect" } # Common java-persistence-api = { module = "javax.persistence:javax.persistence-api", version = "2.2" } -jakarta-persistence-api = { module = "jakarta.persistence:jakarta.persistence-api", version = "3.1.0"} +jakarta-persistence-api = { module = "jakarta.persistence:jakarta.persistence-api", version = "3.0.0" } slf4j = { module = "org.slf4j:slf4j-api", version = "2.0.7" } logback = { module = "ch.qos.logback:logback-classic", version = "1.2.11" } hibernate6 = { module = "org.hibernate:hibernate-core", version = "6.2.0.Final" } @@ -31,6 +32,7 @@ agroal-pool = { module = "io.agroal:agroal-pool", version = "2.1" } vertx-jdbc-client = { module = "io.vertx:vertx-jdbc-client", version = "4.4.1" } coroutine-jdk8 = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-jdk8", version.ref = "coroutine" } coroutine-reactor = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-reactor", version.ref = "coroutine" } +jsqlparser = { module = "com.github.jsqlparser:jsqlparser", version = "4.5" } # SpringBoot spring-boot-starter = { module = "org.springframework.boot:spring-boot-starter", version.ref = "spring-boot" } @@ -48,13 +50,16 @@ spring-boot3-configuration-processor = { module = "org.springframework.boot:spri spring-boot3-bom = { module = "org.springframework.boot:spring-boot-dependencies", version.ref = "spring-boot3" } spring-boot3-web = { module = "org.springframework.boot:spring-boot-starter-web", version.ref = "spring-boot3" } spring-boot3-webflux = { module = "org.springframework.boot:spring-boot-starter-webflux", version.ref = "spring-boot3" } +spring-boot3-jdbc = { module = "org.springframework.boot:spring-boot-starter-data-jdbc", version.ref = "spring-boot3" } spring-boot3-jpa = { module = "org.springframework.boot:spring-boot-starter-data-jpa", version.ref = "spring-boot3" } spring-boot3-test = { module = "org.springframework.boot:spring-boot-starter-test", version.ref = "spring-boot3" } # Spring spring-core = { module = "org.springframework:spring-core", version.ref = "spring-core" } spring-beans = { module = "org.springframework:spring-beans", version.ref = "spring-core" } +spring-data-core = { module = "org.springframework.data:spring-data-commons", version.ref = "spring-data-core" } spring-jpa = { module = "org.springframework.data:spring-data-jpa", version.ref = "spring-data-jpa" } +spring-jdbc = { module = "org.springframework:spring-jdbc", version = "6.0.7" } spring-batch-infrastructure = { module = "org.springframework.batch:spring-batch-infrastructure", version = "4.3.8" } spring6-core = { module = "org.springframework:spring-core", version.ref = "spring-core6" } @@ -82,3 +87,4 @@ spring-boot3 = { id = "org.springframework.boot", version.ref = "spring-boot3" } kotlin-allopen = { id = "org.jetbrains.kotlin.plugin.allopen", version.ref = "kotlin" } kotlin-noarg = { id = "org.jetbrains.kotlin.plugin.noarg", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } +kover = { id = "org.jetbrains.kotlinx.kover", version = "0.7.1" } diff --git a/package.json b/package.json index 1a4764f3b..d4603d621 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "jdsl-commitlint-node-package", "devDependencies": { - "@commitlint/cli": "17.5.1", - "@commitlint/config-conventional": "17.4.4" + "@commitlint/cli": "17.6.6", + "@commitlint/config-conventional": "17.6.6" } -} \ No newline at end of file +} diff --git a/query-jakarta/build.gradle.kts b/query-jakarta/build.gradle.kts deleted file mode 100644 index fc3c24d09..000000000 --- a/query-jakarta/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -apply() - -dependencies { - compileOnly(libs.jakarta.persistence.api) - compileOnly(libs.slf4j) - compileOnly(libs.hibernate6) - - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntity) - testImplementation(libs.jakarta.persistence.api) - testImplementation(libs.hibernate6) - testImplementation(libs.h2) -} - -coverage { - exclude(project) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaDeleteQuerySpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaDeleteQuerySpec.kt deleted file mode 100644 index ec977a148..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaDeleteQuerySpec.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaDeleteQuerySpec { - val targetEntity: Class - val from: FromClause - val associate: SimpleAssociatedJoinClause - val where: CriteriaQueryWhereClause - val jpaHint: JpaQueryHintClause - val sqlHint: SqlQueryHintClause -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaQuerySpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaQuerySpec.kt deleted file mode 100644 index d9750f590..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaQuerySpec.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaQuerySpec { - val select: CriteriaQuerySelectClause - val from: FromClause<*> - val join: JoinClause - val where: CriteriaQueryWhereClause - val groupBy: CriteriaQueryGroupByClause - val having: CriteriaQueryHavingClause - val orderBy: CriteriaQueryOrderByClause - val limit: QueryLimitClause - val jpaHint: JpaQueryHintClause - val sqlHint: SqlQueryHintClause -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaUpdateQuerySpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaUpdateQuerySpec.kt deleted file mode 100644 index 0f554bab1..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaUpdateQuerySpec.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaUpdateQuerySpec { - val targetEntity: Class - val from: FromClause - val associate: SimpleAssociatedJoinClause - val where: CriteriaQueryWhereClause - val jpaHint: JpaQueryHintClause - val sqlHint: SqlQueryHintClause - val set: SetClause -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/SubquerySpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/SubquerySpec.kt deleted file mode 100644 index 4306f80d2..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/SubquerySpec.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.SubqueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.SubqueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.select.SubquerySelectClause -import com.linecorp.kotlinjdsl.query.clause.where.SubqueryWhereClause - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SubquerySpec { - val select: SubquerySelectClause - val from: FromClause<*> - val join: JoinClause - val where: SubqueryWhereClause - val groupBy: SubqueryGroupByClause - val having: SubqueryHavingClause -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/FromClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/FromClause.kt deleted file mode 100644 index 2f7f1f7e2..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/FromClause.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.from - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import jakarta.persistence.criteria.AbstractQuery -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaDelete -import jakarta.persistence.criteria.CriteriaUpdate - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class FromClause( - private val entity: EntitySpec, -) { - fun join(joinClause: JoinClause, query: AbstractQuery<*>, criteriaBuilder: CriteriaBuilder): Froms { - return Joiner(entity, joinClause.joins, query, criteriaBuilder).joinAll() - } - - fun associate(joinClause: SimpleAssociatedJoinClause, query: CriteriaUpdate): Froms { - return SimpleAssociator(entity, joinClause.joins, query.from(entity.type)).associateAll() - } - - fun associate(joinClause: SimpleAssociatedJoinClause, query: CriteriaDelete): Froms { - return SimpleAssociator(entity, joinClause.joins, query.from(entity.type)).associateAll() - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/JoinClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/JoinClause.kt deleted file mode 100644 index b6b55d1b5..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/JoinClause.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.from - -import com.linecorp.kotlinjdsl.query.spec.JoinSpec - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class JoinClause( - val joins: List>, -) diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/Joiner.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/Joiner.kt deleted file mode 100644 index b82be6d3a..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/Joiner.kt +++ /dev/null @@ -1,171 +0,0 @@ -@file:Suppress("UNCHECKED_CAST") - -package com.linecorp.kotlinjdsl.query.clause.from - -import com.linecorp.kotlinjdsl.query.spec.* -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import java.util.* -import jakarta.persistence.criteria.* - -// In the case of Treat, Type should be clearly treated as a parent/child relationship, -// but it was used because it needed a parent/child relationship that can be cast forcibly due to the current structure that receives JoinSpec as *. -// Since it is used only internally, it is declared as a private alias. -private typealias ExplicitErasedParent = Number -private typealias ExplicitErasedChild = Int - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -class Joiner( - fromEntity: EntitySpec<*>, - joins: Collection>, - private val query: AbstractQuery<*>, - private val criteriaBuilder: CriteriaBuilder -) { - private val root: Root<*> = query.from(fromEntity.type) - - private val realized: LinkedHashMap, From<*, *>> = linkedMapOf(fromEntity to root) - private val realizedListeners: LinkedHashMap, LinkedList<() -> Unit>> = linkedMapOf() - - init { - joins.asSequence() - .sortedWith(joinSpecComparator) - .filter { !realized.contains(it.entity) } - .forEach { spec -> - when (spec) { - is CrossJoinSpec<*> -> realize(spec) - is TreatJoinSpec<*, *> -> treat(spec) - is AssociatedJoinSpec<*, *> -> { - if (!realized.contains(spec.left)) { - realizeLazy(spec) - } else { - realize(spec) - } - } - } - } - } - - private fun realizeLazy(spec: AssociatedJoinSpec<*, *>) { - realizedListeners.computeIfAbsent(spec.left) { LinkedList() }.add { - if (!realized.contains(spec.right)) { - realize(spec) - } - } - } - - private fun realize(spec: AssociatedJoinSpec<*, *>) { - realize(spec.right) { join(spec) } - } - - private fun realize(spec: CrossJoinSpec<*>) { - realize(spec.entity) { query.from(spec.entity.type) } - } - - private fun realize(entity: EntitySpec<*>, join: () -> From<*, *>) { - realized[entity] = join() - realizedListeners.remove(entity)?.run { - this.forEach { it() } - } - } - - private fun join(spec: AssociatedJoinSpec<*, *>): From<*, *> = - when (spec) { - is SimpleJoinSpec, is SimpleAssociatedJoinSpec -> - realized.getValue(spec.left).join(spec.path, spec.joinType) - is FetchJoinSpec -> - realized.getValue(spec.left).fetch(spec.path, spec.joinType) - else -> throw IllegalArgumentException() - } as From<*, *> - - private fun treat(spec: TreatJoinSpec<*, *>) { - realized[spec.right] = when (spec.root.entity == spec.left && spec.root.entity.type == root.javaType) { - true -> criteriaBuilder.treat( - root as Root, - spec.right.type as Class - ) - false -> { - val join = realized.computeIfAbsent(spec.left) { - realized.getValue(spec.root.entity) - .join(spec.path, spec.joinType) - } as Join - - when (join) { - is ListJoin -> criteriaBuilder.treat( - join, - spec.right.type as Class - ) - is CollectionJoin -> criteriaBuilder.treat( - join, - spec.right.type as Class - ) - is SetJoin -> criteriaBuilder.treat( - join, - spec.right.type as Class - ) - is MapJoin -> criteriaBuilder.treat( - join, - spec.right.type as Class - ) - else -> criteriaBuilder.treat( - join, - spec.right.type as Class - ) - } - } - } as From<*, *> - } - - fun joinAll(): Froms { - if (realizedListeners.isNotEmpty()) { - throw IllegalStateException( - "Join clause is incomplete. Please check if the following Entities are joined. " + - "Entities: ${realizedListeners.keys}" - ) - } - - return Froms( - root = root, - map = realized - ) - } - - companion object { - private val fetchJoinFirstComparator: Comparator> = Comparator { o1, o2 -> - when { - o1::class == o2::class -> 0 - o1 is FetchJoinSpec<*, *> -> -1 - else -> 1 - } - } - - private val outerJoinFirstComparator: Comparator> = Comparator { o1, o2 -> - when { - o1 is TreatJoinSpec<*, *> && o2 !is TreatJoinSpec<*, *> -> 1 - o1 !is TreatJoinSpec<*, *> && o2 is TreatJoinSpec<*, *> -> -1 - o1 is CrossJoinSpec<*> -> -1 - o2 is CrossJoinSpec<*> -> 1 - o1 is AssociatedJoinSpec<*, *> && o1.joinType.isOuterJoin() -> -1 - o2 is AssociatedJoinSpec<*, *> && o2.joinType.isOuterJoin() -> 1 - else -> 0 - } - } - - private val treatJoinOuterFirstComparator = Comparator> { o1, o2 -> - when { - o1 is TreatJoinSpec<* ,*> && o1.joinType.isOuterJoin() -> -1 - o2 is TreatJoinSpec<* ,*> && o2.joinType.isOuterJoin() -> -1 - else -> 0 - } - } - - private val joinSpecComparator = - fetchJoinFirstComparator.thenComparing(outerJoinFirstComparator).thenComparing(treatJoinOuterFirstComparator) - - private fun JoinType.isOuterJoin(): Boolean { - return this === JoinType.LEFT || this === JoinType.RIGHT - } - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/SimpleAssociatedJoinClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/SimpleAssociatedJoinClause.kt deleted file mode 100644 index e567d4b34..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/SimpleAssociatedJoinClause.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.from - -import com.linecorp.kotlinjdsl.query.spec.SimpleAssociatedJoinSpec - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -@JvmInline -value class SimpleAssociatedJoinClause(val joins: List>) diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/SimpleAssociator.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/SimpleAssociator.kt deleted file mode 100644 index 230fdc246..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/SimpleAssociator.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.from - -import com.linecorp.kotlinjdsl.query.spec.AssociatedJoinSpec -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.SimpleAssociatedJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import java.util.* -import jakarta.persistence.criteria.Path -import jakarta.persistence.criteria.Root - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -class SimpleAssociator( - fromEntity: EntitySpec<*>, - associates: Collection>, - private val root: Root<*> -) { - private val realized: LinkedHashMap, Path<*>> = linkedMapOf(fromEntity to root) - private val realizedListeners: LinkedHashMap, LinkedList<() -> Unit>> = linkedMapOf() - - init { - associates.asSequence() - .filter { !realized.contains(it.entity) } - .forEach { - if (!realized.contains(it.left)) { - realizeLazy(it) - } else { - realize(it) - } - } - } - - private fun realizeLazy(spec: AssociatedJoinSpec<*, *>) { - realizedListeners.computeIfAbsent(spec.left) { LinkedList() }.add { - if (!realized.contains(spec.right)) { - realize(spec) - } - } - } - - private fun realize(spec: AssociatedJoinSpec<*, *>) { - realize(spec.right) { associate(spec) } - } - - private fun realize(entity: EntitySpec<*>, associate: () -> Path<*>) { - realized[entity] = associate() - realizedListeners.remove(entity)?.run { - this.forEach { it() } - } - } - - private fun associate(spec: AssociatedJoinSpec<*, *>): Path<*> = - realized.getValue(spec.left).get(spec.path) - - fun associateAll(): Froms { - if (realizedListeners.isNotEmpty()) { - throw IllegalStateException( - "Associate clause is incomplete. Please check if the following Entities are associated. " + - "Entities: ${realizedListeners.keys}" - ) - } - - return Froms( - root = root, - map = realized - ) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/CriteriaQueryGroupByClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/CriteriaQueryGroupByClause.kt deleted file mode 100644 index 5ac69adcd..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/CriteriaQueryGroupByClause.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.groupby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaQueryGroupByClause { - fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/GroupByClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/GroupByClause.kt deleted file mode 100644 index 093b1cfd5..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/GroupByClause.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.groupby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.AbstractQuery -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class GroupByClause( - private val expressions: List>, -) : CriteriaQueryGroupByClause, SubqueryGroupByClause { - override fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) { - applyInternally(froms, query, criteriaBuilder) - } - - override fun apply(froms: Froms, query: Subquery<*>, criteriaBuilder: CriteriaBuilder) { - applyInternally(froms, query, criteriaBuilder) - } - - private fun applyInternally(froms: Froms, query: AbstractQuery<*>, criteriaBuilder: CriteriaBuilder) { - if (expressions.isEmpty()) return - - query.groupBy(expressions.map { it.toCriteriaExpression(froms, query, criteriaBuilder) }) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/SubqueryGroupByClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/SubqueryGroupByClause.kt deleted file mode 100644 index 01831d68c..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/SubqueryGroupByClause.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.groupby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SubqueryGroupByClause { - fun apply(froms: Froms, query: Subquery<*>, criteriaBuilder: CriteriaBuilder) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/CriteriaQueryHavingClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/CriteriaQueryHavingClause.kt deleted file mode 100644 index 9bf3cd8fc..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/CriteriaQueryHavingClause.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.having - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaQueryHavingClause { - fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/HavingClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/HavingClause.kt deleted file mode 100644 index ef808beb3..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/HavingClause.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.having - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import jakarta.persistence.criteria.AbstractQuery -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class HavingClause( - private val predicate: PredicateSpec, -) : CriteriaQueryHavingClause, SubqueryHavingClause { - override fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) { - applyInternally(froms, query, criteriaBuilder) - } - - override fun apply(froms: Froms, query: Subquery<*>, criteriaBuilder: CriteriaBuilder) { - applyInternally(froms, query, criteriaBuilder) - } - - private fun applyInternally(froms: Froms, query: AbstractQuery<*>, criteriaBuilder: CriteriaBuilder) { - if (predicate.isEmpty()) return - - query.having(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/SubqueryHavingClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/SubqueryHavingClause.kt deleted file mode 100644 index d8c407caf..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/SubqueryHavingClause.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.having - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SubqueryHavingClause { - fun apply(froms: Froms, query: Subquery<*>, criteriaBuilder: CriteriaBuilder) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClause.kt deleted file mode 100644 index 486510264..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClause.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface JpaQueryHintClause { - fun apply(query: Q) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/SqlQueryHintClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/SqlQueryHintClause.kt deleted file mode 100644 index 0c761a763..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/SqlQueryHintClause.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SqlQueryHintClause { - fun apply(query: Q) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/QueryLimitClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/QueryLimitClause.kt deleted file mode 100644 index d97b1b74b..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/QueryLimitClause.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.limit - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface QueryLimitClause { - fun apply(query: Q) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/CriteriaQueryOrderByClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/CriteriaQueryOrderByClause.kt deleted file mode 100644 index f94accef5..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/CriteriaQueryOrderByClause.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaQueryOrderByClause { - fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/OrderByClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/OrderByClause.kt deleted file mode 100644 index fcffa7644..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/OrderByClause.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class OrderByClause( - private val orders: List, -) : CriteriaQueryOrderByClause { - companion object { - val empty = OrderByClause(emptyList()) - } - - override fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) { - if (orders.isEmpty()) return - - query.orderBy(orders.flatMap { it.toCriteriaOrder(froms, query, criteriaBuilder) }) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountMultiSelectClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountMultiSelectClause.kt deleted file mode 100644 index 8cc9dd161..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountMultiSelectClause.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class CountMultiSelectClause( - private val distinct: Boolean, - private val expressions: List>, -) : CriteriaQuerySelectClause { - override val returnType: Class = Long::class.java - - override fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) { - if (distinct) { - throw IllegalStateException( - "Count distinct does not support multiple columns. Please remove distinct in selection" - ) - } - - query.select(criteriaBuilder.count(criteriaBuilder.literal(1))) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountSingleSelectClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountSingleSelectClause.kt deleted file mode 100644 index 8f79bc948..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountSingleSelectClause.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class CountSingleSelectClause( - private val distinct: Boolean, - private val expression: ExpressionSpec<*>, -) : CriteriaQuerySelectClause { - override val returnType: Class = Long::class.java - - override fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) { - val criteriaExpression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - if (distinct) { - query.select(criteriaBuilder.countDistinct(criteriaExpression)) - } else { - query.select(criteriaBuilder.count(criteriaExpression)) - } - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CriteriaQuerySelectClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CriteriaQuerySelectClause.kt deleted file mode 100644 index c556004eb..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CriteriaQuerySelectClause.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaQuerySelectClause { - val returnType: Class - - fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/MultiSelectClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/MultiSelectClause.kt deleted file mode 100644 index bec0bf334..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/MultiSelectClause.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class MultiSelectClause( - override val returnType: Class, - val distinct: Boolean, - val expressions: List>, -) : CriteriaQuerySelectClause { - override fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) { - val criteriaExpression = criteriaBuilder.construct( - returnType, - *expressions.map { it.toCriteriaExpression(froms, query, criteriaBuilder) }.toTypedArray() - ) - - query.select(criteriaExpression).distinct(distinct) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SingleSelectClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SingleSelectClause.kt deleted file mode 100644 index 889ba16fc..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SingleSelectClause.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Expression -import jakarta.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class SingleSelectClause( - override val returnType: Class, - val distinct: Boolean, - val expression: ExpressionSpec, -) : CriteriaQuerySelectClause, SubquerySelectClause { - override fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) { - query - .select(expression.toCriteriaExpression(froms, query, criteriaBuilder)) - .distinct(distinct) - } - - @Suppress("UNCHECKED_CAST") - override fun apply(froms: Froms, query: Subquery, criteriaBuilder: CriteriaBuilder) { - query - .select(expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression) - .distinct(distinct) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SubquerySelectClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SubquerySelectClause.kt deleted file mode 100644 index dd6e537fd..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SubquerySelectClause.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SubquerySelectClause { - val returnType: Class - - fun apply(froms: Froms, query: Subquery, criteriaBuilder: CriteriaBuilder) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/set/SetClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/set/SetClause.kt deleted file mode 100644 index 5220b27f2..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/set/SetClause.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.set - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaUpdate -import jakarta.persistence.criteria.Path - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class SetClause(private val params: Map, Any?>) { - fun apply(froms: Froms, query: CriteriaUpdate<*>, criteriaBuilder: CriteriaBuilder) { - params.forEach { - @Suppress("UNCHECKED_CAST") - query.set( - it.key.toCriteriaExpression(froms, query, criteriaBuilder) as Path, - it.value - ) - } - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/CriteriaQueryWhereClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/CriteriaQueryWhereClause.kt deleted file mode 100644 index 6129227e8..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/CriteriaQueryWhereClause.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.where - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaDelete -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.CriteriaUpdate - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaQueryWhereClause { - fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) - fun apply(froms: Froms, query: CriteriaUpdate, criteriaBuilder: CriteriaBuilder) - fun apply(froms: Froms, query: CriteriaDelete, criteriaBuilder: CriteriaBuilder) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/SubqueryWhereClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/SubqueryWhereClause.kt deleted file mode 100644 index d264e2789..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/SubqueryWhereClause.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.where - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SubqueryWhereClause { - fun apply(froms: Froms, query: Subquery<*>, criteriaBuilder: CriteriaBuilder) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/WhereClause.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/WhereClause.kt deleted file mode 100644 index 31af6e62c..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/WhereClause.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.where - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import jakarta.persistence.criteria.* - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class WhereClause( - private val predicate: PredicateSpec -) : CriteriaQueryWhereClause, SubqueryWhereClause { - override fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) { - applyInternally(froms, query, criteriaBuilder) - } - - override fun apply(froms: Froms, query: CriteriaUpdate, criteriaBuilder: CriteriaBuilder) { - if (predicate.isEmpty()) return - - query.where(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } - - override fun apply(froms: Froms, query: CriteriaDelete, criteriaBuilder: CriteriaBuilder) { - if (predicate.isEmpty()) return - - query.where(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } - - override fun apply(froms: Froms, query: Subquery<*>, criteriaBuilder: CriteriaBuilder) { - applyInternally(froms, query, criteriaBuilder) - } - - private fun applyInternally(froms: Froms, query: AbstractQuery<*>, criteriaBuilder: CriteriaBuilder) { - if (predicate.isEmpty()) return - - query.where(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/JpaCriteriaQueryBuilder.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/JpaCriteriaQueryBuilder.kt deleted file mode 100644 index cc5b801a3..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/JpaCriteriaQueryBuilder.kt +++ /dev/null @@ -1,65 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaDelete -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.CriteriaUpdate - -object JpaCriteriaQueryBuilder { - fun createQuery( - spec: CriteriaQuerySpec, - criteriaBuilder: CriteriaBuilder, - queryBuilder: (CriteriaQuery) -> Q - ): Q { - val query: CriteriaQuery = criteriaBuilder.createQuery(spec.select.returnType) - val froms = spec.from.join(spec.join, query, criteriaBuilder) - - spec.select.apply(froms, query, criteriaBuilder) - spec.where.apply(froms, query, criteriaBuilder) - spec.groupBy.apply(froms, query, criteriaBuilder) - spec.having.apply(froms, query, criteriaBuilder) - spec.orderBy.apply(froms, query, criteriaBuilder) - - return queryBuilder(query).apply { - spec.limit.apply(this) - spec.jpaHint.apply(this) - spec.sqlHint.apply(this) - } - } - - fun createQuery( - spec: CriteriaUpdateQuerySpec, - criteriaBuilder: CriteriaBuilder, - queryBuilder: (CriteriaUpdate) -> Q - ): Q { - val createCriteriaUpdate = criteriaBuilder.createCriteriaUpdate(spec.targetEntity) - val froms = spec.from.associate(spec.associate, createCriteriaUpdate) - - spec.where.apply(froms, createCriteriaUpdate, criteriaBuilder) - spec.set.apply(froms, createCriteriaUpdate, criteriaBuilder) - - return queryBuilder(createCriteriaUpdate).apply { - spec.jpaHint.apply(this) - spec.sqlHint.apply(this) - } - } - - fun createQuery( - spec: CriteriaDeleteQuerySpec, - criteriaBuilder: CriteriaBuilder, - queryBuilder: (CriteriaDelete) -> Q - ): Q { - val createCriteriaDelete = criteriaBuilder.createCriteriaDelete(spec.targetEntity) - val froms = spec.from.associate(spec.associate, createCriteriaDelete) - - spec.where.apply(froms, createCriteriaDelete, criteriaBuilder) - - return queryBuilder(createCriteriaDelete).apply { - spec.jpaHint.apply(this) - spec.sqlHint.apply(this) - } - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreator.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreator.kt deleted file mode 100644 index 7c8e79aa8..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreator.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.SubquerySpec -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.CommonAbstractCriteria -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SubqueryCreator { - fun createQuery( - spec: SubquerySpec, - froms: Froms, - criteria: CommonAbstractCriteria, - criteriaBuilder: CriteriaBuilder - ): Subquery -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreatorImpl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreatorImpl.kt deleted file mode 100644 index 48b8a1160..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreatorImpl.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.SubquerySpec -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.CommonAbstractCriteria -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.Subquery - -class SubqueryCreatorImpl : SubqueryCreator { - override fun createQuery( - spec: SubquerySpec, - froms: Froms, - criteria: CommonAbstractCriteria, - criteriaBuilder: CriteriaBuilder - ): Subquery { - val subquery = criteria.subquery(spec.select.returnType) - val subqueryFroms = spec.from.join(spec.join, subquery, criteriaBuilder) + froms - - spec.select.apply(subqueryFroms, subquery, criteriaBuilder) - spec.where.apply(subqueryFroms, subquery, criteriaBuilder) - spec.groupBy.apply(subqueryFroms, subquery, criteriaBuilder) - spec.having.apply(subqueryFroms, subquery, criteriaBuilder) - - return subquery - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/ExpressionOrderSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/ExpressionOrderSpec.kt deleted file mode 100644 index a6006f8c5..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/ExpressionOrderSpec.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Order - -data class ExpressionOrderSpec( - private val expression: ExpressionSpec<*>, - private val ascending: Boolean, -) : OrderSpec { - override fun toCriteriaOrder( - froms: Froms, - criteriaQuery: CriteriaQuery<*>, - criteriaBuilder: CriteriaBuilder - ): List = listOf( - if (ascending) { - criteriaBuilder.asc(expression.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder)) - } else { - criteriaBuilder.desc(expression.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder)) - } - ) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/Froms.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/Froms.kt deleted file mode 100644 index a9cdefaf0..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/Froms.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec - -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import jakarta.persistence.criteria.Path -import jakarta.persistence.criteria.Root - -class Froms internal constructor( - val root: Root<*>, - private val map: Map, Path<*>> -) { - @Suppress("UNCHECKED_CAST") - operator fun get(key: EntitySpec): Path = - map[key] as? Path - ?: throw IllegalStateException("There is no $key in from or join clause. contains: ${map.keys}") - - operator fun plus(other: Froms): Froms { - val duplicatedEntities = map.keys.intersect(other.map.keys) - - if (duplicatedEntities.isNotEmpty()) { - throw IllegalStateException( - "Other froms has duplicated entitySpec. Please alias the duplicated entities: $duplicatedEntities" - ) - } - - return Froms(root, map + other.map) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/JoinSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/JoinSpec.kt deleted file mode 100644 index 07ce77e52..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/JoinSpec.kt +++ /dev/null @@ -1,53 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec - -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import jakarta.persistence.criteria.JoinType - -sealed interface JoinSpec { - val entity: EntitySpec -} - -sealed interface AssociatedJoinSpec : JoinSpec { - val left: EntitySpec - val right: EntitySpec - val path: String - val joinType: JoinType - - override val entity get() = right -} - -data class SimpleAssociatedJoinSpec( - override val left: EntitySpec, - override val right: EntitySpec, - override val path: String -) : AssociatedJoinSpec { - override val joinType: JoinType = JoinType.INNER -} - -data class SimpleJoinSpec( - override val left: EntitySpec, - override val right: EntitySpec, - override val path: String, - override val joinType: JoinType -) : AssociatedJoinSpec - -data class FetchJoinSpec( - override val left: EntitySpec, - override val right: EntitySpec, - override val path: String, - override val joinType: JoinType -) : AssociatedJoinSpec - -data class CrossJoinSpec( - override val entity: EntitySpec, -) : JoinSpec - -data class TreatJoinSpec( - override val left: EntitySpec

, - override val right: EntitySpec, - override val joinType: JoinType, - val root: ColumnSpec<*> -) : AssociatedJoinSpec { - override val path: String = root.path -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/OrderSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/OrderSpec.kt deleted file mode 100644 index c8d15a4d5..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/OrderSpec.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec - -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Order - -interface OrderSpec { - fun toCriteriaOrder( - froms: Froms, - criteriaQuery: CriteriaQuery<*>, - criteriaBuilder: CriteriaBuilder, - ): List -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpec.kt deleted file mode 100644 index feb243a34..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpec.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class AvgSpec( - private val expression: ExpressionSpec -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.avg(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.avg(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.avg(expression) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CaseSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CaseSpec.kt deleted file mode 100644 index 4f8fd8aab..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CaseSpec.kt +++ /dev/null @@ -1,60 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import jakarta.persistence.criteria.* - -data class CaseSpec( - private val whens: List>, - private val `else`: ExpressionSpec, -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return criteriaBuilder.selectCase().apply { - whens.forEach { - `when`( - it.predicate.toCriteriaPredicate(froms, query, criteriaBuilder), - it.result.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - }.otherwise(`else`.toCriteriaExpression(froms, query, criteriaBuilder)) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return criteriaBuilder.selectCase().apply { - whens.forEach { - `when`( - it.predicate.toCriteriaPredicate(froms, query, criteriaBuilder), - it.result.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - }.otherwise(`else`.toCriteriaExpression(froms, query, criteriaBuilder)) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return criteriaBuilder.selectCase().apply { - whens.forEach { - `when`( - it.predicate.toCriteriaPredicate(froms, query, criteriaBuilder), - it.result.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - }.otherwise(`else`.toCriteriaExpression(froms, query, criteriaBuilder)) - } - - data class WhenSpec( - val predicate: PredicateSpec, - val result: ExpressionSpec, - ) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ColumnSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ColumnSpec.kt deleted file mode 100644 index fb0adb9f1..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ColumnSpec.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class ColumnSpec( - val entity: EntitySpec<*>, - val path: String -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return path(froms) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return path(froms) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return path(froms) - } - - private fun path(froms: Froms): Path = - froms[entity].get(path) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpec.kt deleted file mode 100644 index 9067aa72f..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpec.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class CountSpec( - private val distinct: Boolean = false, - private val expression: ExpressionSpec, -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val jpaExpression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaExpression(criteriaBuilder, jpaExpression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val jpaExpression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaExpression(criteriaBuilder, jpaExpression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val jpaExpression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaExpression(criteriaBuilder, jpaExpression) - } - - private fun toCriteriaExpression( - criteriaBuilder: CriteriaBuilder, - jpaExpression: Expression - ): Expression { - return if (distinct) { - criteriaBuilder.countDistinct(jpaExpression) - } else { - criteriaBuilder.count(jpaExpression) - } - } -} - diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/EntitySpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/EntitySpec.kt deleted file mode 100644 index b6d15586e..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/EntitySpec.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class EntitySpec( - val type: Class, - private val alias: String? = null -) : ExpressionSpec { - companion object { - private const val DEFAULT_ALIAS_TOKEN = "\\" - } - - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = path(froms) - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = path(froms) - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = path(froms) - - private fun path(froms: Froms) = froms[this].apply { applyAlias() } - - private fun Path.applyAlias() { - this@EntitySpec.alias?.run { alias(this) } - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ExpressionSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ExpressionSpec.kt deleted file mode 100644 index 570321abe..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ExpressionSpec.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -interface ExpressionSpec { - fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression - - fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression - - fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/FunctionSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/FunctionSpec.kt deleted file mode 100644 index 0f1a564e9..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/FunctionSpec.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class FunctionSpec( - private val name: String, - private val returnType: Class, - private val expressions: List>, -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return toCriteriaExpression( - criteriaBuilder = criteriaBuilder, - expressions = expressions.map { it.toCriteriaExpression(froms, query, criteriaBuilder) } - ) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return toCriteriaExpression( - criteriaBuilder = criteriaBuilder, - expressions = expressions.map { it.toCriteriaExpression(froms, query, criteriaBuilder) } - ) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return toCriteriaExpression( - criteriaBuilder = criteriaBuilder, - expressions = expressions.map { it.toCriteriaExpression(froms, query, criteriaBuilder) } - ) - } - - private fun toCriteriaExpression( - criteriaBuilder: CriteriaBuilder, - expressions: List> - ): Expression { - return criteriaBuilder.function( - name, - returnType, - *expressions.toTypedArray() - ) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpec.kt deleted file mode 100644 index 41b95cd7f..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpec.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class GreatestSpec?>( - private val expression: ExpressionSpec -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.greatest(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.greatest(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.greatest(expression) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpec.kt deleted file mode 100644 index ec0b71b26..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpec.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class LeastSpec?>( - private val expression: ExpressionSpec -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.least(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.least(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.least(expression) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LiteralSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LiteralSpec.kt deleted file mode 100644 index 7f4dffa7e..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LiteralSpec.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class LiteralSpec( - private val value: T, -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = criteriaBuilder.literal(value) - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = criteriaBuilder.literal(value) - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = criteriaBuilder.literal(value) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpec.kt deleted file mode 100644 index ab3ad4374..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpec.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class MaxSpec( - private val expression: ExpressionSpec -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.max(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.max(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.max(expression) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpec.kt deleted file mode 100644 index 3c80c9e79..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpec.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class MinSpec( - private val expression: ExpressionSpec -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.min(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.min(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.min(expression) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NestedColumnSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NestedColumnSpec.kt deleted file mode 100644 index 3f8f7caa7..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NestedColumnSpec.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class NestedColumnSpec( - val nestedColumnSpec: ColumnSpec<*>, - val path: String -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return nestedColumnSpec.nestedPath(froms).get(path) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return nestedColumnSpec.nestedPath(froms).get(path) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return nestedColumnSpec.nestedPath(froms).get(path) - } - - private fun ColumnSpec.nestedPath(froms: Froms): Path = - froms[entity].get(path) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NullLiteralSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NullLiteralSpec.kt deleted file mode 100644 index 6471647b7..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NullLiteralSpec.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class NullLiteralSpec( - private val type: Class, -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = criteriaBuilder.nullLiteral(type) - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = criteriaBuilder.nullLiteral(type) - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = criteriaBuilder.nullLiteral(type) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SubqueryExpressionSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SubqueryExpressionSpec.kt deleted file mode 100644 index 738fed5b4..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SubqueryExpressionSpec.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.SubquerySpec -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class SubqueryExpressionSpec( - private val spec: SubquerySpec, - private val subqueryCreator: SubqueryCreator, -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return subqueryCreator.createQuery(spec, froms, query, criteriaBuilder) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return subqueryCreator.createQuery(spec, froms, query, criteriaBuilder) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return subqueryCreator.createQuery(spec, froms, query, criteriaBuilder) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpec.kt deleted file mode 100644 index 8331aad10..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpec.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class SumSpec( - private val expression: ExpressionSpec -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.sum(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.sum(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.sum(expression) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/AndSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/AndSpec.kt deleted file mode 100644 index 4e2e489e2..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/AndSpec.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class AndSpec( - private val predicates: List, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return toCriteriaPredicate(criteriaBuilder) { it.toCriteriaPredicate(froms, query, criteriaBuilder) } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return toCriteriaPredicate(criteriaBuilder) { it.toCriteriaPredicate(froms, query, criteriaBuilder) } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return toCriteriaPredicate(criteriaBuilder) { it.toCriteriaPredicate(froms, query, criteriaBuilder) } - } - - private fun toCriteriaPredicate( - criteriaBuilder: CriteriaBuilder, - predicate: (PredicateSpec) -> Predicate - ): Predicate { - return predicates.asSequence() - .filterNotNull() - .map { predicate(it) } - .reduceOrNull { left, right -> criteriaBuilder.and(left, right) } - ?: criteriaBuilder.conjunction() - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenExpressionSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenExpressionSpec.kt deleted file mode 100644 index e28fda01d..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenExpressionSpec.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -data class BetweenExpressionSpec>( - private val left: ExpressionSpec, - private val right1: ExpressionSpec, - private val right2: ExpressionSpec, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.between( - left.toCriteriaExpression(froms, query, criteriaBuilder), - right1.toCriteriaExpression(froms, query, criteriaBuilder), - right2.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.between( - left.toCriteriaExpression(froms, query, criteriaBuilder), - right1.toCriteriaExpression(froms, query, criteriaBuilder), - right2.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.between( - left.toCriteriaExpression(froms, query, criteriaBuilder), - right1.toCriteriaExpression(froms, query, criteriaBuilder), - right2.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenValueSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenValueSpec.kt deleted file mode 100644 index a3cded965..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenValueSpec.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -data class BetweenValueSpec( - private val left: ExpressionSpec, - private val right1: R, - private val right2: R, -) : PredicateSpec where R : Comparable, R : Any, T : R? { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.between(left.toCriteriaExpression(froms, query, criteriaBuilder), right1, right2) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.between(left.toCriteriaExpression(froms, query, criteriaBuilder), right1, right2) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.between(left.toCriteriaExpression(froms, query, criteriaBuilder), right1, right2) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EmptyPredicateSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EmptyPredicateSpec.kt deleted file mode 100644 index bb77610b1..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EmptyPredicateSpec.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -object EmptyPredicateSpec : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualExpressionSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualExpressionSpec.kt deleted file mode 100644 index 652867896..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualExpressionSpec.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -data class EqualExpressionSpec( - private val left: ExpressionSpec, - private val right: ExpressionSpec, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.equal( - left.toCriteriaExpression(froms, query, criteriaBuilder), - right.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.equal( - left.toCriteriaExpression(froms, query, criteriaBuilder), - right.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.equal( - left.toCriteriaExpression(froms, query, criteriaBuilder), - right.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualValueSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualValueSpec.kt deleted file mode 100644 index c9f482b70..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualValueSpec.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -data class EqualValueSpec( - private val left: ExpressionSpec, - private val right: T, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.equal(left.toCriteriaExpression(froms, query, criteriaBuilder), right) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.equal(left.toCriteriaExpression(froms, query, criteriaBuilder), right) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.equal(left.toCriteriaExpression(froms, query, criteriaBuilder), right) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/ExistsSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/ExistsSpec.kt deleted file mode 100644 index bac0911d4..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/ExistsSpec.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import jakarta.persistence.criteria.* - -data class ExistsSpec( - private val subqueryExpressionSpec: SubqueryExpressionSpec, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val subqueryExpression = subqueryExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - return criteriaBuilder.exists(subqueryExpression as Subquery) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val subqueryExpression = subqueryExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - return criteriaBuilder.exists(subqueryExpression as Subquery) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val subqueryExpression = subqueryExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - return criteriaBuilder.exists(subqueryExpression as Subquery) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanExpressionSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanExpressionSpec.kt deleted file mode 100644 index 10c03195c..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanExpressionSpec.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -data class GreaterThanExpressionSpec>( - private val left: ExpressionSpec, - private val right: ExpressionSpec, - private val inclusive: Boolean, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - val rightExpression = right.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression, rightExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - val rightExpression = right.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression, rightExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - val rightExpression = right.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression, rightExpression) - } - - private fun toCriteriaPredicate( - criteriaBuilder: CriteriaBuilder, - leftExpression: Expression, - rightExpression: Expression - ): Predicate { - return if (inclusive) { - criteriaBuilder.greaterThanOrEqualTo(leftExpression, rightExpression) - } else { - criteriaBuilder.greaterThan(leftExpression, rightExpression) - } - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanValueSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanValueSpec.kt deleted file mode 100644 index df796a3bb..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanValueSpec.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -data class GreaterThanValueSpec( - private val left: ExpressionSpec, - private val right: R, - private val inclusive: Boolean, -) : PredicateSpec where R : Comparable, R : Any, T : R? { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression) - } - - private fun toCriteriaPredicate( - criteriaBuilder: CriteriaBuilder, - leftExpression: Expression - ): Predicate { - return if (inclusive) { - criteriaBuilder.greaterThanOrEqualTo(leftExpression, right) - } else { - criteriaBuilder.greaterThan(leftExpression, right) - } - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InExpressionSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InExpressionSpec.kt deleted file mode 100644 index cf2023899..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InExpressionSpec.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -data class InExpressionSpec( - private val left: ExpressionSpec, - private val rights: Collection>, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.conjunction() - - return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { - rights.forEach { value(it.toCriteriaExpression(froms, query, criteriaBuilder)) } - } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.conjunction() - - return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { - rights.forEach { value(it.toCriteriaExpression(froms, query, criteriaBuilder)) } - } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.conjunction() - - return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { - rights.forEach { value(it.toCriteriaExpression(froms, query, criteriaBuilder)) } - } - } -} 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 deleted file mode 100644 index 98e91d432..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpec.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -data class InValueSpec( - private val left: ExpressionSpec, - private val rights: Collection, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.disjunction() - - return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { - rights.forEach { value(it) } - } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.disjunction() - - return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { - rights.forEach { value(it) } - } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - 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/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsFalseSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsFalseSpec.kt deleted file mode 100644 index b154d69e8..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsFalseSpec.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -@Suppress("UNCHECKED_CAST") -data class IsFalseSpec( - private val expression: ExpressionSpec -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isFalse( - expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isFalse( - expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isFalse( - expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression - ) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsNullSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsNullSpec.kt deleted file mode 100644 index 1d418fd11..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsNullSpec.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -data class IsNullSpec( - private val expression: ExpressionSpec -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isNull(expression.toCriteriaExpression(froms, query, criteriaBuilder)) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isNull(expression.toCriteriaExpression(froms, query, criteriaBuilder)) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isNull(expression.toCriteriaExpression(froms, query, criteriaBuilder)) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsTrueSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsTrueSpec.kt deleted file mode 100644 index 3110512ec..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsTrueSpec.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -@Suppress("UNCHECKED_CAST") -data class IsTrueSpec( - private val expression: ExpressionSpec -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isTrue( - expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isTrue( - expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isTrue( - expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression - ) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanExpressionSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanExpressionSpec.kt deleted file mode 100644 index 27b04f746..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanExpressionSpec.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -data class LessThanExpressionSpec>( - private val left: ExpressionSpec, - private val right: ExpressionSpec, - private val inclusive: Boolean, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - val rightExpression = right.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression, rightExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - val rightExpression = right.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression, rightExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - val rightExpression = right.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression, rightExpression) - } - - private fun toCriteriaPredicate( - criteriaBuilder: CriteriaBuilder, - leftExpression: Expression, - rightExpression: Expression - ): Predicate { - return if (inclusive) { - criteriaBuilder.lessThanOrEqualTo(leftExpression, rightExpression) - } else { - criteriaBuilder.lessThan(leftExpression, rightExpression) - } - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanValueSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanValueSpec.kt deleted file mode 100644 index b7740a4d7..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanValueSpec.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -data class LessThanValueSpec( - private val left: ExpressionSpec, - private val right: R, - private val inclusive: Boolean, -) : PredicateSpec where R : Comparable, R : Any, T : R? { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression: Expression = left.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression: Expression = left.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression: Expression = left.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression) - } - - private fun toCriteriaPredicate( - criteriaBuilder: CriteriaBuilder, - leftExpression: Expression - ): Predicate { - return if (inclusive) { - criteriaBuilder.lessThanOrEqualTo(leftExpression, right) - } else { - criteriaBuilder.lessThan(leftExpression, right) - } - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LikeSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LikeSpec.kt deleted file mode 100644 index 61b2f514a..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LikeSpec.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import jakarta.persistence.criteria.* - -@Suppress("UNCHECKED_CAST") -data class LikeSpec( - private val left: ExpressionSpec, - private val right: String -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.like( - left.toCriteriaExpression(froms, query, criteriaBuilder) as Expression, - right - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.like( - left.toCriteriaExpression(froms, query, criteriaBuilder) as Expression, - right - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.like( - left.toCriteriaExpression(froms, query, criteriaBuilder) as Expression, - right - ) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/NotSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/NotSpec.kt deleted file mode 100644 index 90ce73717..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/NotSpec.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class NotSpec( - private val predicate: PredicateSpec, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.not(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.not(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.not(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/OrSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/OrSpec.kt deleted file mode 100644 index cb03a174d..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/OrSpec.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -data class OrSpec( - private val predicates: List, -) : PredicateSpec { - - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return toCriteriaPredicate( - criteriaBuilder = criteriaBuilder, - empty = { EmptyPredicateSpec.toCriteriaPredicate(froms, query, criteriaBuilder) }) { - it.toCriteriaPredicate( - froms, - query, - criteriaBuilder - ) - } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return toCriteriaPredicate( - criteriaBuilder = criteriaBuilder, - empty = { EmptyPredicateSpec.toCriteriaPredicate(froms, query, criteriaBuilder) }) { - it.toCriteriaPredicate( - froms, - query, - criteriaBuilder - ) - } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return toCriteriaPredicate( - criteriaBuilder = criteriaBuilder, - empty = { EmptyPredicateSpec.toCriteriaPredicate(froms, query, criteriaBuilder) }) { - it.toCriteriaPredicate( - froms, - query, - criteriaBuilder - ) - } - } - - fun toCriteriaPredicate( - criteriaBuilder: CriteriaBuilder, - empty: () -> Predicate, - predicate: (PredicateSpec) -> Predicate - ): Predicate { - return predicates.asSequence() - .filterNotNull() - .map { predicate(it) } - .reduceOrNull { left, right -> criteriaBuilder.or(left, right) } - ?: empty() - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/PredicateSpec.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/PredicateSpec.kt deleted file mode 100644 index aeabbc7ae..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/PredicateSpec.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import jakarta.persistence.criteria.* - -interface PredicateSpec { - companion object { - val empty = EmptyPredicateSpec - } - - fun isEmpty(): Boolean = this === empty - - fun reverse() = NotSpec(this) - - infix fun and(other: PredicateSpec) = AndSpec(listOf(this, other)) - infix fun or(other: PredicateSpec) = OrSpec(listOf(this, other)) - - fun toCriteriaPredicate(froms: Froms, query: AbstractQuery<*>, criteriaBuilder: CriteriaBuilder): Predicate - fun toCriteriaPredicate(froms: Froms, query: CriteriaUpdate<*>, criteriaBuilder: CriteriaBuilder): Predicate - fun toCriteriaPredicate(froms: Froms, query: CriteriaDelete<*>, criteriaBuilder: CriteriaBuilder): Predicate -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/CriteriaDeleteQueryDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/CriteriaDeleteQueryDsl.kt deleted file mode 100644 index 00da5ad83..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/CriteriaDeleteQueryDsl.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl - -import com.linecorp.kotlinjdsl.querydsl.from.AssociateDsl -import com.linecorp.kotlinjdsl.querydsl.from.RelationDsl -import com.linecorp.kotlinjdsl.querydsl.hint.HintDsl -import com.linecorp.kotlinjdsl.querydsl.where.WhereDsl - -interface CriteriaDeleteQueryDsl : - AssociateDsl, - RelationDsl, - WhereDsl, - HintDsl diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/CriteriaQueryDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/CriteriaQueryDsl.kt deleted file mode 100644 index 10154d715..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/CriteriaQueryDsl.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl - -import com.linecorp.kotlinjdsl.querydsl.from.FetchDsl -import com.linecorp.kotlinjdsl.querydsl.from.FromDsl -import com.linecorp.kotlinjdsl.querydsl.from.JoinDsl -import com.linecorp.kotlinjdsl.querydsl.from.RelationDsl -import com.linecorp.kotlinjdsl.querydsl.groupby.GroupByDsl -import com.linecorp.kotlinjdsl.querydsl.having.HavingDsl -import com.linecorp.kotlinjdsl.querydsl.hint.HintDsl -import com.linecorp.kotlinjdsl.querydsl.limit.LimitDsl -import com.linecorp.kotlinjdsl.querydsl.orderby.OrderByDsl -import com.linecorp.kotlinjdsl.querydsl.select.MultiSelectDsl -import com.linecorp.kotlinjdsl.querydsl.select.SingleSelectDsl -import com.linecorp.kotlinjdsl.querydsl.where.WhereDsl - -interface CriteriaQueryDsl : - SingleSelectDsl, - MultiSelectDsl, - FromDsl, - JoinDsl, - FetchDsl, - RelationDsl, - WhereDsl, - GroupByDsl, - HavingDsl, - OrderByDsl, - LimitDsl, - HintDsl diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/CriteriaUpdateQueryDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/CriteriaUpdateQueryDsl.kt deleted file mode 100644 index 1e7303d78..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/CriteriaUpdateQueryDsl.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl - -import com.linecorp.kotlinjdsl.querydsl.from.AssociateDsl -import com.linecorp.kotlinjdsl.querydsl.from.RelationDsl -import com.linecorp.kotlinjdsl.querydsl.hint.HintDsl -import com.linecorp.kotlinjdsl.querydsl.set.SetParameterDsl -import com.linecorp.kotlinjdsl.querydsl.where.WhereDsl - -interface CriteriaUpdateQueryDsl : - AssociateDsl, - RelationDsl, - WhereDsl, - HintDsl, - SetParameterDsl diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/SubqueryDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/SubqueryDsl.kt deleted file mode 100644 index 610c4539e..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/SubqueryDsl.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl - -import com.linecorp.kotlinjdsl.querydsl.from.FromDsl -import com.linecorp.kotlinjdsl.querydsl.from.JoinDsl -import com.linecorp.kotlinjdsl.querydsl.from.RelationDsl -import com.linecorp.kotlinjdsl.querydsl.groupby.GroupByDsl -import com.linecorp.kotlinjdsl.querydsl.having.HavingDsl -import com.linecorp.kotlinjdsl.querydsl.select.SingleSelectDsl -import com.linecorp.kotlinjdsl.querydsl.where.WhereDsl - -interface SubqueryDsl : - SingleSelectDsl, - FromDsl, - JoinDsl, - RelationDsl, - WhereDsl, - GroupByDsl, - HavingDsl diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDsl.kt deleted file mode 100644 index 14da87bb7..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDsl.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.* -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import kotlin.reflect.KClass -import kotlin.reflect.KProperty1 - -interface ExpressionDsl { - @Suppress("UNCHECKED_CAST") - fun entity(entity: KClass) = EntitySpec(entity.java as Class) - fun entity(entity: KClass, alias: String) = EntitySpec(entity.java, alias) - fun KClass.alias(alias: String) = EntitySpec(this.java, alias) - fun ColumnSpec.nested(property: KProperty1): NestedColumnSpec = NestedColumnSpec( - this, - property.name - ) - - fun literal(value: R) = LiteralSpec(value) - fun nullLiteral(type: Class) = NullLiteralSpec(type) - fun col(entity: EntitySpec, property: KProperty1) = column(entity, property) - fun column(entity: EntitySpec, property: KProperty1) = ColumnSpec(entity, property.name) - - fun nestedCol(columnSpec: ColumnSpec, property: KProperty1) = NestedColumnSpec(columnSpec, property.name) - fun max(expression: ExpressionSpec) = MaxSpec(expression) - fun min(expression: ExpressionSpec) = MinSpec(expression) - fun avg(expression: ExpressionSpec) = AvgSpec(expression) - fun sum(expression: ExpressionSpec) = SumSpec(expression) - fun count(distinct: Boolean, expression: ExpressionSpec<*>) = CountSpec(distinct, expression) - fun count(expression: ExpressionSpec<*>) = CountSpec(distinct = false, expression) - fun countDistinct(expression: ExpressionSpec<*>) = CountSpec(distinct = true, expression) - fun ?> greatest(expression: ExpressionSpec) = GreatestSpec(expression) - fun ?> least(expression: ExpressionSpec) = LeastSpec(expression) - - fun case(whens: List>, `else`: ExpressionSpec) = CaseSpec(whens, `else`) - fun case(vararg whens: CaseSpec.WhenSpec, `else`: ExpressionSpec) = case(whens.toList(), `else`) - - fun `when`(predicate: PredicateSpec, expression: ExpressionSpec) = CaseSpec.WhenSpec(predicate, expression) - fun `when`(predicate: PredicateSpec) = WhenDsl(predicate) - fun `when`(predicate: () -> PredicateSpec) = WhenDsl(predicate()) - - fun function(name: String, returnType: Class, vararg expressions: ExpressionSpec<*>) = - function(name, returnType, expressions.toList()) - - fun function(name: String, returnType: Class, expressions: List>) = - FunctionSpec(name, returnType, expressions) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDslExtensions.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDslExtensions.kt deleted file mode 100644 index 9af5116f9..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDslExtensions.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import kotlin.reflect.KProperty1 - -private typealias Dsl = ExpressionDsl - -inline fun Dsl.col(property: KProperty1) = column(property) -inline fun Dsl.column(property: KProperty1) = column(EntitySpec(T::class.java), property) -inline fun Dsl.nullLiteral() = nullLiteral(T::class.java) - -inline fun Dsl.max(property: KProperty1) = max(col(property)) -inline fun Dsl.min(property: KProperty1) = min(col(property)) -inline fun Dsl.avg(property: KProperty1) = avg(col(property)) -inline fun Dsl.sum(property: KProperty1) = sum(col(property)) -inline fun Dsl.count(distinct: Boolean, property: KProperty1) = count(distinct, col(property)) -inline fun Dsl.count(property: KProperty1) = count(col(property)) -inline fun Dsl.countDistinct(property: KProperty1) = countDistinct(col(property)) -inline fun ?> Dsl.greatest(property: KProperty1) = greatest(col(property)) -inline fun ?> Dsl.least(property: KProperty1) = least(col(property)) -inline fun Dsl.function(name: String, vararg expressions: ExpressionSpec<*>) = - function(name, expressions.toList()) - -inline fun Dsl.function(name: String, expressions: List>) = - function(name, T::class.java, expressions) diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/WhenDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/WhenDsl.kt deleted file mode 100644 index b1d603c2d..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/WhenDsl.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.CaseSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec - -data class WhenDsl( - private val `when`: PredicateSpec, -) { - infix fun then(expression: ExpressionSpec) = CaseSpec.WhenSpec(`when`, expression) - infix fun then(expression: () -> ExpressionSpec) = CaseSpec.WhenSpec(`when`, expression()) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/AssociateDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/AssociateDsl.kt deleted file mode 100644 index bba3b3eaa..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/AssociateDsl.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import jakarta.persistence.criteria.JoinType -import kotlin.reflect.KClass - -interface AssociateDsl { - fun associate( - left: EntitySpec, - right: EntitySpec, - relation: Relation, - joinType: JoinType = JoinType.INNER - ) - - fun associate( - left: KClass, - right: EntitySpec, - relation: Relation, - joinType: JoinType = JoinType.INNER - ) = associate(EntitySpec(left.java), right, relation, joinType) - - fun associate( - left: EntitySpec, - right: KClass, - relation: Relation, - joinType: JoinType = JoinType.INNER - ) = associate(left, EntitySpec(right.java), relation, joinType) - - fun associate( - left: KClass, - right: KClass, - relation: Relation, - joinType: JoinType = JoinType.INNER - ) = associate(EntitySpec(left.java), EntitySpec(right.java), relation, joinType) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/AssociatedslExtensions.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/AssociatedslExtensions.kt deleted file mode 100644 index df53ac537..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/AssociatedslExtensions.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import jakarta.persistence.criteria.JoinType -import kotlin.reflect.KProperty1 - -inline fun AssociateDsl.associate( - property: KProperty1, - joinType: JoinType = JoinType.INNER, -) { - associate(T::class, R::class, Relation(property.name), joinType) -} - -@JvmName("associateCollection") -inline fun , reified E : Any> AssociateDsl.associate( - property: KProperty1, - joinType: JoinType = JoinType.INNER, -) { - associate(T::class, E::class, Relation(property.name), joinType) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FetchDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FetchDsl.kt deleted file mode 100644 index 2880a40e6..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FetchDsl.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import jakarta.persistence.criteria.JoinType -import kotlin.reflect.KClass - -interface FetchDsl { - fun fetch( - left: EntitySpec, - right: EntitySpec, - relation: Relation, - joinType: JoinType = JoinType.INNER - ) - - fun fetch( - left: KClass, - right: EntitySpec, - relation: Relation, - joinType: JoinType = JoinType.INNER - ) = fetch(EntitySpec(left.java), right, relation, joinType) - - fun fetch( - left: EntitySpec, - right: KClass, - relation: Relation, - joinType: JoinType = JoinType.INNER - ) = fetch(left, EntitySpec(right.java), relation, joinType) - - fun fetch( - left: KClass, - right: KClass, - relation: Relation, - joinType: JoinType = JoinType.INNER - ) = fetch(EntitySpec(left.java), EntitySpec(right.java), relation, joinType) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FetchDslExtensions.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FetchDslExtensions.kt deleted file mode 100644 index d91232a35..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FetchDslExtensions.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import jakarta.persistence.criteria.JoinType -import kotlin.reflect.KProperty1 - -inline fun FetchDsl.fetch( - property: KProperty1, - joinType: JoinType = JoinType.INNER, -) { - fetch(T::class, R::class, Relation(property.name), joinType) -} - -@JvmName("fetchCollection") -inline fun , reified E : Any> FetchDsl.fetch( - property: KProperty1, - joinType: JoinType = JoinType.INNER, -) { - fetch(T::class, E::class, Relation(property.name), joinType) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FromDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FromDsl.kt deleted file mode 100644 index 73b655754..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FromDsl.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import kotlin.reflect.KClass - -interface FromDsl { - fun from(entity: Class<*>) = from(EntitySpec(entity)) - fun from(entity: KClass<*>) = from(EntitySpec(entity.java)) - fun from(entity: EntitySpec<*>) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/JoinDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/JoinDsl.kt deleted file mode 100644 index a0e09e96a..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/JoinDsl.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import jakarta.persistence.criteria.JoinType -import kotlin.reflect.KClass - -interface JoinDsl : AssociateDsl, TreatDsl { - fun on(predicate: PredicateSpec): PredicateSpec = predicate - fun on(predicate: () -> PredicateSpec): PredicateSpec = on(predicate()) - - fun join( - left: EntitySpec, - right: EntitySpec, - relation: Relation, - joinType: JoinType = JoinType.INNER - ) - - fun join( - left: KClass, - right: EntitySpec, - relation: Relation, - joinType: JoinType = JoinType.INNER - ) = join(EntitySpec(left.java), right, relation, joinType) - - fun join( - left: EntitySpec, - right: KClass, - relation: Relation, - joinType: JoinType = JoinType.INNER - ) = join(left, EntitySpec(right.java), relation, joinType) - - fun join( - left: KClass, - right: KClass, - relation: Relation, - joinType: JoinType = JoinType.INNER - ) = join(EntitySpec(left.java), EntitySpec(right.java), relation, joinType) - - fun join(entity: EntitySpec, predicate: PredicateSpec) - fun join(entity: KClass, predicate: PredicateSpec) = join(EntitySpec(entity.java), predicate) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/JoinDslExtensions.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/JoinDslExtensions.kt deleted file mode 100644 index 8e4b9c7af..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/JoinDslExtensions.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import jakarta.persistence.criteria.JoinType -import kotlin.reflect.KProperty1 - -inline fun JoinDsl.join( - property: KProperty1, - joinType: JoinType = JoinType.INNER, -) { - join(T::class, R::class, Relation(property.name), joinType) -} - -@JvmName("joinCollection") -inline fun , reified E : Any> JoinDsl.join( - property: KProperty1, - joinType: JoinType = JoinType.INNER, -) { - join(T::class, E::class, Relation(property.name), joinType) -} - diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/Relation.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/Relation.kt deleted file mode 100644 index a23b00326..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/Relation.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -data class Relation( - val path: String -) diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/RelationDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/RelationDsl.kt deleted file mode 100644 index 7912ff392..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/RelationDsl.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import kotlin.reflect.KProperty1 - -interface RelationDsl { - fun on(property: KProperty1): Relation = Relation(property.name) - - @Suppress("INAPPLICABLE_JVM_NAME") - @JvmName("onCollection") - fun on(property: KProperty1>): Relation = Relation(property.name) -} - diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/TreatDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/TreatDsl.kt deleted file mode 100644 index d199ec2d3..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/TreatDsl.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import jakarta.persistence.criteria.JoinType -import kotlin.reflect.KClass - -interface TreatDsl { - fun treat( - root: ColumnSpec<*>, - parent: EntitySpec

, - child: EntitySpec, - parentJoinType: JoinType = JoinType.INNER, - ) - - fun

treat( - root: ColumnSpec<*>, - parent: EntitySpec

, - child: KClass, - parentJoinType: JoinType = JoinType.INNER, - ) = treat(root, parent, EntitySpec(child.java), parentJoinType) - - fun

treat( - root: ColumnSpec<*>, - parent: KClass

, - child: KClass, - parentJoinType: JoinType = JoinType.INNER, - ) = treat(root, EntitySpec(parent.java), EntitySpec(child.java), parentJoinType) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/TreatDslExtensions.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/TreatDslExtensions.kt deleted file mode 100644 index 4e1cabd94..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/from/TreatDslExtensions.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import jakarta.persistence.criteria.JoinType - -inline fun TreatDsl.treat(parentJoinType: JoinType = JoinType.INNER) { - treat(ColumnSpec

(EntitySpec(P::class.java), ""), P::class, T::class, parentJoinType) -} - -inline fun TreatDsl.treat( - root: ColumnSpec<*>, - parentJoinType: JoinType = JoinType.INNER -) { - treat(root, EntitySpec(P::class.java), T::class, parentJoinType) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/GroupByDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/GroupByDsl.kt deleted file mode 100644 index c02c8cec6..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/GroupByDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.groupby - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec - -interface GroupByDsl { - fun groupBy(vararg columns: ExpressionSpec<*>) = groupBy(columns.toList()) - fun groupBy(columns: List>) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/having/HavingDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/having/HavingDsl.kt deleted file mode 100644 index b101d07e1..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/having/HavingDsl.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.having - -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec - -interface HavingDsl { - fun having(predicate: PredicateSpec) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/HintDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/HintDsl.kt deleted file mode 100644 index f6f9a52e7..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/HintDsl.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint - -interface HintDsl { - fun sqlHints(vararg hints: String) = sqlHints(hints.toList()) - fun sqlHints(hints: List) - - fun hints(vararg hints: Pair) = hints(hints.toMap()) - fun hints(hints: Map) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/LimitDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/LimitDsl.kt deleted file mode 100644 index 296482829..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/LimitDsl.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.limit - -interface LimitDsl { - fun offset(offset: Int) - fun maxResults(maxResults: Int) - - fun limit(maxResults: Int) { - maxResults(maxResults) - } - - fun limit(offset: Int, maxResults: Int) { - offset(offset) - maxResults(maxResults) - } -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/OrderByDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/OrderByDsl.kt deleted file mode 100644 index 7a509662d..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/OrderByDsl.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.orderby - -import com.linecorp.kotlinjdsl.query.spec.ExpressionOrderSpec -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec - -interface OrderByDsl { - fun orderBy(vararg orders: OrderSpec) = orderBy(orders.toList()) - fun orderBy(orders: List) - - fun ExpressionSpec<*>.asc(): OrderSpec = ExpressionOrderSpec(expression = this, ascending = true) - fun ExpressionSpec<*>.desc(): OrderSpec = ExpressionOrderSpec(expression = this, ascending = false) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/PredicateDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/PredicateDsl.kt deleted file mode 100644 index 77b98026d..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/PredicateDsl.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.* - -@Suppress("RemoveExplicitTypeArguments") -interface PredicateDsl { - fun not(predicate: PredicateSpec): PredicateSpec = NotSpec(predicate) - - fun and(vararg others: PredicateSpec?): PredicateSpec = and(others.toList()) - fun and(others: List): PredicateSpec = AndSpec(others) - - fun or(vararg others: PredicateSpec?): PredicateSpec = or(others.toList()) - fun or(others: List): PredicateSpec = OrSpec(others) - - fun exists(subqueryExpression: SubqueryExpressionSpec) = ExistsSpec(subqueryExpression) - fun notExists(subqueryExpression: SubqueryExpressionSpec) = not(ExistsSpec(subqueryExpression)) - - fun ExpressionSpec.equal(value: R) = EqualValueSpec(this, value) - fun ExpressionSpec.equal(expression: ExpressionSpec) = EqualExpressionSpec(this, expression) - - fun ExpressionSpec.notEqual(value: R) = not(EqualValueSpec(this, value)) - fun ExpressionSpec.notEqual(expression: ExpressionSpec) = not(EqualExpressionSpec(this, expression)) - - fun ExpressionSpec.`in`(vararg values: R) = `in`(values.toList()) - fun ExpressionSpec.`in`(values: Collection) = InValueSpec(this, values) - - fun ExpressionSpec.`in`(vararg expressions: ExpressionSpec) = `in`(expressions.toList()) - fun ExpressionSpec.`in`(expressions: List>) = InExpressionSpec(this, expressions) - - fun ExpressionSpec.greaterThanOrEqualTo(value: R) - where R : Comparable, R : Any, T : R? = greaterThan(value, true) - - fun ExpressionSpec.greaterThan(value: R, inclusive: Boolean = false) - where R : Comparable, R : Any, T : R? = GreaterThanValueSpec(this, value, inclusive) - - fun ExpressionSpec.greaterThanOrEqualTo(expression: ExpressionSpec) - where T : Comparable = greaterThan(expression, true) - - fun ExpressionSpec.greaterThan(expression: ExpressionSpec, inclusive: Boolean = false) - where T : Comparable = GreaterThanExpressionSpec(this, expression, inclusive) - - fun ExpressionSpec.lessThanOrEqualTo(value: R) - where R : Comparable, R : Any, T : R? = lessThan(value, true) - - fun ExpressionSpec.lessThan(value: R, inclusive: Boolean = false) - where R : Comparable, R : Any, T : R? = LessThanValueSpec(this, value, inclusive) - - fun ExpressionSpec.lessThanOrEqualTo(expression: ExpressionSpec) - where T : Comparable = lessThan(expression, true) - - fun ExpressionSpec.lessThan(expression: ExpressionSpec, inclusive: Boolean = false) - where T : Comparable = LessThanExpressionSpec(this, expression, inclusive) - - fun ExpressionSpec.between(value1: R, value2: R) - where R : Comparable, R : Any, T : R? = BetweenValueSpec(this, value1, value2) - - fun ExpressionSpec.between(expression1: ExpressionSpec, expression2: ExpressionSpec) - where T : Comparable = BetweenExpressionSpec(this, expression1, expression2) - - fun ExpressionSpec.isTrue() = IsTrueSpec(this) - fun ExpressionSpec.isFalse() = IsFalseSpec(this) - - fun ExpressionSpec.isNull() = IsNullSpec(this) - fun ExpressionSpec.isNotNull() = not(IsNullSpec(this)) - - fun ExpressionSpec.like(value: String) = LikeSpec(this, value) - fun ExpressionSpec.notLike(value: String) = not(LikeSpec(this, value)) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/select/MultiSelectDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/select/MultiSelectDsl.kt deleted file mode 100644 index 74b3d437e..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/select/MultiSelectDsl.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec - -/** - * This is Dsl which is used to select multiple column. - * - * **notice**: vararg is not supported with method name: select. - * This is because wrong type inference is made when SingleSelectDsl and MultiSelectDsl are used together. - */ -interface MultiSelectDsl { - fun select(distinct: Boolean, expressions: List>): MultiSelectClause - fun select(expressions: List>) = select(distinct = false, expressions) - fun selectDistinct(expressions: List>) = select(distinct = true, expressions) - - fun selectMulti(distinct: Boolean, expressions: List>) = select(distinct, expressions) - fun selectMulti(vararg expressions: ExpressionSpec<*>) = select(distinct = false, expressions.toList()) - fun selectMulti(expressions: List>) = select(distinct = false, expressions) - fun selectDistinctMulti(vararg expressions: ExpressionSpec<*>) = select(distinct = true, expressions.toList()) - fun selectDistinctMulti(expressions: List>) = select(distinct = true, expressions) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/select/SingleSelectDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/select/SingleSelectDsl.kt deleted file mode 100644 index b265a3ee9..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/select/SingleSelectDsl.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec - -/** - * This is Dsl which is used to select a single entity or a single column. - */ -interface SingleSelectDsl { - fun select(distinct: Boolean, entity: Class) = select(distinct, EntitySpec(entity)) - fun select(distinct: Boolean, expression: ExpressionSpec): SingleSelectClause - - fun select(entity: Class) = select(distinct = false, entity) - fun select(expression: ExpressionSpec) = select(distinct = false, expression) - - fun selectDistinct(entity: Class) = select(distinct = true, entity) - fun selectDistinct(expression: ExpressionSpec) = select(distinct = true, expression) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/set/SetParameterDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/set/SetParameterDsl.kt deleted file mode 100644 index ca0925176..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/set/SetParameterDsl.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.set - -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec - -interface SetParameterDsl { - fun setParams(vararg params: Pair, Any?>) = setParams(params.toMap()) - fun setParams(params: Map, Any?>) - fun set(column: ColumnSpec<*>, value: Any?) -} diff --git a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/where/WhereDsl.kt b/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/where/WhereDsl.kt deleted file mode 100644 index 3940827b6..000000000 --- a/query-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/where/WhereDsl.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.where - -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.expression.ExpressionDsl -import com.linecorp.kotlinjdsl.querydsl.predicate.PredicateDsl - -interface WhereDsl : ExpressionDsl, PredicateDsl { - fun where(predicate: PredicateSpec?) - - fun whereAnd(vararg predicates: PredicateSpec?) = whereAnd(predicates.toList()) - fun whereAnd(predicates: List) - - fun whereOr(vararg predicates: PredicateSpec?) = whereOr(predicates.toList()) - fun whereOr(predicates: List) -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/from/FromClauseTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/from/FromClauseTest.kt deleted file mode 100644 index 5fc402d03..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/from/FromClauseTest.kt +++ /dev/null @@ -1,564 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.from - -import com.linecorp.kotlinjdsl.query.spec.* -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.employee.Employee -import com.linecorp.kotlinjdsl.test.entity.employee.FullTimeEmployee -import com.linecorp.kotlinjdsl.test.entity.employee.PartTimeEmployee -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - - -private typealias ExplicitErasedParent = Number -private typealias ExplicitErasedChild = Int - -@ExtendWith(MockKExtension::class) -internal class FromClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate - - @MockK - private lateinit var deleteQuery: CriteriaDelete - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - private val entitySpec1 = EntitySpec(Data1::class.java) - private val entitySpec2 = EntitySpec(Data2::class.java) - private val entitySpec3 = EntitySpec(Data3::class.java) - private val entitySpec4 = EntitySpec(Data4::class.java) - - @Test - fun join() { - // given - val fromEntitySpec = entitySpec1 - val fromClause = FromClause(fromEntitySpec) - - val joinSpec1 = SimpleJoinSpec(entitySpec1, entitySpec2, "data2", JoinType.INNER) - val joinSpec2 = SimpleJoinSpec(entitySpec2, entitySpec3, "data3", JoinType.LEFT) - val joinSpec3 = FetchJoinSpec(entitySpec2, entitySpec3, "data3", JoinType.INNER) - val joinSpec4 = FetchJoinSpec(entitySpec2, entitySpec3, "data3", JoinType.LEFT) - val joinSpec5 = CrossJoinSpec(entitySpec4) - val joinClause = JoinClause(listOf(joinSpec1, joinSpec2, joinSpec3, joinSpec4, joinSpec5)) - - val root = mockk>() - val join1 = mockk>() - val fetch1 = mockk>() - val crossJoin1 = mockk>() - - every { query.from(Data1::class.java) } returns root - every { root.join(any(), any()) } returns join1 - every { join1.fetch(any(), any()) } returns fetch1 - every { query.from(Data4::class.java) } returns crossJoin1 - - // when - val actual = fromClause.join(joinClause, query, criteriaBuilder) - - // then - assertThat(actual).usingRecursiveComparison().isEqualTo( - Froms( - root = root, - map = mapOf( - entitySpec1 to root, - entitySpec2 to join1, - entitySpec3 to fetch1, - entitySpec4 to crossJoin1, - ) - ) - ) - - verifyOrder { - query.from(Data1::class.java) - root.join("data2", JoinType.INNER) - join1.fetch("data3", JoinType.LEFT) - query.from(Data4::class.java) - } - - verify { - root.hashCode() - join1.hashCode() - fetch1.hashCode() - crossJoin1.hashCode() - } - - confirmVerified(root, join1, fetch1, crossJoin1, query) - } - - @Suppress("UNCHECKED_CAST") - @Test - fun treatWithOtherRoot() { - // given - val fromEntitySpec = EntitySpec(RootOther::class.java, "root") - val outerParent = EntitySpec(Parent::class.java, "outerParent") - val innerParent = EntitySpec(Parent::class.java, "innerParent") - val fetchInnerParent = EntitySpec(Parent::class.java, "fetchInnerParent") - val fetchOuterParent = EntitySpec(Parent::class.java, "fetchOuterParent") - - val treatInnerParent = EntitySpec(Parent::class.java, "treatInnerParent") - val treatOuterParent = EntitySpec(Parent::class.java, "treatOuterParent") - val child1Inner = EntitySpec(Child1::class.java, "child1Inner") - val child1Outer = EntitySpec(Child1::class.java, "child1Outer") - val child1FetchInner = EntitySpec(Child1::class.java, "child1FetchInner") - val child2FetchOuter = EntitySpec(Child2::class.java, "child2FetchOuter") - val child3 = EntitySpec(Child3::class.java, "child3") - val fromClause = FromClause(fromEntitySpec) - - val joinSpec1 = SimpleJoinSpec(fromEntitySpec, outerParent, RootOther::outerChild1.name, JoinType.INNER) - // winner with joinSpec1 - val joinSpec2 = SimpleJoinSpec(fromEntitySpec, outerParent, RootOther::outerChild1.name, JoinType.LEFT) - - // winner - val joinSpec3 = SimpleJoinSpec(fromEntitySpec, innerParent, RootOther::innerChild2.name, JoinType.INNER) - - // winner - val joinSpec4 = CrossJoinSpec(child3) - - // winner - val joinSpec5 = - FetchJoinSpec(fromEntitySpec, fetchInnerParent, RootOther::fetchInnerChild1.name, JoinType.INNER) - - val joinSpec6 = - FetchJoinSpec(fromEntitySpec, fetchOuterParent, RootOther::fetchOuterChild2.name, JoinType.INNER) - // winner with joinSpec6 - val joinSpec7 = FetchJoinSpec(fromEntitySpec, fetchOuterParent, RootOther::fetchOuterChild2.name, JoinType.LEFT) - - // winner - val joinSpec8 = TreatJoinSpec( - left = innerParent, - right = child1Inner, - joinType = JoinType.INNER, - root = ColumnSpec(fromEntitySpec, RootOther::treatChildrenInner.name), - ) - - val joinSpec9 = TreatJoinSpec( - left = outerParent, - right = child1Outer, - joinType = JoinType.INNER, - root = ColumnSpec(fromEntitySpec, RootOther::treatChildrenOuter.name), - ) - // winner with joinSpec9 - val joinSpec10 = TreatJoinSpec( - left = outerParent, - right = child1Outer, - joinType = JoinType.LEFT, - root = ColumnSpec(fromEntitySpec, RootOther::treatChildrenOuter.name), - ) - - // winner - val joinSpec11 = TreatJoinSpec( - left = treatInnerParent, - right = child1FetchInner, - joinType = JoinType.INNER, - root = ColumnSpec(fromEntitySpec, RootOther::treatFetchInnerChild1.name), - ) - - val joinSpec12 = TreatJoinSpec( - left = treatOuterParent, - right = child2FetchOuter, - joinType = JoinType.INNER, - root = ColumnSpec(fromEntitySpec, RootOther::treatFetchOuterChild2.name), - ) - // winner with joinSpec12 - val joinSpec13 = TreatJoinSpec( - left = treatOuterParent, - right = child2FetchOuter, - joinType = JoinType.LEFT, - root = ColumnSpec(fromEntitySpec, RootOther::treatFetchOuterChild2.name), - ) - - - val joinClause = JoinClause( - listOf( - joinSpec1, - joinSpec2, - joinSpec3, - joinSpec4, - joinSpec5, - joinSpec6, - joinSpec7, - joinSpec8, - joinSpec9, - joinSpec10, - joinSpec11, - joinSpec12, - joinSpec13, - ) - ) - - val root = mockk>() - val outerJoin1 = mockk>() - val innerJoin1 = mockk>() - val crossJoin1 = mockk>() - - val fetchInnerJoin1 = mockk>() - val fetchOuterJoin1 = mockk>() - - val treatInnerParentJoin1 = mockk>() - val treatOuterParentJoin1 = mockk>() - - val treatJoin1 = mockk>() - val treatJoin2 = mockk>() - val treatJoin3 = mockk>() - val treatJoin4 = mockk>() - - every { query.from(RootOther::class.java) } returns root - every { root.join(RootOther::outerChild1.name, JoinType.LEFT) } returns outerJoin1 - every { root.join(RootOther::innerChild2.name, JoinType.INNER) } returns innerJoin1 - every { query.from(Child3::class.java) } returns crossJoin1 - - every { - root.fetch( - RootOther::fetchInnerChild1.name, - JoinType.INNER - ) - } returns fetchInnerJoin1 - every { root.fetch(RootOther::fetchOuterChild2.name, JoinType.LEFT) } returns fetchOuterJoin1 - - every { - criteriaBuilder.treat( - innerJoin1 as Join, - Child1::class.java as Class - ) - } returns treatJoin1 - every { - criteriaBuilder.treat( - outerJoin1 as Join, - Child1::class.java as Class - ) - } returns treatJoin2 - - every { - root.join( - RootOther::treatFetchInnerChild1.name, - JoinType.INNER - ) - } returns treatInnerParentJoin1 - every { - root.join( - RootOther::treatFetchOuterChild2.name, - JoinType.LEFT - ) - } returns treatOuterParentJoin1 - - every { - criteriaBuilder.treat( - treatInnerParentJoin1 as Join, - Child1::class.java as Class - ) - } returns treatJoin3 - every { - criteriaBuilder.treat( - treatOuterParentJoin1 as Join, - Child2::class.java as Class - ) - } returns treatJoin4 - - // when - val actual = fromClause.join(joinClause, query, criteriaBuilder) - - // then - assertThat(actual).usingRecursiveComparison().isEqualTo( - Froms( - root = root, - map = mapOf( - fromEntitySpec to root, - fetchOuterParent to fetchOuterJoin1, - fetchInnerParent to fetchInnerJoin1, - outerParent to outerJoin1, - innerParent to innerJoin1, - child3 to crossJoin1, - treatOuterParent to treatOuterParentJoin1, - treatInnerParent to treatInnerParentJoin1, - child1Inner to treatJoin1, - child1Outer to treatJoin2, - child1FetchInner to treatJoin3, - child2FetchOuter to treatJoin4, - ) - ) - ) - - verify { - query.from(RootOther::class.java) - root.join(RootOther::outerChild1.name, JoinType.LEFT) - root.join(RootOther::innerChild2.name, JoinType.INNER) - query.from(Child3::class.java) - root.fetch( - RootOther::fetchInnerChild1.name, - JoinType.INNER - ) - root.fetch(RootOther::fetchOuterChild2.name, JoinType.LEFT) - criteriaBuilder.treat( - innerJoin1 as Join, - Child1::class.java as Class - ) - criteriaBuilder.treat( - outerJoin1 as Join, - Child1::class.java as Class - ) - root.join( - RootOther::treatFetchInnerChild1.name, - JoinType.INNER - ) - - root.join( - RootOther::treatFetchOuterChild2.name, - JoinType.LEFT - ) - criteriaBuilder.treat( - treatInnerParentJoin1 as Join, - Child1::class.java as Class - ) - criteriaBuilder.treat( - treatOuterParentJoin1 as Join, - Child2::class.java as Class - ) - } - } - - @Suppress("UNCHECKED_CAST") - @Test - fun treatJoinRoot() { - // given - val fromEntitySpec = EntitySpec(Employee::class.java) - val entitySpec1 = EntitySpec(FullTimeEmployee::class.java, "fe") - val entitySpec2 = EntitySpec(PartTimeEmployee::class.java, "pe") - val fromClause = FromClause(fromEntitySpec) - - val joinSpec0 = TreatJoinSpec( - left = fromEntitySpec, - right = entitySpec1, - joinType = JoinType.INNER, - root = ColumnSpec(fromEntitySpec, "fe"), - ) - - val joinSpec1 = TreatJoinSpec( - left = fromEntitySpec, - right = entitySpec2, - joinType = JoinType.LEFT, - root = ColumnSpec(fromEntitySpec, "pe"), - ) - - val joinClause = JoinClause( - listOf( - joinSpec0, - joinSpec1 - ) - ) - - val root = mockk>() - val join0 = mockk>() - val join1 = mockk>() - - every { root.javaType } returns Employee::class.java - every { query.from(Employee::class.java) } returns root - every { - criteriaBuilder.treat( - root as Root, - joinSpec0.right.type as Class - ) - } returns join0 as Root - every { - criteriaBuilder.treat( - root as Root, - joinSpec1.right.type as Class - ) - } returns join0 as Root - - // when - val actual = fromClause.join(joinClause, query, criteriaBuilder) - - // then - assertThat(actual).usingRecursiveComparison().isEqualTo( - Froms( - root = root, - map = mapOf( - fromEntitySpec to root, - entitySpec1 to join0 as Root, - entitySpec2 to join1, - ) - ) - ) - - verify { - query.from(Employee::class.java) - root.javaType - criteriaBuilder.treat( - root as Root, - joinSpec0.right.type as Class - ) - criteriaBuilder.treat( - root as Root, - joinSpec1.right.type as Class - ) - root.hashCode() - join0.hashCode() - join1.hashCode() - } - - confirmVerified(root, join0, join1, query) - } - - @Test - fun `join - if join is incomplete then throw exception`() { - // given - val fromEntitySpec = entitySpec1 - val fromClause = FromClause(fromEntitySpec) - - val joinSpec = SimpleJoinSpec(entitySpec2, entitySpec3, "data3", JoinType.LEFT) - val joinClause = JoinClause(listOf(joinSpec)) - - val root = mockk>() - - every { query.from(Data1::class.java) } returns root - - // when - val exception = catchThrowable(IllegalStateException::class) { - fromClause.join(joinClause, query, criteriaBuilder) - } - - // then - assertThat(exception) - .hasMessageContaining("Join clause is incomplete. Please check if the following Entities are joined") - - verify(exactly = 1) { - query.from(Data1::class.java) - } - - confirmVerified(root, query) - } - - @Test - fun associate() { - // given - val fromEntitySpec = entitySpec1 - val fromClause = FromClause(fromEntitySpec) - - val joinSpec1 = SimpleAssociatedJoinSpec(entitySpec1, entitySpec2, "data2") - val joinSpec2 = SimpleAssociatedJoinSpec(entitySpec2, entitySpec3, "data3") - val joinClause = SimpleAssociatedJoinClause(listOf(joinSpec1, joinSpec2)) - - val root = mockk>() - val join1 = mockk>() - val join2 = mockk>() - - every { updateQuery.from(Data1::class.java) } returns root - every { deleteQuery.from(Data1::class.java) } returns root - every { root.get(joinSpec1.path) } returns join1 - every { join1.get(joinSpec2.path) } returns join2 - - // when - val actual = fromClause.associate(joinClause, updateQuery) - val deleteActual = fromClause.associate(joinClause, deleteQuery) - - // then - assertThat(actual).usingRecursiveComparison().isEqualTo( - Froms( - root = root, - map = mapOf( - entitySpec1 to root, - entitySpec2 to join1, - entitySpec3 to join2, - ) - ) - ) - assertThat(deleteActual).usingRecursiveComparison().isEqualTo( - Froms( - root = root, - map = mapOf( - entitySpec1 to root, - entitySpec2 to join1, - entitySpec3 to join2, - ) - ) - ) - - verify(exactly = 1) { - updateQuery.from(Data1::class.java) - deleteQuery.from(Data1::class.java) - } - - verify(exactly = 2) { - root.get(joinSpec1.path) - join1.get(joinSpec2.path) - } - - verify { - root.hashCode() - join1.hashCode() - join2.hashCode() - } - - confirmVerified(root, join1, join2, updateQuery, deleteQuery) - } - - @Test - fun `associate - if associate is incomplete then throw exception`() { - // given - val fromEntitySpec = entitySpec1 - val fromClause = FromClause(fromEntitySpec) - - val joinSpec = SimpleAssociatedJoinSpec(entitySpec2, entitySpec3, "data3") - val joinClause = SimpleAssociatedJoinClause(listOf(joinSpec)) - - val root = mockk>() - - every { updateQuery.from(Data1::class.java) } returns root - every { deleteQuery.from(Data1::class.java) } returns root - - // when - val exception = catchThrowable(IllegalStateException::class) { - fromClause.associate(joinClause, updateQuery) - } - - val deleteException = catchThrowable(IllegalStateException::class) { - fromClause.associate(joinClause, deleteQuery) - } - - // then - assertThat(exception) - .hasMessageContaining("Associate clause is incomplete. Please check if the following Entities are associated") - - assertThat(deleteException) - .hasMessageContaining("Associate clause is incomplete. Please check if the following Entities are associated") - - verify(exactly = 1) { - updateQuery.from(Data1::class.java) - deleteQuery.from(Data1::class.java) - } - - confirmVerified(root, updateQuery, deleteQuery) - } - - private class Data1 - private class Data2 - private class Data3 - private class Data4 - - private class RootOther( - val id: Long, - val treatChildrenInner: List, - val treatChildrenOuter: List, - val innerChild2: Parent, - val outerChild1: Parent, - val fetchInnerChild1: Parent, - val fetchOuterChild2: Parent, - val treatFetchInnerChild1: Parent, - val treatFetchOuterChild2: Parent - ) - - private open class Parent(val id: Long, val rootId: Long) - private class Child1(parentId: Long, rootId: Long) : Parent(parentId, rootId) - private class Child2(parentId: Long, rootId: Long) : Parent(parentId, rootId) - private class Child3(parentId: Long, rootId: Long) : Parent(parentId, rootId) - - private interface MockFetch : Join, Fetch -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/GroupByClauseTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/GroupByClauseTest.kt deleted file mode 100644 index e02fc64a3..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/GroupByClauseTest.kt +++ /dev/null @@ -1,106 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.groupby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Expression -import jakarta.persistence.criteria.Subquery - -@ExtendWith(MockKExtension::class) -internal class GroupByClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var subquery: Subquery - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `apply criteria query`() { - // given - val expressionSpec1: ExpressionSpec<*> = mockk() - val expressionSpec2: ExpressionSpec<*> = mockk() - - val expression1: Expression<*> = mockk() - val expression2: Expression<*> = mockk() - - every { expressionSpec1.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression1 - every { expressionSpec2.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression2 - - every { criteriaQuery.groupBy(listOf(expression1, expression2)) } returns criteriaQuery - - // when - GroupByClause(listOf(expressionSpec1, expressionSpec2)).apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec1.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - expressionSpec2.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - - criteriaQuery.groupBy(listOf(expression1, expression2)) - } - - confirmVerified(expressionSpec1, expressionSpec2, froms, subquery, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply criteria query - if expression is empty then do nothing`() { - // when - GroupByClause(emptyList()).apply(froms, criteriaQuery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply subquery`() { - // given - val expressionSpec1: ExpressionSpec<*> = mockk() - val expressionSpec2: ExpressionSpec<*> = mockk() - - val expression1: Expression<*> = mockk() - val expression2: Expression<*> = mockk() - - every { expressionSpec1.toCriteriaExpression(froms, subquery, criteriaBuilder) } returns expression1 - every { expressionSpec2.toCriteriaExpression(froms, subquery, criteriaBuilder) } returns expression2 - - every { subquery.groupBy(listOf(expression1, expression2)) } returns subquery - - // when - GroupByClause(listOf(expressionSpec1, expressionSpec2)).apply(froms, subquery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec1.toCriteriaExpression(froms, subquery, criteriaBuilder) - expressionSpec2.toCriteriaExpression(froms, subquery, criteriaBuilder) - - subquery.groupBy(listOf(expression1, expression2)) - } - - confirmVerified(expressionSpec1, expressionSpec2, froms, subquery, subquery, criteriaBuilder) - } - - @Test - fun `apply subquery - if expression is empty then do nothing`() { - // when - GroupByClause(emptyList()).apply(froms, subquery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, subquery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/having/HavingClauseTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/having/HavingClauseTest.kt deleted file mode 100644 index ec52f1eab..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/having/HavingClauseTest.kt +++ /dev/null @@ -1,100 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.having - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Predicate -import jakarta.persistence.criteria.Subquery - -@ExtendWith(MockKExtension::class) -internal class HavingClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var subquery: Subquery - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `apply criteria query`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - every { predicateSpec.isEmpty() } returns false - every { predicateSpec.toCriteriaPredicate(froms, criteriaQuery, criteriaBuilder) } returns predicate - every { criteriaQuery.having(predicate) } returns criteriaQuery - - // when - HavingClause(predicateSpec).apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - predicateSpec.isEmpty() - predicateSpec.toCriteriaPredicate(froms, criteriaQuery, criteriaBuilder) - criteriaQuery.having(predicate) - - criteriaQuery.having(predicate) - } - - confirmVerified(predicateSpec, froms, subquery, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply criteria query - if predicate is empty then do nothing`() { - // when - HavingClause(PredicateSpec.empty).apply(froms, criteriaQuery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply subquery`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - every { predicateSpec.isEmpty() } returns false - every { predicateSpec.toCriteriaPredicate(froms, subquery, criteriaBuilder) } returns predicate - every { subquery.having(predicate) } returns subquery - - // when - HavingClause(predicateSpec).apply(froms, subquery, criteriaBuilder) - - // then - verify(exactly = 1) { - predicateSpec.isEmpty() - predicateSpec.toCriteriaPredicate(froms, subquery, criteriaBuilder) - subquery.having(predicate) - - subquery.having(predicate) - } - - confirmVerified(predicateSpec, froms, subquery, subquery, criteriaBuilder) - } - - @Test - fun `apply subquery - if predicate is empty then do nothing`() { - // when - HavingClause(PredicateSpec.empty).apply(froms, subquery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, subquery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/OrderByClauseTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/OrderByClauseTest.kt deleted file mode 100644 index 7d1e256f8..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/OrderByClauseTest.kt +++ /dev/null @@ -1,65 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Order - -@ExtendWith(MockKExtension::class) -internal class OrderByClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun apply() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - val order1: Order = mockk() - val order2: Order = mockk() - val order3: Order = mockk() - - every { orderSpec1.toCriteriaOrder(froms, criteriaQuery, criteriaBuilder) } returns listOf(order1) - every { orderSpec2.toCriteriaOrder(froms, criteriaQuery, criteriaBuilder) } returns listOf(order2, order3) - - every { criteriaQuery.orderBy(listOf(order1, order2, order3)) } returns criteriaQuery - - // when - OrderByClause(listOf(orderSpec1, orderSpec2)).apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - orderSpec1.toCriteriaOrder(froms, criteriaQuery, criteriaBuilder) - orderSpec2.toCriteriaOrder(froms, criteriaQuery, criteriaBuilder) - criteriaQuery.orderBy(listOf(order1, order2, order3)) - } - - confirmVerified(orderSpec1, orderSpec2, froms, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply - empty`() { - // when - OrderByClause(emptyList()).apply(froms, criteriaQuery, criteriaBuilder) - - // then - confirmVerified(froms, criteriaQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountMultiSelectClauseTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountMultiSelectClauseTest.kt deleted file mode 100644 index 139b5d24e..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountMultiSelectClauseTest.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Expression - -@ExtendWith(MockKExtension::class) -internal class CountMultiSelectClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun apply() { - // given - val expressionSpec1: ExpressionSpec<*> = mockk() - val expressionSpec2: ExpressionSpec<*> = mockk() - - val literalExpression: Expression = mockk() - val countExpression: Expression = mockk() - - every { criteriaBuilder.literal(1) } returns literalExpression - every { criteriaBuilder.count(literalExpression) } returns countExpression - every { criteriaQuery.select(countExpression) } returns criteriaQuery - - // when - CountMultiSelectClause(distinct = false, listOf(expressionSpec1, expressionSpec2)) - .apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - criteriaBuilder.literal(1) - criteriaBuilder.count(literalExpression) - - criteriaQuery.select(countExpression) - } - - confirmVerified(froms, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply - if it is distinct then throw exception`() { - // given - val expressionSpec1: ExpressionSpec<*> = mockk() - val expressionSpec2: ExpressionSpec<*> = mockk() - - // when - val exception = catchThrowable(IllegalStateException::class) { - CountMultiSelectClause(distinct = true, listOf(expressionSpec1, expressionSpec2)) - .apply(froms, criteriaQuery, criteriaBuilder) - } - - // then - assertThat(exception).hasMessageContaining( - "Count distinct does not support multiple columns. Please remove distinct in selection" - ) - - confirmVerified(froms, criteriaQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountSingleSelectClauseTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountSingleSelectClauseTest.kt deleted file mode 100644 index 8a39afd3f..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountSingleSelectClauseTest.kt +++ /dev/null @@ -1,78 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Expression - -@ExtendWith(MockKExtension::class) -internal class CountSingleSelectClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `apply - distinct`() { - // given - val expressionSpec: ExpressionSpec<*> = mockk() - val expression: Expression<*> = mockk() - - val countDistinctExpression: Expression = mockk() - - every { expressionSpec.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.countDistinct(expression) } returns countDistinctExpression - every { criteriaQuery.select(countDistinctExpression) } returns criteriaQuery - - // when - CountSingleSelectClause(distinct = true, expressionSpec).apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - criteriaBuilder.countDistinct(expression) - criteriaQuery.select(countDistinctExpression) - } - - confirmVerified(expressionSpec, froms, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply - not distinct`() { - // given - val expressionSpec: ExpressionSpec<*> = mockk() - val expression: Expression<*> = mockk() - - val countExpression: Expression = mockk() - - every { expressionSpec.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.count(expression) } returns countExpression - every { criteriaQuery.select(countExpression) } returns criteriaQuery - - // when - CountSingleSelectClause(distinct = false, expressionSpec).apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - criteriaBuilder.count(expression) - criteriaQuery.select(countExpression) - } - - confirmVerified(expressionSpec, froms, criteriaQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/MultiSelectClauseTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/MultiSelectClauseTest.kt deleted file mode 100644 index 3d1237a47..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/MultiSelectClauseTest.kt +++ /dev/null @@ -1,64 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.CompoundSelection -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Expression - -@ExtendWith(MockKExtension::class) -internal class MultiSelectClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun apply() { - // given - val expressionSpec1: ExpressionSpec<*> = mockk() - val expressionSpec2: ExpressionSpec<*> = mockk() - - val expression1: Expression<*> = mockk() - val expression2: Expression<*> = mockk() - - val constructExpression: CompoundSelection = mockk() - - every { expressionSpec1.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression1 - every { expressionSpec2.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression2 - every { criteriaBuilder.construct(Data1::class.java, expression1, expression2) } returns constructExpression - every { criteriaQuery.select(constructExpression) } returns criteriaQuery - every { criteriaQuery.distinct(true) } returns criteriaQuery - - // when - MultiSelectClause(Data1::class.java, distinct = true, listOf(expressionSpec1, expressionSpec2)) - .apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec1.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - expressionSpec2.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - criteriaBuilder.construct(Data1::class.java, expression1, expression2) - criteriaQuery.select(constructExpression) - criteriaQuery.distinct(true) - } - - confirmVerified(expressionSpec1, expressionSpec2, froms, criteriaQuery, criteriaBuilder) - } - - class Data1 -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SingleSelectClauseTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SingleSelectClauseTest.kt deleted file mode 100644 index 38bb58a76..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SingleSelectClauseTest.kt +++ /dev/null @@ -1,80 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Expression -import jakarta.persistence.criteria.Subquery - -@ExtendWith(MockKExtension::class) -internal class SingleSelectClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var subquery: Subquery - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `apply criteria query`() { - // given - val expressionSpec: ExpressionSpec = mockk() - val expression: Expression = mockk() - - every { expressionSpec.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression - every { criteriaQuery.select(expression) } returns criteriaQuery - every { criteriaQuery.distinct(true) } returns criteriaQuery - - // when - SingleSelectClause(Int::class.java, distinct = true, expressionSpec) - .apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - criteriaQuery.select(expression) - criteriaQuery.distinct(true) - } - - confirmVerified(expressionSpec, froms, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply subquery`() { - // given - val expressionSpec: ExpressionSpec = mockk() - val expression: Expression = mockk() - - every { expressionSpec.toCriteriaExpression(froms, subquery, criteriaBuilder) } returns expression - every { subquery.select(expression) } returns subquery - every { subquery.distinct(true) } returns subquery - - // when - SingleSelectClause(Int::class.java, distinct = true, expressionSpec) - .apply(froms, subquery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, subquery, criteriaBuilder) - subquery.select(expression) - subquery.distinct(true) - } - - confirmVerified(expressionSpec, froms, criteriaQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/set/SetClauseTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/set/SetClauseTest.kt deleted file mode 100644 index 4e7602b4f..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/set/SetClauseTest.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.set - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaUpdate -import jakarta.persistence.criteria.Path - -internal class SetClauseTest { - @Suppress("CAST_NEVER_SUCCEEDS") - @Test - fun apply() { - val froms: Froms = mockk() - val query: CriteriaUpdate = mockk() - val criteriaBuilder: CriteriaBuilder = mockk() - - val column1 = mockk>() - val column2 = mockk>() - val params: Map, Any?> = mapOf(column1 to 1234, column2 to null) - - val key1 = mockk>() - val key2 = mockk>() - every { query.set(key1, 1234) } returns query - every { query.set(key2, null as? String) } returns query - every { column1.toCriteriaExpression(froms, query, criteriaBuilder) } returns key1 - every { column2.toCriteriaExpression(froms, query, criteriaBuilder) } returns key2 - - SetClause(params).apply(froms, query, criteriaBuilder) - - verify(exactly = 1) { - query.set(key1, 1234) - query.set(key2, null as? String) - column1.toCriteriaExpression(froms, query, criteriaBuilder) - column2.toCriteriaExpression(froms, query, criteriaBuilder) - } - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/where/WhereClauseTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/where/WhereClauseTest.kt deleted file mode 100644 index d18cfd73a..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/where/WhereClauseTest.kt +++ /dev/null @@ -1,171 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.where - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class WhereClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var subquery: Subquery - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaUpdateQuery: CriteriaUpdate - - @MockK - private lateinit var criteriaDeleteQuery: CriteriaDelete - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `apply criteria query`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - every { predicateSpec.isEmpty() } returns false - every { predicateSpec.toCriteriaPredicate(froms, criteriaQuery, criteriaBuilder) } returns predicate - every { criteriaQuery.where(predicate) } returns criteriaQuery - - // when - WhereClause(predicateSpec).apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - predicateSpec.isEmpty() - predicateSpec.toCriteriaPredicate(froms, criteriaQuery, criteriaBuilder) - criteriaQuery.where(predicate) - - criteriaQuery.where(predicate) - } - - confirmVerified(predicateSpec, froms, subquery, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply criteria query - if predicate is empty then do nothing`() { - // when - WhereClause(PredicateSpec.empty).apply(froms, criteriaQuery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply criteria update query`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - every { predicateSpec.isEmpty() } returns false - every { predicateSpec.toCriteriaPredicate(froms, criteriaUpdateQuery, criteriaBuilder) } returns predicate - every { criteriaUpdateQuery.where(predicate) } returns criteriaUpdateQuery - - // when - WhereClause(predicateSpec).apply(froms, criteriaUpdateQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - predicateSpec.isEmpty() - predicateSpec.toCriteriaPredicate(froms, criteriaUpdateQuery, criteriaBuilder) - criteriaUpdateQuery.where(predicate) - - criteriaUpdateQuery.where(predicate) - } - - confirmVerified(predicateSpec, froms, subquery, criteriaUpdateQuery, criteriaBuilder) - } - - @Test - fun `apply criteria update query - if predicate is empty then do nothing`() { - // when - WhereClause(PredicateSpec.empty).apply(froms, criteriaUpdateQuery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, criteriaUpdateQuery, criteriaBuilder) - } - - @Test - fun `apply criteria delete query`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - every { predicateSpec.isEmpty() } returns false - every { predicateSpec.toCriteriaPredicate(froms, criteriaDeleteQuery, criteriaBuilder) } returns predicate - every { criteriaDeleteQuery.where(predicate) } returns criteriaDeleteQuery - - // when - WhereClause(predicateSpec).apply(froms, criteriaDeleteQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - predicateSpec.isEmpty() - predicateSpec.toCriteriaPredicate(froms, criteriaDeleteQuery, criteriaBuilder) - criteriaDeleteQuery.where(predicate) - - criteriaDeleteQuery.where(predicate) - } - - confirmVerified(predicateSpec, froms, subquery, criteriaDeleteQuery, criteriaBuilder) - } - - @Test - fun `apply criteria delete query - if predicate is empty then do nothing`() { - // when - WhereClause(PredicateSpec.empty).apply(froms, criteriaDeleteQuery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, criteriaDeleteQuery, criteriaBuilder) - } - - @Test - fun `apply subquery`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - every { predicateSpec.isEmpty() } returns false - every { predicateSpec.toCriteriaPredicate(froms, subquery, criteriaBuilder) } returns predicate - every { subquery.where(predicate) } returns subquery - - // when - WhereClause(predicateSpec).apply(froms, subquery, criteriaBuilder) - - // then - verify(exactly = 1) { - predicateSpec.isEmpty() - predicateSpec.toCriteriaPredicate(froms, subquery, criteriaBuilder) - subquery.where(predicate) - - subquery.where(predicate) - } - - confirmVerified(predicateSpec, froms, subquery, subquery, criteriaBuilder) - } - - @Test - fun `apply subquery - if predicate is empty then do nothing`() { - // when - WhereClause(PredicateSpec.empty).apply(froms, subquery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, subquery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/JpaCriteriaQueryBuilderTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/JpaCriteriaQueryBuilderTest.kt deleted file mode 100644 index cb85715f8..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/JpaCriteriaQueryBuilderTest.kt +++ /dev/null @@ -1,254 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.EntityManager -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class JpaCriteriaQueryBuilderTest : WithKotlinJdslAssertions { - private val sut = JpaCriteriaQueryBuilder - - @MockK - private lateinit var em: EntityManager - - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun createQuery() { - data class TestCriteriaQuerySpec( - override val select: CriteriaQuerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: CriteriaQueryWhereClause, - override val groupBy: CriteriaQueryGroupByClause, - override val having: CriteriaQueryHavingClause, - override val orderBy: CriteriaQueryOrderByClause, - override val limit: QueryLimitClause>, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaQuerySpec> - // given - val createdQuery: CriteriaQuery = mockk() - val typedQuery: TypedQuery = mockk() - - val select: CriteriaQuerySelectClause = mockk { - every { returnType } returns Int::class.java - } - val from: FromClause<*> = mockk() - val join: JoinClause = mockk() - val where: CriteriaQueryWhereClause = mockk() - val groupBy: CriteriaQueryGroupByClause = mockk() - val having: CriteriaQueryHavingClause = mockk() - val orderBy: CriteriaQueryOrderByClause = mockk() - val limit: QueryLimitClause> = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - - val spec: CriteriaQuerySpec> = TestCriteriaQuerySpec( - from = from, - join = join, - where = where, - groupBy = groupBy, - having = having, - orderBy = orderBy, - limit = limit, - jpaHint = jpaHint, - sqlHint = sqlHint, - select = select - ) - - every { em.createQuery(createdQuery) } returns typedQuery - every { criteriaBuilder.createQuery(Int::class.java) } returns createdQuery - every { from.join(join, createdQuery, criteriaBuilder) } returns froms - every { select.apply(froms, createdQuery, criteriaBuilder) } just runs - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { groupBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { having.apply(froms, createdQuery, criteriaBuilder) } just runs - every { orderBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { limit.apply(typedQuery) } just runs - every { jpaHint.apply(typedQuery) } just runs - every { sqlHint.apply(typedQuery) } just runs - - // when - val actual = sut.createQuery(spec, criteriaBuilder, em::createQuery) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - em.createQuery(createdQuery) - criteriaBuilder.createQuery(Int::class.java) - from.join(join, createdQuery, criteriaBuilder) - select.returnType - select.apply(froms, createdQuery, criteriaBuilder) - where.apply(froms, createdQuery, criteriaBuilder) - groupBy.apply(froms, createdQuery, criteriaBuilder) - having.apply(froms, createdQuery, criteriaBuilder) - orderBy.apply(froms, createdQuery, criteriaBuilder) - limit.apply(typedQuery) - jpaHint.apply(typedQuery) - sqlHint.apply(typedQuery) - typedQuery == typedQuery - } - - confirmVerified( - select, from, join, where, groupBy, having, orderBy, limit, jpaHint, sqlHint, - createdQuery, typedQuery, - em, froms, criteriaBuilder - ) - } - - @Test - fun createUpdateQuery() { - data class TestCriteriaUpdateQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - override val set: SetClause - ) : CriteriaUpdateQuerySpec - // given - val createdQuery: CriteriaUpdate = mockk() - val query: Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause = mockk() - val sqlHint: SqlQueryHintClause = mockk() - val set: SetClause = mockk() - - val spec: CriteriaUpdateQuerySpec = TestCriteriaUpdateQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - set = set, - targetEntity = Int::class.java - ) - - val setKey = mockk>() - every { createdQuery.set(setKey, 1234) } returns createdQuery - - every { em.createQuery(createdQuery) } returns query - every { criteriaBuilder.createCriteriaUpdate(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(query) } just runs - every { sqlHint.apply(query) } just runs - every { set.apply(froms, createdQuery, criteriaBuilder) } just runs - - // when - val actual = sut.createQuery(spec, criteriaBuilder, em::createQuery) - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - em.createQuery(createdQuery) - criteriaBuilder.createCriteriaUpdate(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - set.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query) - sqlHint.apply(query) - query == query - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, query, - em, froms, criteriaBuilder - ) - } - - @Test - fun createDeleteQuery() { - data class TestCriteriaDeleteQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - ) : CriteriaDeleteQuerySpec - // given - val createdQuery: CriteriaDelete = mockk() - val query: Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause = mockk() - val sqlHint: SqlQueryHintClause = mockk() - val set: SetClause = mockk() - - val spec: CriteriaDeleteQuerySpec = TestCriteriaDeleteQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - targetEntity = Int::class.java - ) - - every { em.createQuery(createdQuery) } returns query - every { criteriaBuilder.createCriteriaDelete(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(query) } just runs - every { sqlHint.apply(query) } just runs - - // when - val actual = sut.createQuery(spec, criteriaBuilder, em::createQuery) - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - em.createQuery(createdQuery) - criteriaBuilder.createCriteriaDelete(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query) - sqlHint.apply(query) - query == query - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, query, - em, froms, criteriaBuilder - ) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreatorImplTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreatorImplTest.kt deleted file mode 100644 index cb54258c9..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreatorImplTest.kt +++ /dev/null @@ -1,167 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.SubquerySpec -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.SubqueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.SubqueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.select.SubquerySelectClause -import com.linecorp.kotlinjdsl.query.clause.where.SubqueryWhereClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class SubqueryCreatorImplTest : WithAssertions { - private val sut: SubqueryCreatorImpl = SubqueryCreatorImpl() - - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaUpdate: CriteriaUpdate - - @MockK - private lateinit var criteriaDelete: CriteriaDelete - - @MockK - private lateinit var subquery: Subquery - - data class TestSubquerySpec( - override val select: SubquerySelectClause, - override val from: FromClause, - override val join: JoinClause, - override val where: SubqueryWhereClause, - override val groupBy: SubqueryGroupByClause, - override val having: SubqueryHavingClause - ) : SubquerySpec - - @Test - fun createQuery() { - // given - val createdQuery: Subquery = mockk() - - val createdFroms: Froms = mockk() - val mergedFroms: Froms = mockk() - - val select: SubquerySelectClause = mockk { - every { returnType } returns Int::class.java - } - val from: FromClause = mockk() - val join: JoinClause = mockk() - val where: SubqueryWhereClause = mockk() - val groupBy: SubqueryGroupByClause = mockk() - val having: SubqueryHavingClause = mockk() - - val spec: SubquerySpec = TestSubquerySpec( - select = select, - from = from, - join = join, - where = where, - groupBy = groupBy, - having = having - ) - - every { criteriaQuery.subquery(Int::class.java) } returns createdQuery - every { from.join(join, createdQuery, criteriaBuilder) } returns createdFroms - every { createdFroms + froms } returns mergedFroms - every { select.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - every { where.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - every { groupBy.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - every { having.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - - // when - val actual = sut.createQuery(spec, froms, criteriaQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(createdQuery) - - verify(exactly = 1) { - criteriaQuery.subquery(Int::class.java) - from.join(join, createdQuery, criteriaBuilder) - createdFroms + froms - select.returnType - select.apply(mergedFroms, createdQuery, criteriaBuilder) - where.apply(mergedFroms, createdQuery, criteriaBuilder) - groupBy.apply(mergedFroms, createdQuery, criteriaBuilder) - having.apply(mergedFroms, createdQuery, criteriaBuilder) - createdQuery == createdQuery - } - - confirmVerified( - select, from, join, where, groupBy, having, - createdFroms, mergedFroms, createdQuery, - criteriaQuery, subquery, criteriaBuilder - ) - } - - @Test - fun createUpdateQuery() { - // given - val createdQuery: Subquery = mockk() - - val createdFroms: Froms = mockk() - val mergedFroms: Froms = mockk() - - val select: SubquerySelectClause = mockk { - every { returnType } returns Int::class.java - } - val from: FromClause = mockk() - val join: JoinClause = mockk() - val where: SubqueryWhereClause = mockk() - val groupBy: SubqueryGroupByClause = mockk() - val having: SubqueryHavingClause = mockk() - - val spec: SubquerySpec = TestSubquerySpec( - select = select, - from = from, - join = join, - where = where, - groupBy = groupBy, - having = having - ) - - every { criteriaUpdate.subquery(Int::class.java) } returns createdQuery - every { from.join(join, createdQuery, criteriaBuilder) } returns createdFroms - every { createdFroms + froms } returns mergedFroms - every { select.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - every { where.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - every { groupBy.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - every { having.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - - // when - val actual = sut.createQuery(spec, froms, criteriaUpdate, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(createdQuery) - - verify(exactly = 1) { - criteriaUpdate.subquery(Int::class.java) - from.join(join, createdQuery, criteriaBuilder) - createdFroms + froms - select.returnType - select.apply(mergedFroms, createdQuery, criteriaBuilder) - where.apply(mergedFroms, createdQuery, criteriaBuilder) - groupBy.apply(mergedFroms, createdQuery, criteriaBuilder) - having.apply(mergedFroms, createdQuery, criteriaBuilder) - createdQuery == createdQuery - } - - confirmVerified( - select, from, join, where, groupBy, having, - createdFroms, mergedFroms, createdQuery, - criteriaUpdate, subquery, criteriaBuilder - ) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/ExpressionOrderSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/ExpressionOrderSpecTest.kt deleted file mode 100644 index 80c812dc8..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/ExpressionOrderSpecTest.kt +++ /dev/null @@ -1,82 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Expression -import jakarta.persistence.criteria.Order - -@ExtendWith(MockKExtension::class) -internal class ExpressionOrderSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: CriteriaQuery<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `toCriteriaOrder - asc`() { - // given - val expression = mockk>() - val criteriaExpression = mockk>() - - val order = mockk() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns criteriaExpression - every { criteriaBuilder.asc(any()) } returns order - - // when - val spec = ExpressionOrderSpec(expression, ascending = true) - - val actual = spec.toCriteriaOrder(froms, query, criteriaBuilder) - - // then - assertThat(actual).containsOnly(order) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.asc(criteriaExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaOrder - desc`() { - // given - val expression = mockk>() - val criteriaExpression = mockk>() - - val order = mockk() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns criteriaExpression - every { criteriaBuilder.desc(any()) } returns order - - // when - val spec = ExpressionOrderSpec(expression, ascending = false) - - val actual = spec.toCriteriaOrder(froms, query, criteriaBuilder) - - // then - assertThat(actual).containsOnly(order) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.desc(criteriaExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/FromsTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/FromsTest.kt deleted file mode 100644 index cca75cb36..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/FromsTest.kt +++ /dev/null @@ -1,130 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec - -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.From -import jakarta.persistence.criteria.Path -import jakarta.persistence.criteria.Root - -@ExtendWith(MockKExtension::class) -internal class FromsTest : WithKotlinJdslAssertions { - @Test - fun get() { - // given - val root: Root<*> = mockk() - - val entitySpec1 = EntitySpec(Data1::class.java) - val from1: Path<*> = mockk() - - val entitySpec2 = EntitySpec(Data2::class.java) - val from2: From<*, *> = mockk() - - val entitySpec3 = EntitySpec(Data3::class.java) - - // when - val froms = Froms( - root, mapOf( - entitySpec1 to from1, - entitySpec2 to from2, - ) - ) - - // then - assertThat(froms[entitySpec1]).isEqualTo(from1) - assertThat(froms[entitySpec2]).isEqualTo(from2) - - val exception = catchThrowable(IllegalStateException::class) { froms[entitySpec3] } - assertThat(exception).isNotNull - } - - @Test - fun plus() { - // given - val rootOfLeft: Root<*> = mockk() - val rootOfRight: Root<*> = mockk() - - val entitySpec1 = EntitySpec(Data1::class.java) - val from1: From<*, *> = mockk() - - val entitySpec2 = EntitySpec(Data2::class.java) - val from2: From<*, *> = mockk() - - val entitySpec3 = EntitySpec(Data2::class.java, "data2") - val from3: From<*, *> = mockk() - - // when - val leftFroms = Froms( - rootOfLeft, mapOf( - entitySpec1 to from1, - entitySpec2 to from2, - ) - ) - - val rightFroms = Froms( - rootOfRight, mapOf( - entitySpec3 to from3, - ) - ) - - val actual = leftFroms + rightFroms - - // then - assertThat(actual[entitySpec1]).isEqualTo(from1) - assertThat(actual[entitySpec2]).isEqualTo(from2) - assertThat(actual[entitySpec3]).isEqualTo(from3) - } - - @Test - fun `plus - if there is duplicated entity then throw exception`() { - // given - val rootOfLeft: Root<*> = mockk() - val rootOfRight: Root<*> = mockk() - - val entitySpec1 = EntitySpec(Data1::class.java) - val from1: From<*, *> = mockk() - - val entitySpec2 = EntitySpec(Data2::class.java) - val from2: From<*, *> = mockk() - - val entitySpec3 = EntitySpec(Data2::class.java) - val from3: From<*, *> = mockk() - - // when - val leftFroms = Froms( - rootOfLeft, mapOf( - entitySpec1 to from1, - entitySpec2 to from2, - ) - ) - - val rightFroms = Froms( - rootOfRight, mapOf( - entitySpec3 to from3, - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - leftFroms + rightFroms - } - - // then - assertThat(exception) - .hasMessageContaining("Other froms has duplicated entitySpec. Please alias the duplicated entities") - } - - data class Data1( - val id: Long - ) - - data class Data2( - val id: Long - ) - - data class Data3( - val id: Long - ) -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpecTest.kt deleted file mode 100644 index c049009dc..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpecTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class AvgSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - val returnExpression = mockk>() - - val avgExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns returnExpression - every { criteriaBuilder.avg(any>()) } returns avgExpression - - // when - val spec = AvgSpec(expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(avgExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.avg(returnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val avgExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.avg(any>()) } returns avgExpression - - // when - val spec = AvgSpec(column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(avgExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.avg(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val avgExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.avg(any>()) } returns avgExpression - - // when - val spec = AvgSpec(column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(avgExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.avg(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CaseSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CaseSpecTest.kt deleted file mode 100644 index b5863b993..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CaseSpecTest.kt +++ /dev/null @@ -1,233 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class CaseSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val predicateSpec1 = mockk() - val predicateSpec2 = mockk() - - val predicate1 = mockk() - val predicate2 = mockk() - - val resultSpec1 = mockk>() - val resultSpec2 = mockk>() - - val result1 = mockk>() - val result2 = mockk>() - - val when1 = CaseSpec.WhenSpec(predicateSpec1, resultSpec1) - val when2 = CaseSpec.WhenSpec(predicateSpec2, resultSpec2) - - val otherwise1 = mockk>() - val otherwise1Expression = mockk>() - - val case = mockk>() - val caseExpression = mockk>() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { resultSpec1.toCriteriaExpression(any(), any>(), any()) } returns result1 - every { resultSpec2.toCriteriaExpression(any(), any>(), any()) } returns result2 - - every { otherwise1.toCriteriaExpression(any(), any>(), any()) } returns otherwise1Expression - - every { criteriaBuilder.selectCase() } returns case - every { case.`when`(any(), any>()) } returns case - every { case.otherwise(any>()) } returns caseExpression - - // when - val spec = CaseSpec(listOf(when1, when2), otherwise1) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(caseExpression) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, query, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, query, criteriaBuilder) - - resultSpec1.toCriteriaExpression(froms, query, criteriaBuilder) - resultSpec2.toCriteriaExpression(froms, query, criteriaBuilder) - - otherwise1.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.selectCase() - case.`when`(predicate1, result1) - case.`when`(predicate2, result2) - case.otherwise(otherwise1Expression) - } - - confirmVerified( - predicateSpec1, predicateSpec2, - resultSpec1, resultSpec2, - otherwise1, case, - froms, query, criteriaBuilder - ) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val predicateSpec1 = mockk() - val predicateSpec2 = mockk() - - val predicate1 = mockk() - val predicate2 = mockk() - - val resultSpec1 = mockk>() - val resultSpec2 = mockk>() - - val result1 = mockk>() - val result2 = mockk>() - - val when1 = CaseSpec.WhenSpec(predicateSpec1, resultSpec1) - val when2 = CaseSpec.WhenSpec(predicateSpec2, resultSpec2) - - val otherwise1 = mockk>() - val otherwise1Expression = mockk>() - - val case = mockk>() - val caseExpression = mockk>() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { resultSpec1.toCriteriaExpression(any(), any>(), any()) } returns result1 - every { resultSpec2.toCriteriaExpression(any(), any>(), any()) } returns result2 - - every { otherwise1.toCriteriaExpression(any(), any>(), any()) } returns otherwise1Expression - - every { criteriaBuilder.selectCase() } returns case - every { case.`when`(any(), any>()) } returns case - every { case.otherwise(any>()) } returns caseExpression - - // when - val spec = CaseSpec(listOf(when1, when2), otherwise1) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(caseExpression) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - resultSpec1.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - resultSpec2.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - otherwise1.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.selectCase() - case.`when`(predicate1, result1) - case.`when`(predicate2, result2) - case.otherwise(otherwise1Expression) - } - - confirmVerified( - predicateSpec1, predicateSpec2, - resultSpec1, resultSpec2, - otherwise1, case, - froms, updateQuery, criteriaBuilder - ) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val predicateSpec1 = mockk() - val predicateSpec2 = mockk() - - val predicate1 = mockk() - val predicate2 = mockk() - - val resultSpec1 = mockk>() - val resultSpec2 = mockk>() - - val result1 = mockk>() - val result2 = mockk>() - - val when1 = CaseSpec.WhenSpec(predicateSpec1, resultSpec1) - val when2 = CaseSpec.WhenSpec(predicateSpec2, resultSpec2) - - val otherwise1 = mockk>() - val otherwise1Expression = mockk>() - - val case = mockk>() - val caseExpression = mockk>() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { resultSpec1.toCriteriaExpression(any(), any>(), any()) } returns result1 - every { resultSpec2.toCriteriaExpression(any(), any>(), any()) } returns result2 - - every { otherwise1.toCriteriaExpression(any(), any>(), any()) } returns otherwise1Expression - - every { criteriaBuilder.selectCase() } returns case - every { case.`when`(any(), any>()) } returns case - every { case.otherwise(any>()) } returns caseExpression - - // when - val spec = CaseSpec(listOf(when1, when2), otherwise1) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(caseExpression) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - resultSpec1.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - resultSpec2.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - otherwise1.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.selectCase() - case.`when`(predicate1, result1) - case.`when`(predicate2, result2) - case.otherwise(otherwise1Expression) - } - - confirmVerified( - predicateSpec1, predicateSpec2, - resultSpec1, resultSpec2, - otherwise1, case, - froms, deleteQuery, criteriaBuilder - ) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ColumnSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ColumnSpecTest.kt deleted file mode 100644 index d8fe26424..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ColumnSpecTest.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class ColumnSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val from = mockk>() - val path = mockk>() - - every { froms[any>()] } returns from - every { from.get(any()) } returns path - - // when - val spec = ColumnSpec(EntitySpec(Data::class.java), "name") - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(path) - - verify { - froms[EntitySpec(Data::class.java)] - from.get("name") - } - - confirmVerified(from, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val from = mockk>() - val path = mockk>() - - every { froms[any>()] } returns from - every { from.get(any()) } returns path - - // when - val spec = ColumnSpec(EntitySpec(Data::class.java), "name") - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(path) - - verify { - froms[EntitySpec(Data::class.java)] - from.get("name") - } - - confirmVerified(from, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val from = mockk>() - val path = mockk>() - - every { froms[any>()] } returns from - every { from.get(any()) } returns path - - // when - val spec = ColumnSpec(EntitySpec(Data::class.java), "name") - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(path) - - verify { - froms[EntitySpec(Data::class.java)] - from.get("name") - } - - confirmVerified(from, froms, deleteQuery, criteriaBuilder) - } - - private class Data { - val name = "name" - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpecTest.kt deleted file mode 100644 index e5c7de481..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpecTest.kt +++ /dev/null @@ -1,193 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class CountSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `toCriteriaExpression - distinct`() { - // given - val expression = mockk>() - val columnExpression = mockk>() - - val countExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.countDistinct(any>()) } returns countExpression - - // when - val spec = CountSpec(distinct = true, expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(countExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.countDistinct(columnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaExpression - non distinct`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val countExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.count(any>()) } returns countExpression - - // when - val spec = CountSpec(distinct = false, column) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(countExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.count(columnExpression) - } - - confirmVerified(column, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression - distinct`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val countExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.countDistinct(any>()) } returns countExpression - - // when - val spec = CountSpec(distinct = true, column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(countExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.countDistinct(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression - non distinct`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val countExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.count(any>()) } returns countExpression - - // when - val spec = CountSpec(distinct = false, column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(countExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.count(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression - distinct`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val countExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.countDistinct(any>()) } returns countExpression - - // when - val spec = CountSpec(distinct = true, column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(countExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.countDistinct(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression - non distinct`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val countExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.count(any>()) } returns countExpression - - // when - val spec = CountSpec(distinct = false, column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(countExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.count(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/EntitySpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/EntitySpecTest.kt deleted file mode 100644 index 3759cc96e..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/EntitySpecTest.kt +++ /dev/null @@ -1,171 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class EntitySpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val from = mockk>() - - every { froms[any>()] } returns from - - // when - val spec = EntitySpec(Data::class.java) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(from) - - verify(exactly = 1) { - froms[spec] - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaExpression with alias`() { - // given - val from = mockk>() - - every { froms[any>()] } returns from - every { from.alias("data1") } returns mockk() - - // when - val spec = EntitySpec(Data::class.java, "data1") - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(from) - - verify(exactly = 1) { - froms[spec] - from.alias("data1") - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val from = mockk>() - - every { froms[any>()] } returns from - - // when - val spec = EntitySpec(Data::class.java) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(from) - - verify(exactly = 1) { - froms[spec] - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression with alias`() { - // given - val from = mockk>() - - every { froms[any>()] } returns from - every { from.alias("data1") } returns mockk() - - // when - val spec = EntitySpec(Data::class.java, "data1") - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(from) - - verify(exactly = 1) { - froms[spec] - from.alias("data1") - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val from = mockk>() - - every { froms[any>()] } returns from - - // when - val spec = EntitySpec(Data::class.java) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(from) - - verify(exactly = 1) { - froms[spec] - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression with alias`() { - // given - val from = mockk>() - - every { froms[any>()] } returns from - every { from.alias("data1") } returns mockk() - - // when - val spec = EntitySpec(Data::class.java, "data1") - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(from) - - verify(exactly = 1) { - froms[spec] - from.alias("data1") - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } - - private class Data -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpecTest.kt deleted file mode 100644 index 7086c6064..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpecTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class GreatestSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - val columnExpression = mockk>() - - val greatestExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.greatest(any>()) } returns greatestExpression - - // when - val spec = GreatestSpec(expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greatestExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.greatest(columnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val greatestExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.greatest(any>()) } returns greatestExpression - - // when - val spec = GreatestSpec(column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greatestExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.greatest(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val greatestExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.greatest(any>()) } returns greatestExpression - - // when - val spec = GreatestSpec(column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greatestExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.greatest(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpecTest.kt deleted file mode 100644 index 9bc831e62..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpecTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class LeastSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - val columnExpression = mockk>() - - val leastExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.least(any>()) } returns leastExpression - - // when - val spec = LeastSpec(expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(leastExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.least(columnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val leastExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.least(any>()) } returns leastExpression - - // when - val spec = LeastSpec(column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(leastExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.least(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val leastExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.least(any>()) } returns leastExpression - - // when - val spec = LeastSpec(column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(leastExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.least(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LiteralSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LiteralSpecTest.kt deleted file mode 100644 index d7cdcce1e..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LiteralSpecTest.kt +++ /dev/null @@ -1,97 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class LiteralSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - - every { criteriaBuilder.literal(any()) } returns expression - - // when - val spec = LiteralSpec("TEST") - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(expression) - - verify(exactly = 1) { - criteriaBuilder.literal("TEST") - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val expression = mockk>() - - every { criteriaBuilder.literal(any()) } returns expression - - // when - val spec = LiteralSpec("TEST") - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(expression) - - verify(exactly = 1) { - criteriaBuilder.literal("TEST") - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val expression = mockk>() - - every { criteriaBuilder.literal(any()) } returns expression - - // when - val spec = LiteralSpec("TEST") - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(expression) - - verify(exactly = 1) { - criteriaBuilder.literal("TEST") - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpecTest.kt deleted file mode 100644 index 1d88c3f1d..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpecTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class MaxSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - val columnExpression = mockk>() - - val maxExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.max(any>()) } returns maxExpression - - // when - val spec = MaxSpec(expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(maxExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.max(columnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val maxExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.max(any>()) } returns maxExpression - - // when - val spec = MaxSpec(column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(maxExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.max(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val maxExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.max(any>()) } returns maxExpression - - // when - val spec = MaxSpec(column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(maxExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.max(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpecTest.kt deleted file mode 100644 index 0f151e6dd..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpecTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class MinSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - val columnExpression = mockk>() - - val minExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.min(any>()) } returns minExpression - - // when - val spec = MinSpec(expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(minExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.min(columnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val minExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.min(any>()) } returns minExpression - - // when - val spec = MinSpec(column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(minExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.min(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val minExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.min(any>()) } returns minExpression - - // when - val spec = MinSpec(column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(minExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.min(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NestedColumnSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NestedColumnSpecTest.kt deleted file mode 100644 index 85f3ffc70..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NestedColumnSpecTest.kt +++ /dev/null @@ -1,132 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -class NestedColumnSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val from = mockk>() - val path = mockk>() - val nestedPath = mockk>() - - every { froms[any>()] } returns from - every { from.get(any()) } returns path - every { path.get(any()) } returns nestedPath - - // when - val spec = NestedColumnSpec( - ColumnSpec(EntitySpec(Data::class.java), "nestedData"), - "nestedId" - ) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(nestedPath) - - verify { - froms[EntitySpec(Data::class.java)] - from.get("nestedData") - path.get("nestedId") - } - - confirmVerified(from, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val from = mockk>() - val path = mockk>() - val nestedPath = mockk>() - - every { froms[any>()] } returns from - every { from.get(any()) } returns path - every { path.get(any()) } returns nestedPath - - // when - val spec = NestedColumnSpec( - ColumnSpec(EntitySpec(Data::class.java), "nestedData"), - "nestedId" - ) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(nestedPath) - - verify { - froms[EntitySpec(Data::class.java)] - from.get("nestedData") - path.get("nestedId") - } - - confirmVerified(from, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val from = mockk>() - val path = mockk>() - val nestedPath = mockk>() - - every { froms[any>()] } returns from - every { from.get(any()) } returns path - every { path.get(any()) } returns nestedPath - - // when - val spec = NestedColumnSpec( - ColumnSpec(EntitySpec(Data::class.java), "nestedData"), - "nestedId" - ) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(nestedPath) - - verify { - froms[EntitySpec(Data::class.java)] - from.get("nestedData") - path.get("nestedId") - } - - confirmVerified(from, froms, deleteQuery, criteriaBuilder) - } - - private class Data { - val nestedData = NestedData() - } - - private class NestedData { - val nestedId: Long = 0L - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NullLiteralSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NullLiteralSpecTest.kt deleted file mode 100644 index f7c76e39e..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NullLiteralSpecTest.kt +++ /dev/null @@ -1,67 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class NullLiteralSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - toCriteriaExpression { it.toCriteriaExpression(froms, query, criteriaBuilder) } - } - - @Test - fun `update toCriteriaExpression`() { - toCriteriaExpression { it.toCriteriaExpression(froms, updateQuery, criteriaBuilder) } - } - - @Test - fun `delete toCriteriaExpression`() { - toCriteriaExpression { it.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) } - } - - private fun toCriteriaExpression(predicate: (NullLiteralSpec) -> Expression) { - // given - val expression = mockk>() - - every { criteriaBuilder.nullLiteral(any()) } returns expression - - // when - val spec = NullLiteralSpec(String::class.java) - - val actual = predicate(spec) - - // then - assertThat(actual).isEqualTo(expression) - - verify(exactly = 1) { - criteriaBuilder.nullLiteral(String::class.java) - } - - confirmVerified(froms, query, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SubqueryExpressionSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SubqueryExpressionSpecTest.kt deleted file mode 100644 index a568f79f2..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SubqueryExpressionSpecTest.kt +++ /dev/null @@ -1,130 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.SubquerySpec -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class SubqueryExpressionSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var abstractQuery: AbstractQuery<*> - - @MockK - private lateinit var criteriaQuery: CriteriaQuery<*> - - @MockK - private lateinit var criteriaDelete: CriteriaDelete<*> - - @MockK - private lateinit var criteriaUpdate: CriteriaUpdate<*> - - @MockK - private lateinit var subquery: Subquery<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @MockK - private lateinit var subqueryCreator: SubqueryCreator - - @Test - fun toCriteriaExpression() { - // given - val spec: SubquerySpec = mockk() - val createdSubquery: Subquery = mockk() - - every { subqueryCreator.createQuery(spec, froms, criteriaQuery, criteriaBuilder) } returns createdSubquery - - // when - val actual = SubqueryExpressionSpec(spec, subqueryCreator) - .toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(createdSubquery) - - verify(exactly = 1) { - subqueryCreator.createQuery(spec, froms, criteriaQuery, criteriaBuilder) - } - - confirmVerified(froms, abstractQuery, criteriaQuery, subquery, criteriaBuilder, subqueryCreator) - } - - @Test - fun `toCriteriaExpression - by criteria update query`() { - // given - val spec: SubquerySpec = mockk() - val createdSubquery: Subquery = mockk() - - every { subqueryCreator.createQuery(spec, froms, criteriaUpdate, criteriaBuilder) } returns createdSubquery - - // when - val actual = SubqueryExpressionSpec(spec, subqueryCreator) - .toCriteriaExpression(froms, criteriaUpdate, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(createdSubquery) - - verify(exactly = 1) { - subqueryCreator.createQuery(spec, froms, criteriaUpdate, criteriaBuilder) - } - - confirmVerified(froms, abstractQuery, criteriaUpdate, subquery, criteriaBuilder, subqueryCreator) - } - - @Test - fun `toCriteriaExpression - by criteria delete query`() { - // given - val spec: SubquerySpec = mockk() - val createdSubquery: Subquery = mockk() - - every { subqueryCreator.createQuery(spec, froms, criteriaDelete, criteriaBuilder) } returns createdSubquery - - // when - val actual = SubqueryExpressionSpec(spec, subqueryCreator) - .toCriteriaExpression(froms, criteriaDelete, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(createdSubquery) - - verify(exactly = 1) { - subqueryCreator.createQuery(spec, froms, criteriaDelete, criteriaBuilder) - } - - confirmVerified(froms, abstractQuery, criteriaDelete, subquery, criteriaBuilder, subqueryCreator) - } - - @Test - fun `toCriteriaExpression - by subquery`() { - // given - val spec: SubquerySpec = mockk() - val createdSubquery: Subquery = mockk() - - every { subqueryCreator.createQuery(spec, froms, subquery, criteriaBuilder) } returns createdSubquery - - // when - val actual = SubqueryExpressionSpec(spec, subqueryCreator) - .toCriteriaExpression(froms, subquery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(createdSubquery) - - verify(exactly = 1) { - subqueryCreator.createQuery(spec, froms, subquery, criteriaBuilder) - } - - confirmVerified(froms, abstractQuery, criteriaQuery, subquery, criteriaBuilder, subqueryCreator) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpecTest.kt deleted file mode 100644 index d7204dbb8..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpecTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class SumSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - val columnExpression = mockk>() - - val sumExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.sum(any>()) } returns sumExpression - - // when - val spec = SumSpec(expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(sumExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.sum(columnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val sumExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.sum(any>()) } returns sumExpression - - // when - val spec = SumSpec(column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(sumExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.sum(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val sumExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.sum(any>()) } returns sumExpression - - // when - val spec = SumSpec(column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(sumExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.sum(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/AndSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/AndSpecTest.kt deleted file mode 100644 index 7118e2105..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/AndSpecTest.kt +++ /dev/null @@ -1,198 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class AndSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - val predicateSpec3: PredicateSpec? = null - - val predicate1: Predicate = mockk() - val predicate2: Predicate = mockk() - val andPredicate: Predicate = mockk() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { criteriaBuilder.and(any(), any()) } returns andPredicate - - // when - val actual = AndSpec(listOf(predicateSpec1, predicateSpec2, predicateSpec3)) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, query, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, query, criteriaBuilder) - criteriaBuilder.and(predicate1, predicate2) - } - - confirmVerified(predicateSpec1, predicateSpec2, froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaPredicate - if predicate is empty then return conjunction`() { - // given - val predicateSpec1: PredicateSpec? = null - val predicateSpec2: PredicateSpec? = null - - val andPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns andPredicate - - // when - val actual = AndSpec(listOf(predicateSpec1, predicateSpec2)).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - val predicateSpec3: PredicateSpec? = null - - val predicate1: Predicate = mockk() - val predicate2: Predicate = mockk() - val andPredicate: Predicate = mockk() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { criteriaBuilder.and(any(), any()) } returns andPredicate - - // when - val actual = AndSpec(listOf(predicateSpec1, predicateSpec2, predicateSpec3)) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - criteriaBuilder.and(predicate1, predicate2) - } - - confirmVerified(predicateSpec1, predicateSpec2, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - if predicate is empty then return conjunction`() { - // given - val predicateSpec1: PredicateSpec? = null - val predicateSpec2: PredicateSpec? = null - - val andPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns andPredicate - - // when - val actual = - AndSpec(listOf(predicateSpec1, predicateSpec2)).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - val predicateSpec3: PredicateSpec? = null - - val predicate1: Predicate = mockk() - val predicate2: Predicate = mockk() - val andPredicate: Predicate = mockk() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { criteriaBuilder.and(any(), any()) } returns andPredicate - - // when - val actual = AndSpec(listOf(predicateSpec1, predicateSpec2, predicateSpec3)) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.and(predicate1, predicate2) - } - - confirmVerified(predicateSpec1, predicateSpec2, froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - if predicate is empty then return conjunction`() { - // given - val predicateSpec1: PredicateSpec? = null - val predicateSpec2: PredicateSpec? = null - - val andPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns andPredicate - - // when - val actual = - AndSpec(listOf(predicateSpec1, predicateSpec2)).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenExpressionSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenExpressionSpecTest.kt deleted file mode 100644 index b73dc32e5..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenExpressionSpecTest.kt +++ /dev/null @@ -1,203 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class BetweenExpressionSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec1: ExpressionSpec = mockk() - val rightExpressionSpec2: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression1: Expression = mockk() - val rightExpression2: Expression = mockk() - - val betweenPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec1.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression1 - every { - rightExpressionSpec2.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression2 - - every { criteriaBuilder.between(any(), any>(), any()) } returns betweenPredicate - - // when - val actual = BetweenExpressionSpec( - leftExpressionSpec, - rightExpressionSpec1, - rightExpressionSpec2 - ).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(betweenPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec1.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec2.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.between(leftExpression, rightExpression1, rightExpression2) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec1, - rightExpressionSpec2, - froms, query, criteriaBuilder - ) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec1: ExpressionSpec = mockk() - val rightExpressionSpec2: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression1: Expression = mockk() - val rightExpression2: Expression = mockk() - - val betweenPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec1.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression1 - every { - rightExpressionSpec2.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression2 - - every { criteriaBuilder.between(any(), any>(), any()) } returns betweenPredicate - - // when - val actual = BetweenExpressionSpec( - leftExpressionSpec, - rightExpressionSpec1, - rightExpressionSpec2 - ).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(betweenPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec1.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec2.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.between(leftExpression, rightExpression1, rightExpression2) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec1, - rightExpressionSpec2, - froms, updateQuery, criteriaBuilder - ) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec1: ExpressionSpec = mockk() - val rightExpressionSpec2: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression1: Expression = mockk() - val rightExpression2: Expression = mockk() - - val betweenPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec1.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression1 - every { - rightExpressionSpec2.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression2 - - every { criteriaBuilder.between(any(), any>(), any()) } returns betweenPredicate - - // when - val actual = BetweenExpressionSpec( - leftExpressionSpec, - rightExpressionSpec1, - rightExpressionSpec2 - ).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(betweenPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec1.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec2.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.between(leftExpression, rightExpression1, rightExpression2) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec1, - rightExpressionSpec2, - froms, deleteQuery, criteriaBuilder - ) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenValueSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenValueSpecTest.kt deleted file mode 100644 index c57cb6bae..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenValueSpecTest.kt +++ /dev/null @@ -1,125 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class BetweenValueSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right1 = 10 - val right2 = 20 - - val leftExpression: Expression = mockk() - - val betweenPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.between(any(), any(), any()) } returns betweenPredicate - - // when - val actual = BetweenValueSpec(leftExpressionSpec, right1, right2) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(betweenPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.between(leftExpression, right1, right2) - } - - confirmVerified(leftExpressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `updateQuery toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right1 = 10 - val right2 = 20 - - val leftExpression: Expression = mockk() - - val betweenPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.between(any(), any(), any()) } returns betweenPredicate - - // when - val actual = BetweenValueSpec(leftExpressionSpec, right1, right2) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(betweenPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.between(leftExpression, right1, right2) - } - - confirmVerified(leftExpressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right1 = 10 - val right2 = 20 - - val leftExpression: Expression = mockk() - - val betweenPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.between(any(), any(), any()) } returns betweenPredicate - - // when - val actual = BetweenValueSpec(leftExpressionSpec, right1, right2) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(betweenPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.between(leftExpression, right1, right2) - } - - confirmVerified(leftExpressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EmptyPredicateSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EmptyPredicateSpecTest.kt deleted file mode 100644 index e925bc766..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EmptyPredicateSpecTest.kt +++ /dev/null @@ -1,65 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class EmptyPredicateSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - toCriteriaPredicate { EmptyPredicateSpec.toCriteriaPredicate(froms, query, criteriaBuilder) } - } - - @Test - fun `update toCriteriaPredicate`() { - toCriteriaPredicate { EmptyPredicateSpec.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) } - } - - @Test - fun `delete toCriteriaPredicate`() { - toCriteriaPredicate { EmptyPredicateSpec.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) } - } - - private fun toCriteriaPredicate(predicate: () -> Predicate) { - // given - val emptyPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns emptyPredicate - - // when - val actual = predicate() - - // then - assertThat(actual).isEqualTo(emptyPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, query, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualExpressionSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualExpressionSpecTest.kt deleted file mode 100644 index aec1f1048..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualExpressionSpecTest.kt +++ /dev/null @@ -1,142 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class EqualExpressionSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val equalPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.equal(leftExpression, rightExpression) } returns equalPredicate - - // when - val actual = EqualExpressionSpec(leftExpressionSpec, rightExpressionSpec) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(equalPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.equal(leftExpression, rightExpression) - } - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val equalPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.equal(leftExpression, rightExpression) } returns equalPredicate - - // when - val actual = EqualExpressionSpec(leftExpressionSpec, rightExpressionSpec) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(equalPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.equal(leftExpression, rightExpression) - } - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val equalPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.equal(leftExpression, rightExpression) } returns equalPredicate - - // when - val actual = EqualExpressionSpec(leftExpressionSpec, rightExpressionSpec) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(equalPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.equal(leftExpression, rightExpression) - } - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualValueSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualValueSpecTest.kt deleted file mode 100644 index 84a136101..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualValueSpecTest.kt +++ /dev/null @@ -1,116 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class EqualValueSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val equalPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) } returns leftExpression - - every { criteriaBuilder.equal(any(), any()) } returns equalPredicate - - // when - val actual = EqualValueSpec(leftExpressionSpec, right).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(equalPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.equal(leftExpression, right) - } - - confirmVerified(leftExpressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val equalPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) } returns leftExpression - - every { criteriaBuilder.equal(any(), any()) } returns equalPredicate - - // when - val actual = EqualValueSpec(leftExpressionSpec, right).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(equalPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.equal(leftExpression, right) - } - - confirmVerified(leftExpressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val equalPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) } returns leftExpression - - every { criteriaBuilder.equal(any(), any()) } returns equalPredicate - - // when - val actual = EqualValueSpec(leftExpressionSpec, right).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(equalPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.equal(leftExpression, right) - } - - confirmVerified(leftExpressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/ExistsSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/ExistsSpecTest.kt deleted file mode 100644 index 41d0c7be7..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/ExistsSpecTest.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class ExistsSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val subqueryExpressionSpec: SubqueryExpressionSpec = mockk() - - val subquery: Subquery = mockk() - val existsPredicate: Predicate = mockk() - - every { subqueryExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns subquery - every { criteriaBuilder.exists(any>()) } returns existsPredicate - - // when - val actual = ExistsSpec(subqueryExpressionSpec) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(existsPredicate) - - verify(exactly = 1) { - subqueryExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.exists(subquery) - } - - confirmVerified(subqueryExpressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val subqueryExpressionSpec: SubqueryExpressionSpec = mockk() - - val subquery: Subquery = mockk() - val existsPredicate: Predicate = mockk() - - every { subqueryExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns subquery - every { criteriaBuilder.exists(any>()) } returns existsPredicate - - // when - val actual = ExistsSpec(subqueryExpressionSpec) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(existsPredicate) - - verify(exactly = 1) { - subqueryExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.exists(subquery) - } - - confirmVerified(subqueryExpressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val subqueryExpressionSpec: SubqueryExpressionSpec = mockk() - - val subquery: Subquery = mockk() - val existsPredicate: Predicate = mockk() - - every { subqueryExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns subquery - every { criteriaBuilder.exists(any>()) } returns existsPredicate - - // when - val actual = ExistsSpec(subqueryExpressionSpec) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(existsPredicate) - - verify(exactly = 1) { - subqueryExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.exists(subquery) - } - - confirmVerified(subqueryExpressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanExpressionSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanExpressionSpecTest.kt deleted file mode 100644 index 5c75643c0..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanExpressionSpecTest.kt +++ /dev/null @@ -1,296 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class GreaterThanExpressionSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val greaterThanOrEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { - criteriaBuilder.greaterThanOrEqualTo(any(), any>()) - } returns greaterThanOrEqualToPredicate - - // when - val actual = GreaterThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, true) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanOrEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.greaterThanOrEqualTo(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, query, criteriaBuilder - ) - } - - @Test - fun `toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val greaterThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.greaterThan(any(), any>()) } returns greaterThanPredicate - - // when - val actual = GreaterThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, false) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.greaterThan(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, query, criteriaBuilder - ) - } - - @Test - fun `update toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val greaterThanOrEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { - criteriaBuilder.greaterThanOrEqualTo(any(), any>()) - } returns greaterThanOrEqualToPredicate - - // when - val actual = GreaterThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, true) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanOrEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.greaterThanOrEqualTo(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, updateQuery, criteriaBuilder - ) - } - - @Test - fun `update toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val greaterThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.greaterThan(any(), any>()) } returns greaterThanPredicate - - // when - val actual = GreaterThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, false) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.greaterThan(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, updateQuery, criteriaBuilder - ) - } - - @Test - fun `delete toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val greaterThanOrEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { - criteriaBuilder.greaterThanOrEqualTo(any(), any>()) - } returns greaterThanOrEqualToPredicate - - // when - val actual = GreaterThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, true) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanOrEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.greaterThanOrEqualTo(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, deleteQuery, criteriaBuilder - ) - } - - @Test - fun `delete toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val greaterThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.greaterThan(any(), any>()) } returns greaterThanPredicate - - // when - val actual = GreaterThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, false) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.greaterThan(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, deleteQuery, criteriaBuilder - ) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanValueSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanValueSpecTest.kt deleted file mode 100644 index 657c61258..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanValueSpecTest.kt +++ /dev/null @@ -1,206 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class GreaterThanValueSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val greaterThanEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.greaterThanOrEqualTo(any(), any()) } returns greaterThanEqualToPredicate - - // when - val actual = GreaterThanValueSpec(leftExpressionSpec, right, true) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.greaterThanOrEqualTo(leftExpression, right) - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val greaterThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.greaterThan(any(), any()) } returns greaterThanPredicate - - // when - val actual = GreaterThanValueSpec(leftExpressionSpec, right, false) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.greaterThan(leftExpression, right) - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val greaterThanEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.greaterThanOrEqualTo(any(), any()) } returns greaterThanEqualToPredicate - - // when - val actual = GreaterThanValueSpec(leftExpressionSpec, right, true) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.greaterThanOrEqualTo(leftExpression, right) - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val greaterThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.greaterThan(any(), any()) } returns greaterThanPredicate - - // when - val actual = GreaterThanValueSpec(leftExpressionSpec, right, false) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.greaterThan(leftExpression, right) - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val greaterThanEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.greaterThanOrEqualTo(any(), any()) } returns greaterThanEqualToPredicate - - // when - val actual = GreaterThanValueSpec(leftExpressionSpec, right, true) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.greaterThanOrEqualTo(leftExpression, right) - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val greaterThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.greaterThan(any(), any()) } returns greaterThanPredicate - - // when - val actual = GreaterThanValueSpec(leftExpressionSpec, right, false) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.greaterThan(leftExpression, right) - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InExpressionSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InExpressionSpecTest.kt deleted file mode 100644 index 624846c63..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InExpressionSpecTest.kt +++ /dev/null @@ -1,278 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class InExpressionSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec1: ExpressionSpec = mockk() - val rightExpressionSpec2: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression1: Expression = mockk() - val rightExpression2: Expression = mockk() - - val `in`: CriteriaBuilder.In = mockk() - - every { criteriaBuilder.`in`(any>()) } returns `in` - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec1.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression1 - every { - rightExpressionSpec2.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression2 - - every { `in`.value(rightExpression1) } returns `in` - every { `in`.value(rightExpression2) } returns `in` - - // when - val actual = InExpressionSpec( - leftExpressionSpec, - listOf(rightExpressionSpec1, rightExpressionSpec2) - ).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(`in`) - - verify(exactly = 1) { - criteriaBuilder.`in`(leftExpression) - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec1.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec2.toCriteriaExpression(froms, query, criteriaBuilder) - - `in`.value(rightExpression1) - `in`.value(rightExpression2) - } - - confirmVerified( - leftExpressionSpec, rightExpressionSpec1, rightExpressionSpec2, - froms, query, criteriaBuilder, - ) - } - - @Test - fun `toCriteriaPredicate - empty rights`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - - val emptyPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns emptyPredicate - - // when - val actual = InExpressionSpec( - leftExpressionSpec, emptyList() - ).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(emptyPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(leftExpressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec1: ExpressionSpec = mockk() - val rightExpressionSpec2: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression1: Expression = mockk() - val rightExpression2: Expression = mockk() - - val `in`: CriteriaBuilder.In = mockk() - - every { criteriaBuilder.`in`(any>()) } returns `in` - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec1.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression1 - every { - rightExpressionSpec2.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression2 - - every { `in`.value(rightExpression1) } returns `in` - every { `in`.value(rightExpression2) } returns `in` - - // when - val actual = InExpressionSpec( - leftExpressionSpec, - listOf(rightExpressionSpec1, rightExpressionSpec2) - ).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(`in`) - - verify(exactly = 1) { - criteriaBuilder.`in`(leftExpression) - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec1.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec2.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - `in`.value(rightExpression1) - `in`.value(rightExpression2) - } - - confirmVerified( - leftExpressionSpec, rightExpressionSpec1, rightExpressionSpec2, - froms, updateQuery, criteriaBuilder, - ) - } - - @Test - fun `update toCriteriaPredicate - empty rights`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - - val emptyPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns emptyPredicate - - // when - val actual = InExpressionSpec( - leftExpressionSpec, emptyList() - ).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(emptyPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(leftExpressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec1: ExpressionSpec = mockk() - val rightExpressionSpec2: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression1: Expression = mockk() - val rightExpression2: Expression = mockk() - - val `in`: CriteriaBuilder.In = mockk() - - every { criteriaBuilder.`in`(any>()) } returns `in` - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec1.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression1 - every { - rightExpressionSpec2.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression2 - - every { `in`.value(rightExpression1) } returns `in` - every { `in`.value(rightExpression2) } returns `in` - - // when - val actual = InExpressionSpec( - leftExpressionSpec, - listOf(rightExpressionSpec1, rightExpressionSpec2) - ).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(`in`) - - verify(exactly = 1) { - criteriaBuilder.`in`(leftExpression) - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec1.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec2.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - `in`.value(rightExpression1) - `in`.value(rightExpression2) - } - - confirmVerified( - leftExpressionSpec, rightExpressionSpec1, rightExpressionSpec2, - froms, deleteQuery, criteriaBuilder, - ) - } - - @Test - fun `delete toCriteriaPredicate - empty rights`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - - val emptyPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns emptyPredicate - - // when - val actual = InExpressionSpec( - leftExpressionSpec, emptyList() - ).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(emptyPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(leftExpressionSpec, froms, deleteQuery, criteriaBuilder) - } -} 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 deleted file mode 100644 index d64a59cfd..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpecTest.kt +++ /dev/null @@ -1,203 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class InValueSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right1 = 10 - val right2 = 20 - - val leftExpression: Expression = mockk() - - val `in`: CriteriaBuilder.In = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.`in`(any>()) } returns `in` - every { `in`.value(right1) } returns `in` - every { `in`.value(right2) } returns `in` - - // when - val actual = InValueSpec(leftExpressionSpec, listOf(right1, right2)) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(`in`) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.`in`(leftExpression) - `in`(right1) - `in`(right2) - } - - confirmVerified(leftExpressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaPredicate - empty rights`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - - val falsePredicate: Predicate = mockk() - - every { criteriaBuilder.disjunction() } returns falsePredicate - - // when - val actual = InValueSpec(leftExpressionSpec, emptyList()) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(falsePredicate) - - verify(exactly = 1) { - criteriaBuilder.disjunction() - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right1 = 10 - val right2 = 20 - - val leftExpression: Expression = mockk() - - val `in`: CriteriaBuilder.In = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.`in`(any>()) } returns `in` - every { `in`.value(right1) } returns `in` - every { `in`.value(right2) } returns `in` - - // when - val actual = InValueSpec(leftExpressionSpec, listOf(right1, right2)) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(`in`) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.`in`(leftExpression) - `in`(right1) - `in`(right2) - } - - confirmVerified(leftExpressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - empty rights`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - - val falsePredicate: Predicate = mockk() - - every { criteriaBuilder.disjunction() } returns falsePredicate - - // when - val actual = InValueSpec(leftExpressionSpec, emptyList()) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(falsePredicate) - - verify(exactly = 1) { - criteriaBuilder.disjunction() - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right1 = 10 - val right2 = 20 - - val leftExpression: Expression = mockk() - - val `in`: CriteriaBuilder.In = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.`in`(any>()) } returns `in` - every { `in`.value(right1) } returns `in` - every { `in`.value(right2) } returns `in` - - // when - val actual = InValueSpec(leftExpressionSpec, listOf(right1, right2)) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(`in`) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.`in`(leftExpression) - `in`(right1) - `in`(right2) - } - - confirmVerified(leftExpressionSpec, froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - empty rights`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - - val falsePredicate: Predicate = mockk() - - every { criteriaBuilder.disjunction() } returns falsePredicate - - // when - val actual = InValueSpec(leftExpressionSpec, emptyList()) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(falsePredicate) - - verify(exactly = 1) { - criteriaBuilder.disjunction() - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsFalseSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsFalseSpecTest.kt deleted file mode 100644 index 67a3fc563..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsFalseSpecTest.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class IsFalseSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isFalsePredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) } returns expression - every { criteriaBuilder.isFalse(expression) } returns isFalsePredicate - - // when - val actual = IsFalseSpec(expressionSpec).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isFalsePredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.isFalse(expression) - } - - confirmVerified(expressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isFalsePredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.isFalse(expression) } returns isFalsePredicate - - // when - val actual = IsFalseSpec(expressionSpec).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isFalsePredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.isFalse(expression) - } - - confirmVerified(expressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isFalsePredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.isFalse(expression) } returns isFalsePredicate - - // when - val actual = IsFalseSpec(expressionSpec).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isFalsePredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.isFalse(expression) - } - - confirmVerified(expressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsNullSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsNullSpecTest.kt deleted file mode 100644 index b37620616..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsNullSpecTest.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class IsNullSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isNullPredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) } returns expression - every { criteriaBuilder.isNull(expression) } returns isNullPredicate - - // when - val actual = IsNullSpec(expressionSpec).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isNullPredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.isNull(expression) - } - - confirmVerified(expressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isNullPredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.isNull(expression) } returns isNullPredicate - - // when - val actual = IsNullSpec(expressionSpec).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isNullPredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.isNull(expression) - } - - confirmVerified(expressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isNullPredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.isNull(expression) } returns isNullPredicate - - // when - val actual = IsNullSpec(expressionSpec).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isNullPredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.isNull(expression) - } - - confirmVerified(expressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsTrueSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsTrueSpecTest.kt deleted file mode 100644 index f11a7ecad..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsTrueSpecTest.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class IsTrueSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isTruePredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) } returns expression - every { criteriaBuilder.isTrue(expression) } returns isTruePredicate - - // when - val actual = IsTrueSpec(expressionSpec).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isTruePredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.isTrue(expression) - } - - confirmVerified(expressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isTruePredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.isTrue(expression) } returns isTruePredicate - - // when - val actual = IsTrueSpec(expressionSpec).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isTruePredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.isTrue(expression) - } - - confirmVerified(expressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isTruePredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.isTrue(expression) } returns isTruePredicate - - // when - val actual = IsTrueSpec(expressionSpec).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isTruePredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.isTrue(expression) - } - - confirmVerified(expressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanExpressionSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanExpressionSpecTest.kt deleted file mode 100644 index 4d96274d4..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanExpressionSpecTest.kt +++ /dev/null @@ -1,296 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class LessThanExpressionSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val lessThanOrEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { - criteriaBuilder.lessThanOrEqualTo(any(), any>()) - } returns lessThanOrEqualToPredicate - - // when - val actual = LessThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, true) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanOrEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.lessThanOrEqualTo(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, query, criteriaBuilder - ) - } - - @Test - fun `toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val lessThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.lessThan(any(), any>()) } returns lessThanPredicate - - // when - val actual = LessThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, false) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.lessThan(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, query, criteriaBuilder - ) - } - - @Test - fun `update toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val lessThanOrEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { - criteriaBuilder.lessThanOrEqualTo(any(), any>()) - } returns lessThanOrEqualToPredicate - - // when - val actual = LessThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, true) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanOrEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.lessThanOrEqualTo(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, updateQuery, criteriaBuilder - ) - } - - @Test - fun `update toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val lessThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.lessThan(any(), any>()) } returns lessThanPredicate - - // when - val actual = LessThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, false) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.lessThan(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, updateQuery, criteriaBuilder - ) - } - - @Test - fun `delete toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val lessThanOrEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { - criteriaBuilder.lessThanOrEqualTo(any(), any>()) - } returns lessThanOrEqualToPredicate - - // when - val actual = LessThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, true) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanOrEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.lessThanOrEqualTo(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, deleteQuery, criteriaBuilder - ) - } - - @Test - fun `delete toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val lessThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.lessThan(any(), any>()) } returns lessThanPredicate - - // when - val actual = LessThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, false) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.lessThan(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, deleteQuery, criteriaBuilder - ) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanValueSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanValueSpecTest.kt deleted file mode 100644 index 1cbd14d2f..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanValueSpecTest.kt +++ /dev/null @@ -1,206 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class LessThanValueSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val lessThanEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.lessThanOrEqualTo(any(), any()) } returns lessThanEqualToPredicate - - // when - val actual = LessThanValueSpec(leftExpressionSpec, right, true) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.lessThanOrEqualTo(leftExpression, right) - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val lessThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.lessThan(any(), any()) } returns lessThanPredicate - - // when - val actual = LessThanValueSpec(leftExpressionSpec, right, false) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.lessThan(leftExpression, right) - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val lessThanEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.lessThanOrEqualTo(any(), any()) } returns lessThanEqualToPredicate - - // when - val actual = LessThanValueSpec(leftExpressionSpec, right, true) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.lessThanOrEqualTo(leftExpression, right) - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val lessThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.lessThan(any(), any()) } returns lessThanPredicate - - // when - val actual = LessThanValueSpec(leftExpressionSpec, right, false) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.lessThan(leftExpression, right) - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val lessThanEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.lessThanOrEqualTo(any(), any()) } returns lessThanEqualToPredicate - - // when - val actual = LessThanValueSpec(leftExpressionSpec, right, true) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.lessThanOrEqualTo(leftExpression, right) - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val lessThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.lessThan(any(), any()) } returns lessThanPredicate - - // when - val actual = LessThanValueSpec(leftExpressionSpec, right, false) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.lessThan(leftExpression, right) - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LikeSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LikeSpecTest.kt deleted file mode 100644 index 165c6f9c0..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LikeSpecTest.kt +++ /dev/null @@ -1,113 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class LikeSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = "%test%" - - val likeExpression: Expression = mockk() - - val likePredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) } returns likeExpression - every { criteriaBuilder.like(likeExpression, right) } returns likePredicate - - // when - val actual = LikeSpec(leftExpressionSpec, right).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(likePredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.like(likeExpression, right) - } - - confirmVerified(leftExpressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = "%test%" - - val likeExpression: Expression = mockk() - - val likePredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) } returns likeExpression - every { criteriaBuilder.like(likeExpression, right) } returns likePredicate - - // when - val actual = LikeSpec(leftExpressionSpec, right).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(likePredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.like(likeExpression, right) - } - - confirmVerified(leftExpressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = "%test%" - - val likeExpression: Expression = mockk() - - val likePredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) } returns likeExpression - every { criteriaBuilder.like(likeExpression, right) } returns likePredicate - - // when - val actual = LikeSpec(leftExpressionSpec, right).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(likePredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.like(likeExpression, right) - } - - confirmVerified(leftExpressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/NotSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/NotSpecTest.kt deleted file mode 100644 index 799b97821..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/NotSpecTest.kt +++ /dev/null @@ -1,106 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class NotSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - val notPredicate: Predicate = mockk() - - every { predicateSpec.toCriteriaPredicate(froms, query, criteriaBuilder) } returns predicate - every { criteriaBuilder.not(predicate) } returns notPredicate - - // when - val actual = NotSpec(predicateSpec).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(notPredicate) - - verify(exactly = 1) { - predicateSpec.toCriteriaPredicate(froms, query, criteriaBuilder) - criteriaBuilder.not(predicate) - } - - confirmVerified(predicateSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - val notPredicate: Predicate = mockk() - - every { predicateSpec.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) } returns predicate - every { criteriaBuilder.not(predicate) } returns notPredicate - - // when - val actual = NotSpec(predicateSpec).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(notPredicate) - - verify(exactly = 1) { - predicateSpec.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - criteriaBuilder.not(predicate) - } - - confirmVerified(predicateSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - val notPredicate: Predicate = mockk() - - every { predicateSpec.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) } returns predicate - every { criteriaBuilder.not(predicate) } returns notPredicate - - // when - val actual = NotSpec(predicateSpec).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(notPredicate) - - verify(exactly = 1) { - predicateSpec.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.not(predicate) - } - - confirmVerified(predicateSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/OrSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/OrSpecTest.kt deleted file mode 100644 index fc82f91fe..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/OrSpecTest.kt +++ /dev/null @@ -1,198 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class OrSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - val predicateSpec3: PredicateSpec? = null - - val predicate1: Predicate = mockk() - val predicate2: Predicate = mockk() - val orPredicate: Predicate = mockk() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { criteriaBuilder.or(any(), any()) } returns orPredicate - - // when - val actual = OrSpec(listOf(predicateSpec1, predicateSpec2, predicateSpec3)) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(orPredicate) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, query, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, query, criteriaBuilder) - criteriaBuilder.or(predicate1, predicate2) - } - - confirmVerified(predicateSpec1, predicateSpec2, froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaPredicate - if predicate is empty then return conjunction`() { - // given - val predicateSpec1: PredicateSpec? = null - val predicateSpec2: PredicateSpec? = null - - val andPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns andPredicate - - // when - val actual = OrSpec(listOf(predicateSpec1, predicateSpec2)).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - val predicateSpec3: PredicateSpec? = null - - val predicate1: Predicate = mockk() - val predicate2: Predicate = mockk() - val orPredicate: Predicate = mockk() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { criteriaBuilder.or(any(), any()) } returns orPredicate - - // when - val actual = OrSpec(listOf(predicateSpec1, predicateSpec2, predicateSpec3)) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(orPredicate) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - criteriaBuilder.or(predicate1, predicate2) - } - - confirmVerified(predicateSpec1, predicateSpec2, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - if predicate is empty then return conjunction`() { - // given - val predicateSpec1: PredicateSpec? = null - val predicateSpec2: PredicateSpec? = null - - val andPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns andPredicate - - // when - val actual = - OrSpec(listOf(predicateSpec1, predicateSpec2)).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - val predicateSpec3: PredicateSpec? = null - - val predicate1: Predicate = mockk() - val predicate2: Predicate = mockk() - val orPredicate: Predicate = mockk() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { criteriaBuilder.or(any(), any()) } returns orPredicate - - // when - val actual = OrSpec(listOf(predicateSpec1, predicateSpec2, predicateSpec3)) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(orPredicate) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.or(predicate1, predicate2) - } - - confirmVerified(predicateSpec1, predicateSpec2, froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - if predicate is empty then return conjunction`() { - // given - val predicateSpec1: PredicateSpec? = null - val predicateSpec2: PredicateSpec? = null - - val andPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns andPredicate - - // when - val actual = - OrSpec(listOf(predicateSpec1, predicateSpec2)).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/PredicateSpecTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/PredicateSpecTest.kt deleted file mode 100644 index 27414b4e8..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/PredicateSpecTest.kt +++ /dev/null @@ -1,80 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import jakarta.persistence.criteria.* - -internal class PredicateSpecTest : WithKotlinJdslAssertions { - private val predicateSpec1: PredicateSpec = object : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - } - - private val predicateSpec2: PredicateSpec = object : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - } - - @Test - fun isEmpty() { - assertThat(PredicateSpec.empty.isEmpty()).isTrue - } - - @Test - fun reverse() { - assertThat(predicateSpec1.reverse()).isEqualTo(NotSpec(predicateSpec1)) - } - - @Test - fun and() { - assertThat(predicateSpec1 and predicateSpec2).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun or() { - assertThat(predicateSpec1 or predicateSpec2).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDslExtensionsTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDslExtensionsTest.kt deleted file mode 100644 index d6ebfd9fc..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDslExtensionsTest.kt +++ /dev/null @@ -1,411 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.* -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MockKExtension::class) -internal class ExpressionDslExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var dsl: ExpressionDsl - - @Test - fun col() { - // given - val columnSpec: ColumnSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::id) } returns columnSpec - } - - // when - val actual = with(dsl) { col(Data1::id) } - - // then - assertThat(actual).isEqualTo(columnSpec) - - verify(exactly = 1) { - with(dsl) { column(EntitySpec(Data1::class.java), Data1::id) } - } - - confirmVerified(dsl) - } - - @Test - fun column() { - // given - val columnSpec: ColumnSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::id) } returns columnSpec - } - - // when - val actual = with(dsl) { column(Data1::id) } - - // then - assertThat(actual).isEqualTo(columnSpec) - - verify(exactly = 1) { - with(dsl) { column(EntitySpec(Data1::class.java), Data1::id) } - } - - confirmVerified(dsl) - } - - @Test - fun nullLiteral() { - // given - val nullLiteral: NullLiteralSpec = mockk() - - with(dsl) { - every { nullLiteral(String::class.java) } returns nullLiteral - } - - // when - val actual = with(dsl) { nullLiteral() } - - // then - assertThat(actual).isEqualTo(nullLiteral) - - verify(exactly = 1) { - with(dsl) { nullLiteral(String::class.java) } - } - - confirmVerified(dsl) - } - - @Test - fun max() { - // given - val columnSpec: ColumnSpec = mockk() - val maxSpec: MaxSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { max(columnSpec) } returns maxSpec - } - - // when - val actual = with(dsl) { max(Data1::price) } - - // then - assertThat(actual).isEqualTo(maxSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - max(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun min() { - // given - val columnSpec: ColumnSpec = mockk() - val minSpec: MinSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { min(columnSpec) } returns minSpec - } - - // when - val actual = with(dsl) { min(Data1::price) } - - // then - assertThat(actual).isEqualTo(minSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - min(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun avg() { - // given - val columnSpec: ColumnSpec = mockk() - val avgSpec: AvgSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { avg(columnSpec) } returns avgSpec - } - - // when - val actual = with(dsl) { avg(Data1::price) } - - // then - assertThat(actual).isEqualTo(avgSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - avg(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun sum() { - // given - val columnSpec: ColumnSpec = mockk() - val sumSpec: SumSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { sum(columnSpec) } returns sumSpec - } - - // when - val actual = with(dsl) { sum(Data1::price) } - - // then - assertThat(actual).isEqualTo(sumSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - sum(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun count() { - // given - val columnSpec: ColumnSpec = mockk() - val countSpec: CountSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { count(true, columnSpec) } returns countSpec - } - - // when - val actual = with(dsl) { count(distinct = true, Data1::price) } - - // then - assertThat(actual).isEqualTo(countSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - count(true, columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun countNonDistinct() { - // given - val columnSpec: ColumnSpec = mockk() - val countSpec: CountSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { count(columnSpec) } returns countSpec - } - - // when - val actual = with(dsl) { count(Data1::price) } - - // then - assertThat(actual).isEqualTo(countSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - count(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun countDistinct() { - // given - val columnSpec: ColumnSpec = mockk() - val countSpec: CountSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { countDistinct(columnSpec) } returns countSpec - } - - // when - val actual = with(dsl) { countDistinct(Data1::price) } - - // then - assertThat(actual).isEqualTo(countSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - countDistinct(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun greatest() { - // given - val columnSpec: ColumnSpec = mockk() - val greatestSpec: GreatestSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { greatest(columnSpec) } returns greatestSpec - } - - // when - val actual = with(dsl) { greatest(Data1::price) } - - // then - assertThat(actual).isEqualTo(greatestSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - greatest(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun least() { - // given - val columnSpec: ColumnSpec = mockk() - val leastSpec: LeastSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { least(columnSpec) } returns leastSpec - } - - // when - val actual = with(dsl) { least(Data1::price) } - - // then - assertThat(actual).isEqualTo(leastSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - least(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun functionVarArg() { - // given - val columnSpec: ColumnSpec = mockk() - val literal1: LiteralSpec = mockk() - val literal2: LiteralSpec = mockk() - val functionSpec: FunctionSpec = mockk() - val entitySpec = EntitySpec(Data1::class.java) - - with(dsl) { - every { literal(1) } returns literal1 - every { literal(2) } returns literal2 - every { column(entitySpec, Data1::id) } returns columnSpec - every { function("substring", listOf(columnSpec, literal1, literal2)) } returns functionSpec - } - - // when - val actual = with(dsl) { function("substring", column(entitySpec, Data1::id), literal(1), literal(2)) } - - // then - assertThat(actual).isEqualTo(functionSpec) - - verify(exactly = 1) { - with(dsl) { - literal(1) - literal(2) - column(entitySpec, Data1::id) - function("substring", listOf(columnSpec, literal1, literal2)) - } - } - - confirmVerified(dsl) - } - - @Test - fun functionList() { - // given - val columnSpec: ColumnSpec = mockk() - val literal1: LiteralSpec = mockk() - val literal2: LiteralSpec = mockk() - val functionSpec: FunctionSpec = mockk() - val entitySpec = EntitySpec(Data1::class.java) - - with(dsl) { - every { literal(1) } returns literal1 - every { literal(2) } returns literal2 - every { column(entitySpec, Data1::id) } returns columnSpec - every { - function( - "substring", - String::class.java, - listOf(columnSpec, literal1, literal2) - ) - } returns functionSpec - } - - // when - val actual = - with(dsl) { function("substring", listOf(column(entitySpec, Data1::id), literal(1), literal(2))) } - - // then - assertThat(actual).isEqualTo(functionSpec) - - verify(exactly = 1) { - with(dsl) { - literal(1) - literal(2) - column(entitySpec, Data1::id) - function( - "substring", - String::class.java, - listOf(columnSpec, literal1, literal2) - ) - } - } - - confirmVerified(dsl) - } - - class Data1 { - val id: String = "10" - val price: Int = 100 - } -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/AssociateDslExtensionsTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/AssociateDslExtensionsTest.kt deleted file mode 100644 index 70347c090..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/AssociateDslExtensionsTest.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.justRun -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.JoinType - -@ExtendWith(MockKExtension::class) -internal class AssociateDslExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var dsl: AssociateDsl - - @Test - fun associate() { - // given - with(dsl) { - justRun { associate(Data1::class, Data2::class, Relation("data2"), JoinType.LEFT) } - justRun { associate(Data1::class, Data2::class, Relation("data2List"), JoinType.RIGHT) } - } - - // when - with(dsl) { - associate(Data1::data2, JoinType.LEFT) - associate(Data1::data2List, JoinType.RIGHT) - } - - // then - verify(exactly = 1) { - with(dsl) { - associate(Data1::class, Data2::class, Relation("data2"), JoinType.LEFT) - associate(Data1::class, Data2::class, Relation("data2List"), JoinType.RIGHT) - } - } - - confirmVerified(dsl) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FetchDslExtensionsTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FetchDslExtensionsTest.kt deleted file mode 100644 index c259034f7..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FetchDslExtensionsTest.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.justRun -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.JoinType - -@ExtendWith(MockKExtension::class) -internal class FetchDslExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var dsl: FetchDsl - - @Test - fun fetch() { - // given - with(dsl) { - justRun { fetch(Data1::class, Data2::class, Relation("data2"), JoinType.LEFT) } - justRun { fetch(Data1::class, Data2::class, Relation("data2List"), JoinType.RIGHT) } - } - - // when - with(dsl) { - fetch(Data1::data2, JoinType.LEFT) - fetch(Data1::data2List, JoinType.RIGHT) - } - - // then - verify(exactly = 1) { - with(dsl) { - fetch(Data1::class, Data2::class, Relation("data2"), JoinType.LEFT) - fetch(Data1::class, Data2::class, Relation("data2List"), JoinType.RIGHT) - } - } - - confirmVerified(dsl) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/JoinDslExtensionsTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/JoinDslExtensionsTest.kt deleted file mode 100644 index 161b776f6..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/JoinDslExtensionsTest.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.justRun -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.criteria.JoinType - -@ExtendWith(MockKExtension::class) -internal class JoinDslExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var dsl: JoinDsl - - @Test - fun join() { - // given - with(dsl) { - justRun { join(Data1::class, Data2::class, Relation("data2"), JoinType.LEFT) } - justRun { join(Data1::class, Data2::class, Relation("data2List"), JoinType.RIGHT) } - } - - // when - with(dsl) { - join(Data1::data2, JoinType.LEFT) - join(Data1::data2List, JoinType.RIGHT) - } - - // then - verify(exactly = 1) { - with(dsl) { - join(Data1::class, Data2::class, Relation("data2"), JoinType.LEFT) - join(Data1::class, Data2::class, Relation("data2List"), JoinType.RIGHT) - } - } - - confirmVerified(dsl) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} diff --git a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/set/SetParameterDslExtensionsTest.kt b/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/set/SetParameterDslExtensionsTest.kt deleted file mode 100644 index 996aa4c37..000000000 --- a/query-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/set/SetParameterDslExtensionsTest.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.set - -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MockKExtension::class) -internal class SetParameterDslExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var dsl: SetParameterDsl - - @Test - fun `setParams vararg`() { - // given - val columnSpec: ColumnSpec = mockk() - - with(dsl) { - every { setParams(columnSpec to null) } just runs - } - - // when - with(dsl) { setParams(columnSpec to null) } - - // then - verify(exactly = 1) { - with(dsl) { setParams(columnSpec to null) } - } - - confirmVerified(dsl) - } - - @Test - fun setParams() { - // given - val columnSpec: ColumnSpec = mockk() - - with(dsl) { - every { setParams(mapOf(columnSpec to null)) } just runs - } - - // when - with(dsl) { setParams(mapOf(columnSpec to null)) } - - // then - verify(exactly = 1) { - with(dsl) { setParams(mapOf(columnSpec to null)) } - } - - confirmVerified(dsl) - } - - @Test - fun set() { - // given - val columnSpec: ColumnSpec = mockk() - - with(dsl) { - every { set(columnSpec, null) } just runs - } - - // when - with(dsl) { set(columnSpec, null) } - - // then - verify(exactly = 1) { - with(dsl) { set(columnSpec, null) } - } - - confirmVerified(dsl) - } - -} diff --git a/query/build.gradle.kts b/query/build.gradle.kts index 60b6ce57a..7d82dc72f 100644 --- a/query/build.gradle.kts +++ b/query/build.gradle.kts @@ -1,14 +1,2 @@ -apply() - dependencies { - compileOnly(libs.java.persistence.api) - compileOnly(libs.slf4j) - compileOnly(libs.hibernate) - - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntity) - testImplementation(libs.java.persistence.api) - testImplementation(libs.hibernate) - testImplementation(libs.h2) } - diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaDeleteQuerySpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaDeleteQuerySpec.kt deleted file mode 100644 index ec977a148..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaDeleteQuerySpec.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaDeleteQuerySpec { - val targetEntity: Class - val from: FromClause - val associate: SimpleAssociatedJoinClause - val where: CriteriaQueryWhereClause - val jpaHint: JpaQueryHintClause - val sqlHint: SqlQueryHintClause -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaQuerySpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaQuerySpec.kt deleted file mode 100644 index d9750f590..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaQuerySpec.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaQuerySpec { - val select: CriteriaQuerySelectClause - val from: FromClause<*> - val join: JoinClause - val where: CriteriaQueryWhereClause - val groupBy: CriteriaQueryGroupByClause - val having: CriteriaQueryHavingClause - val orderBy: CriteriaQueryOrderByClause - val limit: QueryLimitClause - val jpaHint: JpaQueryHintClause - val sqlHint: SqlQueryHintClause -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaUpdateQuerySpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaUpdateQuerySpec.kt deleted file mode 100644 index 0f554bab1..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/CriteriaUpdateQuerySpec.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaUpdateQuerySpec { - val targetEntity: Class - val from: FromClause - val associate: SimpleAssociatedJoinClause - val where: CriteriaQueryWhereClause - val jpaHint: JpaQueryHintClause - val sqlHint: SqlQueryHintClause - val set: SetClause -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/SubquerySpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/SubquerySpec.kt deleted file mode 100644 index 4306f80d2..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/SubquerySpec.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.SubqueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.SubqueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.select.SubquerySelectClause -import com.linecorp.kotlinjdsl.query.clause.where.SubqueryWhereClause - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SubquerySpec { - val select: SubquerySelectClause - val from: FromClause<*> - val join: JoinClause - val where: SubqueryWhereClause - val groupBy: SubqueryGroupByClause - val having: SubqueryHavingClause -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/FromClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/FromClause.kt deleted file mode 100644 index cce420f03..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/FromClause.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.from - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import javax.persistence.criteria.AbstractQuery -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaDelete -import javax.persistence.criteria.CriteriaUpdate - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class FromClause( - private val entity: EntitySpec, -) { - fun join(joinClause: JoinClause, query: AbstractQuery<*>, criteriaBuilder: CriteriaBuilder): Froms { - return Joiner(entity, joinClause.joins, query, criteriaBuilder).joinAll() - } - - fun associate(joinClause: SimpleAssociatedJoinClause, query: CriteriaUpdate): Froms { - return SimpleAssociator(entity, joinClause.joins, query.from(entity.type)).associateAll() - } - - fun associate(joinClause: SimpleAssociatedJoinClause, query: CriteriaDelete): Froms { - return SimpleAssociator(entity, joinClause.joins, query.from(entity.type)).associateAll() - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/JoinClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/JoinClause.kt deleted file mode 100644 index b6b55d1b5..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/JoinClause.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.from - -import com.linecorp.kotlinjdsl.query.spec.JoinSpec - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class JoinClause( - val joins: List>, -) diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/Joiner.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/Joiner.kt deleted file mode 100644 index e67b42acc..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/Joiner.kt +++ /dev/null @@ -1,153 +0,0 @@ -@file:Suppress("UNCHECKED_CAST") - -package com.linecorp.kotlinjdsl.query.clause.from - -import com.linecorp.kotlinjdsl.query.spec.* -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import java.util.* -import javax.persistence.criteria.* - -// In the case of Treat, Type should be clearly treated as a parent/child relationship, -// but it was used because it needed a parent/child relationship that can be cast forcibly due to the current structure that receives JoinSpec as *. -// Since it is used only internally, it is declared as a private alias. -private typealias ExplicitErasedParent = Number -private typealias ExplicitErasedChild = Int - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -class Joiner( - fromEntity: EntitySpec<*>, - joins: Collection>, - private val query: AbstractQuery<*>, - private val criteriaBuilder: CriteriaBuilder -) { - private val root: Root<*> = query.from(fromEntity.type) - - private val realized: LinkedHashMap, From<*, *>> = linkedMapOf(fromEntity to root) - private val realizedListeners: LinkedHashMap, LinkedList<() -> Unit>> = linkedMapOf() - - init { - joins.asSequence() - .sortedWith(joinSpecComparator) - .filter { !realized.contains(it.entity) } - .forEach { spec -> - when (spec) { - is CrossJoinSpec<*> -> realize(spec) - is TreatJoinSpec<*, *> -> treat(spec) - is AssociatedJoinSpec<*, *> -> { - if (!realized.contains(spec.left)) { - realizeLazy(spec) - } else { - realize(spec) - } - } - } - } - } - - private fun realizeLazy(spec: AssociatedJoinSpec<*, *>) { - realizedListeners.computeIfAbsent(spec.left) { LinkedList() }.add { - if (!realized.contains(spec.right)) { - realize(spec) - } - } - } - - private fun realize(spec: AssociatedJoinSpec<*, *>) { - realize(spec.right) { join(spec) } - } - - private fun realize(spec: CrossJoinSpec<*>) { - realize(spec.entity) { query.from(spec.entity.type) } - } - - private fun realize(entity: EntitySpec<*>, join: () -> From<*, *>) { - realized[entity] = join() - realizedListeners.remove(entity)?.run { - this.forEach { it() } - } - } - - private fun join(spec: AssociatedJoinSpec<*, *>): From<*, *> = - when (spec) { - is SimpleJoinSpec, is SimpleAssociatedJoinSpec -> - realized.getValue(spec.left).join(spec.path, spec.joinType) - is FetchJoinSpec -> - realized.getValue(spec.left).fetch(spec.path, spec.joinType) - else -> throw IllegalArgumentException() - } as From<*, *> - - private fun treat(spec: TreatJoinSpec<*, *>) { - realized[spec.right] = when (spec.root.entity == spec.left && spec.root.entity.type == root.javaType) { - true -> criteriaBuilder.treat( - root as Root, - spec.right.type as Class - ) - false -> { - val join = realized.computeIfAbsent(spec.left) { - realized.getValue(spec.root.entity) - .join(spec.path, spec.joinType) - } as Join - - criteriaBuilder.treat( - join, - spec.right.type as Class - ) - } - } as From<*, *> - } - - fun joinAll(): Froms { - if (realizedListeners.isNotEmpty()) { - throw IllegalStateException( - "Join clause is incomplete. Please check if the following Entities are joined. " + - "Entities: ${realizedListeners.keys}" - ) - } - - return Froms( - root = root, - map = realized - ) - } - - companion object { - private val fetchJoinFirstComparator: Comparator> = Comparator { o1, o2 -> - when { - o1::class == o2::class -> 0 - o1 is FetchJoinSpec<*, *> -> -1 - else -> 1 - } - } - - private val outerJoinFirstComparator: Comparator> = Comparator { o1, o2 -> - when { - o1 is TreatJoinSpec<*, *> && o2 !is TreatJoinSpec<*, *> -> 1 - o1 !is TreatJoinSpec<*, *> && o2 is TreatJoinSpec<*, *> -> -1 - o1 is CrossJoinSpec<*> -> -1 - o2 is CrossJoinSpec<*> -> 1 - o1 is AssociatedJoinSpec<*, *> && o1.joinType.isOuterJoin() -> -1 - o2 is AssociatedJoinSpec<*, *> && o2.joinType.isOuterJoin() -> 1 - else -> 0 - } - } - - private val treatJoinOuterFirstComparator = Comparator> { o1, o2 -> - when { - o1 is TreatJoinSpec<* ,*> && o1.joinType.isOuterJoin() -> -1 - o2 is TreatJoinSpec<* ,*> && o2.joinType.isOuterJoin() -> -1 - else -> 0 - } - } - - private val joinSpecComparator = - fetchJoinFirstComparator.thenComparing(outerJoinFirstComparator).thenComparing(treatJoinOuterFirstComparator) - - private fun JoinType.isOuterJoin(): Boolean { - return this === JoinType.LEFT || this === JoinType.RIGHT - } - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/SimpleAssociatedJoinClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/SimpleAssociatedJoinClause.kt deleted file mode 100644 index e567d4b34..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/SimpleAssociatedJoinClause.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.from - -import com.linecorp.kotlinjdsl.query.spec.SimpleAssociatedJoinSpec - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -@JvmInline -value class SimpleAssociatedJoinClause(val joins: List>) diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/SimpleAssociator.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/SimpleAssociator.kt deleted file mode 100644 index 2d802b4f2..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/from/SimpleAssociator.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.from - -import com.linecorp.kotlinjdsl.query.spec.AssociatedJoinSpec -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.SimpleAssociatedJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import java.util.* -import javax.persistence.criteria.Path -import javax.persistence.criteria.Root - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -class SimpleAssociator( - fromEntity: EntitySpec<*>, - associates: Collection>, - private val root: Root<*> -) { - private val realized: LinkedHashMap, Path<*>> = linkedMapOf(fromEntity to root) - private val realizedListeners: LinkedHashMap, LinkedList<() -> Unit>> = linkedMapOf() - - init { - associates.asSequence() - .filter { !realized.contains(it.entity) } - .forEach { - if (!realized.contains(it.left)) { - realizeLazy(it) - } else { - realize(it) - } - } - } - - private fun realizeLazy(spec: AssociatedJoinSpec<*, *>) { - realizedListeners.computeIfAbsent(spec.left) { LinkedList() }.add { - if (!realized.contains(spec.right)) { - realize(spec) - } - } - } - - private fun realize(spec: AssociatedJoinSpec<*, *>) { - realize(spec.right) { associate(spec) } - } - - private fun realize(entity: EntitySpec<*>, associate: () -> Path<*>) { - realized[entity] = associate() - realizedListeners.remove(entity)?.run { - this.forEach { it() } - } - } - - private fun associate(spec: AssociatedJoinSpec<*, *>): Path<*> = - realized.getValue(spec.left).get(spec.path) - - fun associateAll(): Froms { - if (realizedListeners.isNotEmpty()) { - throw IllegalStateException( - "Associate clause is incomplete. Please check if the following Entities are associated. " + - "Entities: ${realizedListeners.keys}" - ) - } - - return Froms( - root = root, - map = realized - ) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/CriteriaQueryGroupByClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/CriteriaQueryGroupByClause.kt deleted file mode 100644 index 41d596e78..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/CriteriaQueryGroupByClause.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.groupby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaQueryGroupByClause { - fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/GroupByClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/GroupByClause.kt deleted file mode 100644 index cd9544f07..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/GroupByClause.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.groupby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.AbstractQuery -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class GroupByClause( - private val expressions: List>, -) : CriteriaQueryGroupByClause, SubqueryGroupByClause { - override fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) { - applyInternally(froms, query, criteriaBuilder) - } - - override fun apply(froms: Froms, query: Subquery<*>, criteriaBuilder: CriteriaBuilder) { - applyInternally(froms, query, criteriaBuilder) - } - - private fun applyInternally(froms: Froms, query: AbstractQuery<*>, criteriaBuilder: CriteriaBuilder) { - if (expressions.isEmpty()) return - - query.groupBy(expressions.map { it.toCriteriaExpression(froms, query, criteriaBuilder) }) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/SubqueryGroupByClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/SubqueryGroupByClause.kt deleted file mode 100644 index 20486ef12..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/SubqueryGroupByClause.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.groupby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SubqueryGroupByClause { - fun apply(froms: Froms, query: Subquery<*>, criteriaBuilder: CriteriaBuilder) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/CriteriaQueryHavingClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/CriteriaQueryHavingClause.kt deleted file mode 100644 index 90893d02f..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/CriteriaQueryHavingClause.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.having - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaQueryHavingClause { - fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/HavingClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/HavingClause.kt deleted file mode 100644 index a2263feaf..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/HavingClause.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.having - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import javax.persistence.criteria.AbstractQuery -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class HavingClause( - private val predicate: PredicateSpec, -) : CriteriaQueryHavingClause, SubqueryHavingClause { - override fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) { - applyInternally(froms, query, criteriaBuilder) - } - - override fun apply(froms: Froms, query: Subquery<*>, criteriaBuilder: CriteriaBuilder) { - applyInternally(froms, query, criteriaBuilder) - } - - private fun applyInternally(froms: Froms, query: AbstractQuery<*>, criteriaBuilder: CriteriaBuilder) { - if (predicate.isEmpty()) return - - query.having(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/SubqueryHavingClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/SubqueryHavingClause.kt deleted file mode 100644 index 684425c6a..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/having/SubqueryHavingClause.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.having - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SubqueryHavingClause { - fun apply(froms: Froms, query: Subquery<*>, criteriaBuilder: CriteriaBuilder) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClause.kt deleted file mode 100644 index 486510264..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaQueryHintClause.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface JpaQueryHintClause { - fun apply(query: Q) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/SqlQueryHintClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/SqlQueryHintClause.kt deleted file mode 100644 index 0c761a763..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/SqlQueryHintClause.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SqlQueryHintClause { - fun apply(query: Q) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/QueryLimitClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/QueryLimitClause.kt deleted file mode 100644 index d97b1b74b..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/QueryLimitClause.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.limit - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface QueryLimitClause { - fun apply(query: Q) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/CriteriaQueryOrderByClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/CriteriaQueryOrderByClause.kt deleted file mode 100644 index 8f8a040ba..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/CriteriaQueryOrderByClause.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaQueryOrderByClause { - fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/OrderByClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/OrderByClause.kt deleted file mode 100644 index f760f2b33..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/OrderByClause.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class OrderByClause( - private val orders: List, -) : CriteriaQueryOrderByClause { - companion object { - val empty = OrderByClause(emptyList()) - } - - override fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) { - if (orders.isEmpty()) return - - query.orderBy(orders.flatMap { it.toCriteriaOrder(froms, query, criteriaBuilder) }) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountMultiSelectClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountMultiSelectClause.kt deleted file mode 100644 index ada03f102..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountMultiSelectClause.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class CountMultiSelectClause( - private val distinct: Boolean, - private val expressions: List>, -) : CriteriaQuerySelectClause { - override val returnType: Class = Long::class.java - - override fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) { - if (distinct) { - throw IllegalStateException( - "Count distinct does not support multiple columns. Please remove distinct in selection" - ) - } - - query.select(criteriaBuilder.count(criteriaBuilder.literal(1))) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountSingleSelectClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountSingleSelectClause.kt deleted file mode 100644 index 7e653fae4..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountSingleSelectClause.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class CountSingleSelectClause( - private val distinct: Boolean, - private val expression: ExpressionSpec<*>, -) : CriteriaQuerySelectClause { - override val returnType: Class = Long::class.java - - override fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) { - val criteriaExpression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - if (distinct) { - query.select(criteriaBuilder.countDistinct(criteriaExpression)) - } else { - query.select(criteriaBuilder.count(criteriaExpression)) - } - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CriteriaQuerySelectClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CriteriaQuerySelectClause.kt deleted file mode 100644 index 4ef5c7bac..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CriteriaQuerySelectClause.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaQuerySelectClause { - val returnType: Class - - fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/MultiSelectClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/MultiSelectClause.kt deleted file mode 100644 index de06fe570..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/MultiSelectClause.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class MultiSelectClause( - override val returnType: Class, - val distinct: Boolean, - val expressions: List>, -) : CriteriaQuerySelectClause { - override fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) { - val criteriaExpression = criteriaBuilder.construct( - returnType, - *expressions.map { it.toCriteriaExpression(froms, query, criteriaBuilder) }.toTypedArray() - ) - - query.select(criteriaExpression).distinct(distinct) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SingleSelectClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SingleSelectClause.kt deleted file mode 100644 index 935c570d2..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SingleSelectClause.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Expression -import javax.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class SingleSelectClause( - override val returnType: Class, - val distinct: Boolean, - val expression: ExpressionSpec, -) : CriteriaQuerySelectClause, SubquerySelectClause { - override fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) { - query - .select(expression.toCriteriaExpression(froms, query, criteriaBuilder)) - .distinct(distinct) - } - - @Suppress("UNCHECKED_CAST") - override fun apply(froms: Froms, query: Subquery, criteriaBuilder: CriteriaBuilder) { - query - .select(expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression) - .distinct(distinct) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SubquerySelectClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SubquerySelectClause.kt deleted file mode 100644 index e9cb66c2c..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SubquerySelectClause.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SubquerySelectClause { - val returnType: Class - - fun apply(froms: Froms, query: Subquery, criteriaBuilder: CriteriaBuilder) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/set/SetClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/set/SetClause.kt deleted file mode 100644 index 697b1901a..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/set/SetClause.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.set - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaUpdate -import javax.persistence.criteria.Path - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class SetClause(private val params: Map, Any?>) { - fun apply(froms: Froms, query: CriteriaUpdate<*>, criteriaBuilder: CriteriaBuilder) { - params.forEach { - @Suppress("UNCHECKED_CAST") - query.set( - it.key.toCriteriaExpression(froms, query, criteriaBuilder) as Path, - it.value - ) - } - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/CriteriaQueryWhereClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/CriteriaQueryWhereClause.kt deleted file mode 100644 index 68dfc2439..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/CriteriaQueryWhereClause.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.where - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaDelete -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.CriteriaUpdate - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface CriteriaQueryWhereClause { - fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) - fun apply(froms: Froms, query: CriteriaUpdate, criteriaBuilder: CriteriaBuilder) - fun apply(froms: Froms, query: CriteriaDelete, criteriaBuilder: CriteriaBuilder) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/SubqueryWhereClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/SubqueryWhereClause.kt deleted file mode 100644 index c987bb0e6..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/SubqueryWhereClause.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.where - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SubqueryWhereClause { - fun apply(froms: Froms, query: Subquery<*>, criteriaBuilder: CriteriaBuilder) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/WhereClause.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/WhereClause.kt deleted file mode 100644 index c560d9079..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/where/WhereClause.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.where - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import javax.persistence.criteria.* - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -data class WhereClause( - private val predicate: PredicateSpec -) : CriteriaQueryWhereClause, SubqueryWhereClause { - override fun apply(froms: Froms, query: CriteriaQuery, criteriaBuilder: CriteriaBuilder) { - applyInternally(froms, query, criteriaBuilder) - } - - override fun apply(froms: Froms, query: CriteriaUpdate, criteriaBuilder: CriteriaBuilder) { - if (predicate.isEmpty()) return - - query.where(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } - - override fun apply(froms: Froms, query: CriteriaDelete, criteriaBuilder: CriteriaBuilder) { - if (predicate.isEmpty()) return - - query.where(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } - - override fun apply(froms: Froms, query: Subquery<*>, criteriaBuilder: CriteriaBuilder) { - applyInternally(froms, query, criteriaBuilder) - } - - private fun applyInternally(froms: Froms, query: AbstractQuery<*>, criteriaBuilder: CriteriaBuilder) { - if (predicate.isEmpty()) return - - query.where(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/JpaCriteriaQueryBuilder.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/JpaCriteriaQueryBuilder.kt deleted file mode 100644 index 58bc73d42..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/JpaCriteriaQueryBuilder.kt +++ /dev/null @@ -1,65 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaDelete -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.CriteriaUpdate - -object JpaCriteriaQueryBuilder { - fun createQuery( - spec: CriteriaQuerySpec, - criteriaBuilder: CriteriaBuilder, - queryBuilder: (CriteriaQuery) -> Q - ): Q { - val query: CriteriaQuery = criteriaBuilder.createQuery(spec.select.returnType) - val froms = spec.from.join(spec.join, query, criteriaBuilder) - - spec.select.apply(froms, query, criteriaBuilder) - spec.where.apply(froms, query, criteriaBuilder) - spec.groupBy.apply(froms, query, criteriaBuilder) - spec.having.apply(froms, query, criteriaBuilder) - spec.orderBy.apply(froms, query, criteriaBuilder) - - return queryBuilder(query).apply { - spec.limit.apply(this) - spec.jpaHint.apply(this) - spec.sqlHint.apply(this) - } - } - - fun createQuery( - spec: CriteriaUpdateQuerySpec, - criteriaBuilder: CriteriaBuilder, - queryBuilder: (CriteriaUpdate) -> Q - ): Q { - val createCriteriaUpdate = criteriaBuilder.createCriteriaUpdate(spec.targetEntity) - val froms = spec.from.associate(spec.associate, createCriteriaUpdate) - - spec.where.apply(froms, createCriteriaUpdate, criteriaBuilder) - spec.set.apply(froms, createCriteriaUpdate, criteriaBuilder) - - return queryBuilder(createCriteriaUpdate).apply { - spec.jpaHint.apply(this) - spec.sqlHint.apply(this) - } - } - - fun createQuery( - spec: CriteriaDeleteQuerySpec, - criteriaBuilder: CriteriaBuilder, - queryBuilder: (CriteriaDelete) -> Q - ): Q { - val createCriteriaDelete = criteriaBuilder.createCriteriaDelete(spec.targetEntity) - val froms = spec.from.associate(spec.associate, createCriteriaDelete) - - spec.where.apply(froms, createCriteriaDelete, criteriaBuilder) - - return queryBuilder(createCriteriaDelete).apply { - spec.jpaHint.apply(this) - spec.sqlHint.apply(this) - } - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreator.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreator.kt deleted file mode 100644 index 0907cd625..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreator.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.SubquerySpec -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.CommonAbstractCriteria -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.Subquery - -/** - * Internal Only - * Don't use this directly because it's an **INTERNAL**. - * It does not support backward compatibility. - */ -interface SubqueryCreator { - fun createQuery( - spec: SubquerySpec, - froms: Froms, - criteria: CommonAbstractCriteria, - criteriaBuilder: CriteriaBuilder - ): Subquery -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreatorImpl.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreatorImpl.kt deleted file mode 100644 index e9d09d673..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreatorImpl.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.SubquerySpec -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.CommonAbstractCriteria -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.Subquery - -class SubqueryCreatorImpl : SubqueryCreator { - override fun createQuery( - spec: SubquerySpec, - froms: Froms, - criteria: CommonAbstractCriteria, - criteriaBuilder: CriteriaBuilder - ): Subquery { - val subquery = criteria.subquery(spec.select.returnType) - val subqueryFroms = spec.from.join(spec.join, subquery, criteriaBuilder) + froms - - spec.select.apply(subqueryFroms, subquery, criteriaBuilder) - spec.where.apply(subqueryFroms, subquery, criteriaBuilder) - spec.groupBy.apply(subqueryFroms, subquery, criteriaBuilder) - spec.having.apply(subqueryFroms, subquery, criteriaBuilder) - - return subquery - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/ExpressionOrderSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/ExpressionOrderSpec.kt deleted file mode 100644 index c8c590a41..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/ExpressionOrderSpec.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Order - -data class ExpressionOrderSpec( - private val expression: ExpressionSpec<*>, - private val ascending: Boolean, -) : OrderSpec { - override fun toCriteriaOrder( - froms: Froms, - criteriaQuery: CriteriaQuery<*>, - criteriaBuilder: CriteriaBuilder - ): List = listOf( - if (ascending) { - criteriaBuilder.asc(expression.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder)) - } else { - criteriaBuilder.desc(expression.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder)) - } - ) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/Froms.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/Froms.kt deleted file mode 100644 index ace620f72..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/Froms.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec - -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import javax.persistence.criteria.Path -import javax.persistence.criteria.Root - -class Froms internal constructor( - val root: Root<*>, - private val map: Map, Path<*>> -) { - @Suppress("UNCHECKED_CAST") - operator fun get(key: EntitySpec): Path = - map[key] as? Path - ?: throw IllegalStateException("There is no $key in from or join clause. contains: ${map.keys}") - - operator fun plus(other: Froms): Froms { - val duplicatedEntities = map.keys.intersect(other.map.keys) - - if (duplicatedEntities.isNotEmpty()) { - throw IllegalStateException( - "Other froms has duplicated entitySpec. Please alias the duplicated entities: $duplicatedEntities" - ) - } - - return Froms(root, map + other.map) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/JoinSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/JoinSpec.kt deleted file mode 100644 index 412c2e85b..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/JoinSpec.kt +++ /dev/null @@ -1,53 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec - -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import javax.persistence.criteria.JoinType - -sealed interface JoinSpec { - val entity: EntitySpec -} - -sealed interface AssociatedJoinSpec : JoinSpec { - val left: EntitySpec - val right: EntitySpec - val path: String - val joinType: JoinType - - override val entity get() = right -} - -data class SimpleAssociatedJoinSpec( - override val left: EntitySpec, - override val right: EntitySpec, - override val path: String -) : AssociatedJoinSpec { - override val joinType: JoinType = JoinType.INNER -} - -data class SimpleJoinSpec( - override val left: EntitySpec, - override val right: EntitySpec, - override val path: String, - override val joinType: JoinType -) : AssociatedJoinSpec - -data class FetchJoinSpec( - override val left: EntitySpec, - override val right: EntitySpec, - override val path: String, - override val joinType: JoinType -) : AssociatedJoinSpec - -data class CrossJoinSpec( - override val entity: EntitySpec, -) : JoinSpec - -data class TreatJoinSpec( - override val left: EntitySpec

, - override val right: EntitySpec, - override val joinType: JoinType, - val root: ColumnSpec<*> -) : AssociatedJoinSpec { - override val path: String = root.path -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/OrderSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/OrderSpec.kt deleted file mode 100644 index 924757744..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/OrderSpec.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec - -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Order - -interface OrderSpec { - fun toCriteriaOrder( - froms: Froms, - criteriaQuery: CriteriaQuery<*>, - criteriaBuilder: CriteriaBuilder, - ): List -} \ No newline at end of file diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpec.kt deleted file mode 100644 index 078de1028..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpec.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class AvgSpec( - private val expression: ExpressionSpec -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.avg(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.avg(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.avg(expression) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CaseSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CaseSpec.kt deleted file mode 100644 index 85d0b7886..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CaseSpec.kt +++ /dev/null @@ -1,60 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import javax.persistence.criteria.* - -data class CaseSpec( - private val whens: List>, - private val `else`: ExpressionSpec, -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return criteriaBuilder.selectCase().apply { - whens.forEach { - `when`( - it.predicate.toCriteriaPredicate(froms, query, criteriaBuilder), - it.result.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - }.otherwise(`else`.toCriteriaExpression(froms, query, criteriaBuilder)) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return criteriaBuilder.selectCase().apply { - whens.forEach { - `when`( - it.predicate.toCriteriaPredicate(froms, query, criteriaBuilder), - it.result.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - }.otherwise(`else`.toCriteriaExpression(froms, query, criteriaBuilder)) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return criteriaBuilder.selectCase().apply { - whens.forEach { - `when`( - it.predicate.toCriteriaPredicate(froms, query, criteriaBuilder), - it.result.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - }.otherwise(`else`.toCriteriaExpression(froms, query, criteriaBuilder)) - } - - data class WhenSpec( - val predicate: PredicateSpec, - val result: ExpressionSpec, - ) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ColumnSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ColumnSpec.kt deleted file mode 100644 index 3e5f8e0f5..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ColumnSpec.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class ColumnSpec( - val entity: EntitySpec<*>, - val path: String -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return path(froms) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return path(froms) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return path(froms) - } - - private fun path(froms: Froms): Path = - froms[entity].get(path) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpec.kt deleted file mode 100644 index e564a22cc..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpec.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class CountSpec( - private val distinct: Boolean = false, - private val expression: ExpressionSpec, -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val jpaExpression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaExpression(criteriaBuilder, jpaExpression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val jpaExpression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaExpression(criteriaBuilder, jpaExpression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val jpaExpression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaExpression(criteriaBuilder, jpaExpression) - } - - private fun toCriteriaExpression( - criteriaBuilder: CriteriaBuilder, - jpaExpression: Expression - ): Expression { - return if (distinct) { - criteriaBuilder.countDistinct(jpaExpression) - } else { - criteriaBuilder.count(jpaExpression) - } - } -} - diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/EntitySpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/EntitySpec.kt deleted file mode 100644 index 23bff519f..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/EntitySpec.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class EntitySpec( - val type: Class, - private val alias: String? = null -) : ExpressionSpec { - companion object { - private const val DEFAULT_ALIAS_TOKEN = "\\" - } - - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = path(froms) - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = path(froms) - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = path(froms) - - private fun path(froms: Froms) = froms[this].apply { applyAlias() } - - private fun Path.applyAlias() { - this@EntitySpec.alias?.run { alias(this) } - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ExpressionSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ExpressionSpec.kt deleted file mode 100644 index de748612c..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ExpressionSpec.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -interface ExpressionSpec { - fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression - - fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression - - fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/FunctionSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/FunctionSpec.kt deleted file mode 100644 index 69ed0c925..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/FunctionSpec.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class FunctionSpec( - private val name: String, - private val returnType: Class, - private val expressions: List>, -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return toCriteriaExpression( - criteriaBuilder = criteriaBuilder, - expressions = expressions.map { it.toCriteriaExpression(froms, query, criteriaBuilder) } - ) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return toCriteriaExpression( - criteriaBuilder = criteriaBuilder, - expressions = expressions.map { it.toCriteriaExpression(froms, query, criteriaBuilder) } - ) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return toCriteriaExpression( - criteriaBuilder = criteriaBuilder, - expressions = expressions.map { it.toCriteriaExpression(froms, query, criteriaBuilder) } - ) - } - - private fun toCriteriaExpression( - criteriaBuilder: CriteriaBuilder, - expressions: List> - ): Expression { - return criteriaBuilder.function( - name, - returnType, - *expressions.toTypedArray() - ) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpec.kt deleted file mode 100644 index 58c2d1453..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpec.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class GreatestSpec?>( - private val expression: ExpressionSpec -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.greatest(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.greatest(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.greatest(expression) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpec.kt deleted file mode 100644 index 93459f236..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpec.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class LeastSpec?>( - private val expression: ExpressionSpec -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.least(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.least(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.least(expression) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LiteralSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LiteralSpec.kt deleted file mode 100644 index d21748ec9..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LiteralSpec.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class LiteralSpec( - private val value: T, -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = criteriaBuilder.literal(value) - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = criteriaBuilder.literal(value) - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = criteriaBuilder.literal(value) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpec.kt deleted file mode 100644 index 2eada40fc..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpec.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class MaxSpec( - private val expression: ExpressionSpec -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.max(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.max(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.max(expression) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpec.kt deleted file mode 100644 index 9f85695c6..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpec.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class MinSpec( - private val expression: ExpressionSpec -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.min(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.min(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.min(expression) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NestedColumnSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NestedColumnSpec.kt deleted file mode 100644 index e359c3c4a..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NestedColumnSpec.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class NestedColumnSpec( - val nestedColumnSpec: ColumnSpec<*>, - val path: String -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return nestedColumnSpec.nestedPath(froms).get(path) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return nestedColumnSpec.nestedPath(froms).get(path) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return nestedColumnSpec.nestedPath(froms).get(path) - } - - private fun ColumnSpec.nestedPath(froms: Froms): Path = - froms[entity].get(path) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NullLiteralSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NullLiteralSpec.kt deleted file mode 100644 index caba78d43..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NullLiteralSpec.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class NullLiteralSpec( - private val type: Class, -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = criteriaBuilder.nullLiteral(type) - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = criteriaBuilder.nullLiteral(type) - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression = criteriaBuilder.nullLiteral(type) -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SubqueryExpressionSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SubqueryExpressionSpec.kt deleted file mode 100644 index cc4ba55b9..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SubqueryExpressionSpec.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.SubquerySpec -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class SubqueryExpressionSpec( - private val spec: SubquerySpec, - private val subqueryCreator: SubqueryCreator, -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return subqueryCreator.createQuery(spec, froms, query, criteriaBuilder) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return subqueryCreator.createQuery(spec, froms, query, criteriaBuilder) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - return subqueryCreator.createQuery(spec, froms, query, criteriaBuilder) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpec.kt deleted file mode 100644 index 09ae54161..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpec.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class SumSpec( - private val expression: ExpressionSpec -) : ExpressionSpec { - override fun toCriteriaExpression( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.sum(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.sum(expression) - } - - override fun toCriteriaExpression( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Expression { - val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder) - - return criteriaBuilder.sum(expression) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/AndSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/AndSpec.kt deleted file mode 100644 index ffd3cb124..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/AndSpec.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class AndSpec( - private val predicates: List, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return toCriteriaPredicate(criteriaBuilder) { it.toCriteriaPredicate(froms, query, criteriaBuilder) } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return toCriteriaPredicate(criteriaBuilder) { it.toCriteriaPredicate(froms, query, criteriaBuilder) } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return toCriteriaPredicate(criteriaBuilder) { it.toCriteriaPredicate(froms, query, criteriaBuilder) } - } - - private fun toCriteriaPredicate( - criteriaBuilder: CriteriaBuilder, - predicate: (PredicateSpec) -> Predicate - ): Predicate { - return predicates.asSequence() - .filterNotNull() - .map { predicate(it) } - .reduceOrNull { left, right -> criteriaBuilder.and(left, right) } - ?: criteriaBuilder.conjunction() - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenExpressionSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenExpressionSpec.kt deleted file mode 100644 index 665e2399e..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenExpressionSpec.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -data class BetweenExpressionSpec>( - private val left: ExpressionSpec, - private val right1: ExpressionSpec, - private val right2: ExpressionSpec, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.between( - left.toCriteriaExpression(froms, query, criteriaBuilder), - right1.toCriteriaExpression(froms, query, criteriaBuilder), - right2.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.between( - left.toCriteriaExpression(froms, query, criteriaBuilder), - right1.toCriteriaExpression(froms, query, criteriaBuilder), - right2.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.between( - left.toCriteriaExpression(froms, query, criteriaBuilder), - right1.toCriteriaExpression(froms, query, criteriaBuilder), - right2.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenValueSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenValueSpec.kt deleted file mode 100644 index 669c5f07b..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenValueSpec.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -data class BetweenValueSpec( - private val left: ExpressionSpec, - private val right1: R, - private val right2: R, -) : PredicateSpec where R : Comparable, R : Any, T : R? { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.between(left.toCriteriaExpression(froms, query, criteriaBuilder), right1, right2) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.between(left.toCriteriaExpression(froms, query, criteriaBuilder), right1, right2) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.between(left.toCriteriaExpression(froms, query, criteriaBuilder), right1, right2) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EmptyPredicateSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EmptyPredicateSpec.kt deleted file mode 100644 index a402d2726..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EmptyPredicateSpec.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -object EmptyPredicateSpec : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualExpressionSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualExpressionSpec.kt deleted file mode 100644 index c54015269..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualExpressionSpec.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -data class EqualExpressionSpec( - private val left: ExpressionSpec, - private val right: ExpressionSpec, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.equal( - left.toCriteriaExpression(froms, query, criteriaBuilder), - right.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.equal( - left.toCriteriaExpression(froms, query, criteriaBuilder), - right.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.equal( - left.toCriteriaExpression(froms, query, criteriaBuilder), - right.toCriteriaExpression(froms, query, criteriaBuilder), - ) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualValueSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualValueSpec.kt deleted file mode 100644 index 6a7c3e25b..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualValueSpec.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -data class EqualValueSpec( - private val left: ExpressionSpec, - private val right: T, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.equal(left.toCriteriaExpression(froms, query, criteriaBuilder), right) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.equal(left.toCriteriaExpression(froms, query, criteriaBuilder), right) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.equal(left.toCriteriaExpression(froms, query, criteriaBuilder), right) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/ExistsSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/ExistsSpec.kt deleted file mode 100644 index 18678b387..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/ExistsSpec.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import javax.persistence.criteria.* - -data class ExistsSpec( - private val subqueryExpressionSpec: SubqueryExpressionSpec, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val subqueryExpression = subqueryExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - return criteriaBuilder.exists(subqueryExpression as Subquery) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val subqueryExpression = subqueryExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - return criteriaBuilder.exists(subqueryExpression as Subquery) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val subqueryExpression = subqueryExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - return criteriaBuilder.exists(subqueryExpression as Subquery) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanExpressionSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanExpressionSpec.kt deleted file mode 100644 index 03364e741..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanExpressionSpec.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -data class GreaterThanExpressionSpec>( - private val left: ExpressionSpec, - private val right: ExpressionSpec, - private val inclusive: Boolean, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - val rightExpression = right.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression, rightExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - val rightExpression = right.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression, rightExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - val rightExpression = right.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression, rightExpression) - } - - private fun toCriteriaPredicate( - criteriaBuilder: CriteriaBuilder, - leftExpression: Expression, - rightExpression: Expression - ): Predicate { - return if (inclusive) { - criteriaBuilder.greaterThanOrEqualTo(leftExpression, rightExpression) - } else { - criteriaBuilder.greaterThan(leftExpression, rightExpression) - } - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanValueSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanValueSpec.kt deleted file mode 100644 index d1e67a7fd..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanValueSpec.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -data class GreaterThanValueSpec( - private val left: ExpressionSpec, - private val right: R, - private val inclusive: Boolean, -) : PredicateSpec where R : Comparable, R : Any, T : R? { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression) - } - - private fun toCriteriaPredicate( - criteriaBuilder: CriteriaBuilder, - leftExpression: Expression - ): Predicate { - return if (inclusive) { - criteriaBuilder.greaterThanOrEqualTo(leftExpression, right) - } else { - criteriaBuilder.greaterThan(leftExpression, right) - } - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InExpressionSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InExpressionSpec.kt deleted file mode 100644 index e2f49cc05..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InExpressionSpec.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -data class InExpressionSpec( - private val left: ExpressionSpec, - private val rights: Collection>, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.conjunction() - - return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { - rights.forEach { value(it.toCriteriaExpression(froms, query, criteriaBuilder)) } - } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.conjunction() - - return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { - rights.forEach { value(it.toCriteriaExpression(froms, query, criteriaBuilder)) } - } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.conjunction() - - return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { - rights.forEach { value(it.toCriteriaExpression(froms, query, 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 deleted file mode 100644 index 47fb77088..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpec.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -data class InValueSpec( - private val left: ExpressionSpec, - private val rights: Collection, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.disjunction() - - return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { - rights.forEach { value(it) } - } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.disjunction() - - return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { - rights.forEach { value(it) } - } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - if (rights.isEmpty()) return criteriaBuilder.disjunction() - - return criteriaBuilder.`in`(left.toCriteriaExpression(froms, query, criteriaBuilder)).apply { - rights.forEach { value(it) } - } - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsFalseSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsFalseSpec.kt deleted file mode 100644 index 08f6c9442..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsFalseSpec.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -@Suppress("UNCHECKED_CAST") -data class IsFalseSpec( - private val expression: ExpressionSpec -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isFalse( - expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isFalse( - expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isFalse( - expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression - ) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsNullSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsNullSpec.kt deleted file mode 100644 index 7ebce68e8..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsNullSpec.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -data class IsNullSpec( - private val expression: ExpressionSpec -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isNull(expression.toCriteriaExpression(froms, query, criteriaBuilder)) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isNull(expression.toCriteriaExpression(froms, query, criteriaBuilder)) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isNull(expression.toCriteriaExpression(froms, query, criteriaBuilder)) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsTrueSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsTrueSpec.kt deleted file mode 100644 index ff9289828..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsTrueSpec.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -@Suppress("UNCHECKED_CAST") -data class IsTrueSpec( - private val expression: ExpressionSpec -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isTrue( - expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isTrue( - expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.isTrue( - expression.toCriteriaExpression(froms, query, criteriaBuilder) as Expression - ) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanExpressionSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanExpressionSpec.kt deleted file mode 100644 index 32a4aaa1f..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanExpressionSpec.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -data class LessThanExpressionSpec>( - private val left: ExpressionSpec, - private val right: ExpressionSpec, - private val inclusive: Boolean, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - val rightExpression = right.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression, rightExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - val rightExpression = right.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression, rightExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression = left.toCriteriaExpression(froms, query, criteriaBuilder) - val rightExpression = right.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression, rightExpression) - } - - private fun toCriteriaPredicate( - criteriaBuilder: CriteriaBuilder, - leftExpression: Expression, - rightExpression: Expression - ): Predicate { - return if (inclusive) { - criteriaBuilder.lessThanOrEqualTo(leftExpression, rightExpression) - } else { - criteriaBuilder.lessThan(leftExpression, rightExpression) - } - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanValueSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanValueSpec.kt deleted file mode 100644 index 0f09916fa..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanValueSpec.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -data class LessThanValueSpec( - private val left: ExpressionSpec, - private val right: R, - private val inclusive: Boolean, -) : PredicateSpec where R : Comparable, R : Any, T : R? { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression: Expression = left.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression: Expression = left.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - val leftExpression: Expression = left.toCriteriaExpression(froms, query, criteriaBuilder) - - return toCriteriaPredicate(criteriaBuilder, leftExpression) - } - - private fun toCriteriaPredicate( - criteriaBuilder: CriteriaBuilder, - leftExpression: Expression - ): Predicate { - return if (inclusive) { - criteriaBuilder.lessThanOrEqualTo(leftExpression, right) - } else { - criteriaBuilder.lessThan(leftExpression, right) - } - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LikeSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LikeSpec.kt deleted file mode 100644 index 9fe63313a..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LikeSpec.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import javax.persistence.criteria.* - -@Suppress("UNCHECKED_CAST") -data class LikeSpec( - private val left: ExpressionSpec, - private val right: String -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.like( - left.toCriteriaExpression(froms, query, criteriaBuilder) as Expression, - right - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.like( - left.toCriteriaExpression(froms, query, criteriaBuilder) as Expression, - right - ) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.like( - left.toCriteriaExpression(froms, query, criteriaBuilder) as Expression, - right - ) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/NotSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/NotSpec.kt deleted file mode 100644 index ff3479b98..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/NotSpec.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class NotSpec( - private val predicate: PredicateSpec, -) : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.not(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.not(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.not(predicate.toCriteriaPredicate(froms, query, criteriaBuilder)) - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/OrSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/OrSpec.kt deleted file mode 100644 index 7664907b0..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/OrSpec.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -data class OrSpec( - private val predicates: List, -) : PredicateSpec { - - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return toCriteriaPredicate( - criteriaBuilder = criteriaBuilder, - empty = { EmptyPredicateSpec.toCriteriaPredicate(froms, query, criteriaBuilder) }) { - it.toCriteriaPredicate( - froms, - query, - criteriaBuilder - ) - } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return toCriteriaPredicate( - criteriaBuilder = criteriaBuilder, - empty = { EmptyPredicateSpec.toCriteriaPredicate(froms, query, criteriaBuilder) }) { - it.toCriteriaPredicate( - froms, - query, - criteriaBuilder - ) - } - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return toCriteriaPredicate( - criteriaBuilder = criteriaBuilder, - empty = { EmptyPredicateSpec.toCriteriaPredicate(froms, query, criteriaBuilder) }) { - it.toCriteriaPredicate( - froms, - query, - criteriaBuilder - ) - } - } - - fun toCriteriaPredicate( - criteriaBuilder: CriteriaBuilder, - empty: () -> Predicate, - predicate: (PredicateSpec) -> Predicate - ): Predicate { - return predicates.asSequence() - .filterNotNull() - .map { predicate(it) } - .reduceOrNull { left, right -> criteriaBuilder.or(left, right) } - ?: empty() - } -} diff --git a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/PredicateSpec.kt b/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/PredicateSpec.kt deleted file mode 100644 index e45245cf9..000000000 --- a/query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/PredicateSpec.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import javax.persistence.criteria.* - -interface PredicateSpec { - companion object { - val empty = EmptyPredicateSpec - } - - fun isEmpty(): Boolean = this === empty - - fun reverse() = NotSpec(this) - - infix fun and(other: PredicateSpec) = AndSpec(listOf(this, other)) - infix fun or(other: PredicateSpec) = OrSpec(listOf(this, other)) - - fun toCriteriaPredicate(froms: Froms, query: AbstractQuery<*>, criteriaBuilder: CriteriaBuilder): Predicate - fun toCriteriaPredicate(froms: Froms, query: CriteriaUpdate<*>, criteriaBuilder: CriteriaBuilder): Predicate - fun toCriteriaPredicate(froms: Froms, query: CriteriaDelete<*>, criteriaBuilder: CriteriaBuilder): Predicate -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/from/FromClauseTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/from/FromClauseTest.kt deleted file mode 100644 index 5e705ad65..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/from/FromClauseTest.kt +++ /dev/null @@ -1,564 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.from - -import com.linecorp.kotlinjdsl.query.spec.* -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.employee.Employee -import com.linecorp.kotlinjdsl.test.entity.employee.FullTimeEmployee -import com.linecorp.kotlinjdsl.test.entity.employee.PartTimeEmployee -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - - -private typealias ExplicitErasedParent = Number -private typealias ExplicitErasedChild = Int - -@ExtendWith(MockKExtension::class) -internal class FromClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate - - @MockK - private lateinit var deleteQuery: CriteriaDelete - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - private val entitySpec1 = EntitySpec(Data1::class.java) - private val entitySpec2 = EntitySpec(Data2::class.java) - private val entitySpec3 = EntitySpec(Data3::class.java) - private val entitySpec4 = EntitySpec(Data4::class.java) - - @Test - fun join() { - // given - val fromEntitySpec = entitySpec1 - val fromClause = FromClause(fromEntitySpec) - - val joinSpec1 = SimpleJoinSpec(entitySpec1, entitySpec2, "data2", JoinType.INNER) - val joinSpec2 = SimpleJoinSpec(entitySpec2, entitySpec3, "data3", JoinType.LEFT) - val joinSpec3 = FetchJoinSpec(entitySpec2, entitySpec3, "data3", JoinType.INNER) - val joinSpec4 = FetchJoinSpec(entitySpec2, entitySpec3, "data3", JoinType.LEFT) - val joinSpec5 = CrossJoinSpec(entitySpec4) - val joinClause = JoinClause(listOf(joinSpec1, joinSpec2, joinSpec3, joinSpec4, joinSpec5)) - - val root = mockk>() - val join1 = mockk>() - val fetch1 = mockk>() - val crossJoin1 = mockk>() - - every { query.from(Data1::class.java) } returns root - every { root.join(any(), any()) } returns join1 - every { join1.fetch(any(), any()) } returns fetch1 - every { query.from(Data4::class.java) } returns crossJoin1 - - // when - val actual = fromClause.join(joinClause, query, criteriaBuilder) - - // then - assertThat(actual).usingRecursiveComparison().isEqualTo( - Froms( - root = root, - map = mapOf( - entitySpec1 to root, - entitySpec2 to join1, - entitySpec3 to fetch1, - entitySpec4 to crossJoin1, - ) - ) - ) - - verifyOrder { - query.from(Data1::class.java) - root.join("data2", JoinType.INNER) - join1.fetch("data3", JoinType.LEFT) - query.from(Data4::class.java) - } - - verify { - root.hashCode() - join1.hashCode() - fetch1.hashCode() - crossJoin1.hashCode() - } - - confirmVerified(root, join1, fetch1, crossJoin1, query) - } - - @Suppress("UNCHECKED_CAST") - @Test - fun treatWithOtherRoot() { - // given - val fromEntitySpec = EntitySpec(RootOther::class.java, "root") - val outerParent = EntitySpec(Parent::class.java, "outerParent") - val innerParent = EntitySpec(Parent::class.java, "innerParent") - val fetchInnerParent = EntitySpec(Parent::class.java, "fetchInnerParent") - val fetchOuterParent = EntitySpec(Parent::class.java, "fetchOuterParent") - - val treatInnerParent = EntitySpec(Parent::class.java, "treatInnerParent") - val treatOuterParent = EntitySpec(Parent::class.java, "treatOuterParent") - val child1Inner = EntitySpec(Child1::class.java, "child1Inner") - val child1Outer = EntitySpec(Child1::class.java, "child1Outer") - val child1FetchInner = EntitySpec(Child1::class.java, "child1FetchInner") - val child2FetchOuter = EntitySpec(Child2::class.java, "child2FetchOuter") - val child3 = EntitySpec(Child3::class.java, "child3") - val fromClause = FromClause(fromEntitySpec) - - val joinSpec1 = SimpleJoinSpec(fromEntitySpec, outerParent, RootOther::outerChild1.name, JoinType.INNER) - // winner with joinSpec1 - val joinSpec2 = SimpleJoinSpec(fromEntitySpec, outerParent, RootOther::outerChild1.name, JoinType.LEFT) - - // winner - val joinSpec3 = SimpleJoinSpec(fromEntitySpec, innerParent, RootOther::innerChild2.name, JoinType.INNER) - - // winner - val joinSpec4 = CrossJoinSpec(child3) - - // winner - val joinSpec5 = - FetchJoinSpec(fromEntitySpec, fetchInnerParent, RootOther::fetchInnerChild1.name, JoinType.INNER) - - val joinSpec6 = - FetchJoinSpec(fromEntitySpec, fetchOuterParent, RootOther::fetchOuterChild2.name, JoinType.INNER) - // winner with joinSpec6 - val joinSpec7 = FetchJoinSpec(fromEntitySpec, fetchOuterParent, RootOther::fetchOuterChild2.name, JoinType.LEFT) - - // winner - val joinSpec8 = TreatJoinSpec( - left = innerParent, - right = child1Inner, - joinType = JoinType.INNER, - root = ColumnSpec(fromEntitySpec, RootOther::treatChildrenInner.name), - ) - - val joinSpec9 = TreatJoinSpec( - left = outerParent, - right = child1Outer, - joinType = JoinType.INNER, - root = ColumnSpec(fromEntitySpec, RootOther::treatChildrenOuter.name), - ) - // winner with joinSpec9 - val joinSpec10 = TreatJoinSpec( - left = outerParent, - right = child1Outer, - joinType = JoinType.LEFT, - root = ColumnSpec(fromEntitySpec, RootOther::treatChildrenOuter.name), - ) - - // winner - val joinSpec11 = TreatJoinSpec( - left = treatInnerParent, - right = child1FetchInner, - joinType = JoinType.INNER, - root = ColumnSpec(fromEntitySpec, RootOther::treatFetchInnerChild1.name), - ) - - val joinSpec12 = TreatJoinSpec( - left = treatOuterParent, - right = child2FetchOuter, - joinType = JoinType.INNER, - root = ColumnSpec(fromEntitySpec, RootOther::treatFetchOuterChild2.name), - ) - // winner with joinSpec12 - val joinSpec13 = TreatJoinSpec( - left = treatOuterParent, - right = child2FetchOuter, - joinType = JoinType.LEFT, - root = ColumnSpec(fromEntitySpec, RootOther::treatFetchOuterChild2.name), - ) - - - val joinClause = JoinClause( - listOf( - joinSpec1, - joinSpec2, - joinSpec3, - joinSpec4, - joinSpec5, - joinSpec6, - joinSpec7, - joinSpec8, - joinSpec9, - joinSpec10, - joinSpec11, - joinSpec12, - joinSpec13, - ) - ) - - val root = mockk>() - val outerJoin1 = mockk>() - val innerJoin1 = mockk>() - val crossJoin1 = mockk>() - - val fetchInnerJoin1 = mockk>() - val fetchOuterJoin1 = mockk>() - - val treatInnerParentJoin1 = mockk>() - val treatOuterParentJoin1 = mockk>() - - val treatJoin1 = mockk>() - val treatJoin2 = mockk>() - val treatJoin3 = mockk>() - val treatJoin4 = mockk>() - - every { query.from(RootOther::class.java) } returns root - every { root.join(RootOther::outerChild1.name, JoinType.LEFT) } returns outerJoin1 - every { root.join(RootOther::innerChild2.name, JoinType.INNER) } returns innerJoin1 - every { query.from(Child3::class.java) } returns crossJoin1 - - every { - root.fetch( - RootOther::fetchInnerChild1.name, - JoinType.INNER - ) - } returns fetchInnerJoin1 - every { root.fetch(RootOther::fetchOuterChild2.name, JoinType.LEFT) } returns fetchOuterJoin1 - - every { - criteriaBuilder.treat( - innerJoin1 as Join, - Child1::class.java as Class - ) - } returns treatJoin1 - every { - criteriaBuilder.treat( - outerJoin1 as Join, - Child1::class.java as Class - ) - } returns treatJoin2 - - every { - root.join( - RootOther::treatFetchInnerChild1.name, - JoinType.INNER - ) - } returns treatInnerParentJoin1 - every { - root.join( - RootOther::treatFetchOuterChild2.name, - JoinType.LEFT - ) - } returns treatOuterParentJoin1 - - every { - criteriaBuilder.treat( - treatInnerParentJoin1 as Join, - Child1::class.java as Class - ) - } returns treatJoin3 - every { - criteriaBuilder.treat( - treatOuterParentJoin1 as Join, - Child2::class.java as Class - ) - } returns treatJoin4 - - // when - val actual = fromClause.join(joinClause, query, criteriaBuilder) - - // then - assertThat(actual).usingRecursiveComparison().isEqualTo( - Froms( - root = root, - map = mapOf( - fromEntitySpec to root, - fetchOuterParent to fetchOuterJoin1, - fetchInnerParent to fetchInnerJoin1, - outerParent to outerJoin1, - innerParent to innerJoin1, - child3 to crossJoin1, - treatOuterParent to treatOuterParentJoin1, - treatInnerParent to treatInnerParentJoin1, - child1Inner to treatJoin1, - child1Outer to treatJoin2, - child1FetchInner to treatJoin3, - child2FetchOuter to treatJoin4, - ) - ) - ) - - verify { - query.from(RootOther::class.java) - root.join(RootOther::outerChild1.name, JoinType.LEFT) - root.join(RootOther::innerChild2.name, JoinType.INNER) - query.from(Child3::class.java) - root.fetch( - RootOther::fetchInnerChild1.name, - JoinType.INNER - ) - root.fetch(RootOther::fetchOuterChild2.name, JoinType.LEFT) - criteriaBuilder.treat( - innerJoin1 as Join, - Child1::class.java as Class - ) - criteriaBuilder.treat( - outerJoin1 as Join, - Child1::class.java as Class - ) - root.join( - RootOther::treatFetchInnerChild1.name, - JoinType.INNER - ) - - root.join( - RootOther::treatFetchOuterChild2.name, - JoinType.LEFT - ) - criteriaBuilder.treat( - treatInnerParentJoin1 as Join, - Child1::class.java as Class - ) - criteriaBuilder.treat( - treatOuterParentJoin1 as Join, - Child2::class.java as Class - ) - } - } - - @Suppress("UNCHECKED_CAST") - @Test - fun treatJoinRoot() { - // given - val fromEntitySpec = EntitySpec(Employee::class.java) - val entitySpec1 = EntitySpec(FullTimeEmployee::class.java, "fe") - val entitySpec2 = EntitySpec(PartTimeEmployee::class.java, "pe") - val fromClause = FromClause(fromEntitySpec) - - val joinSpec0 = TreatJoinSpec( - left = fromEntitySpec, - right = entitySpec1, - joinType = JoinType.INNER, - root = ColumnSpec(fromEntitySpec, "fe"), - ) - - val joinSpec1 = TreatJoinSpec( - left = fromEntitySpec, - right = entitySpec2, - joinType = JoinType.LEFT, - root = ColumnSpec(fromEntitySpec, "pe"), - ) - - val joinClause = JoinClause( - listOf( - joinSpec0, - joinSpec1 - ) - ) - - val root = mockk>() - val join0 = mockk>() - val join1 = mockk>() - - every { root.javaType } returns Employee::class.java - every { query.from(Employee::class.java) } returns root - every { - criteriaBuilder.treat( - root as Root, - joinSpec0.right.type as Class - ) - } returns join0 as Root - every { - criteriaBuilder.treat( - root as Root, - joinSpec1.right.type as Class - ) - } returns join0 as Root - - // when - val actual = fromClause.join(joinClause, query, criteriaBuilder) - - // then - assertThat(actual).usingRecursiveComparison().isEqualTo( - Froms( - root = root, - map = mapOf( - fromEntitySpec to root, - entitySpec1 to join0 as Root, - entitySpec2 to join1, - ) - ) - ) - - verify { - query.from(Employee::class.java) - root.javaType - criteriaBuilder.treat( - root as Root, - joinSpec0.right.type as Class - ) - criteriaBuilder.treat( - root as Root, - joinSpec1.right.type as Class - ) - root.hashCode() - join0.hashCode() - join1.hashCode() - } - - confirmVerified(root, join0, join1, query) - } - - @Test - fun `join - if join is incomplete then throw exception`() { - // given - val fromEntitySpec = entitySpec1 - val fromClause = FromClause(fromEntitySpec) - - val joinSpec = SimpleJoinSpec(entitySpec2, entitySpec3, "data3", JoinType.LEFT) - val joinClause = JoinClause(listOf(joinSpec)) - - val root = mockk>() - - every { query.from(Data1::class.java) } returns root - - // when - val exception = catchThrowable(IllegalStateException::class) { - fromClause.join(joinClause, query, criteriaBuilder) - } - - // then - assertThat(exception) - .hasMessageContaining("Join clause is incomplete. Please check if the following Entities are joined") - - verify(exactly = 1) { - query.from(Data1::class.java) - } - - confirmVerified(root, query) - } - - @Test - fun associate() { - // given - val fromEntitySpec = entitySpec1 - val fromClause = FromClause(fromEntitySpec) - - val joinSpec1 = SimpleAssociatedJoinSpec(entitySpec1, entitySpec2, "data2") - val joinSpec2 = SimpleAssociatedJoinSpec(entitySpec2, entitySpec3, "data3") - val joinClause = SimpleAssociatedJoinClause(listOf(joinSpec1, joinSpec2)) - - val root = mockk>() - val join1 = mockk>() - val join2 = mockk>() - - every { updateQuery.from(Data1::class.java) } returns root - every { deleteQuery.from(Data1::class.java) } returns root - every { root.get(joinSpec1.path) } returns join1 - every { join1.get(joinSpec2.path) } returns join2 - - // when - val actual = fromClause.associate(joinClause, updateQuery) - val deleteActual = fromClause.associate(joinClause, deleteQuery) - - // then - assertThat(actual).usingRecursiveComparison().isEqualTo( - Froms( - root = root, - map = mapOf( - entitySpec1 to root, - entitySpec2 to join1, - entitySpec3 to join2, - ) - ) - ) - assertThat(deleteActual).usingRecursiveComparison().isEqualTo( - Froms( - root = root, - map = mapOf( - entitySpec1 to root, - entitySpec2 to join1, - entitySpec3 to join2, - ) - ) - ) - - verify(exactly = 1) { - updateQuery.from(Data1::class.java) - deleteQuery.from(Data1::class.java) - } - - verify(exactly = 2) { - root.get(joinSpec1.path) - join1.get(joinSpec2.path) - } - - verify { - root.hashCode() - join1.hashCode() - join2.hashCode() - } - - confirmVerified(root, join1, join2, updateQuery, deleteQuery) - } - - @Test - fun `associate - if associate is incomplete then throw exception`() { - // given - val fromEntitySpec = entitySpec1 - val fromClause = FromClause(fromEntitySpec) - - val joinSpec = SimpleAssociatedJoinSpec(entitySpec2, entitySpec3, "data3") - val joinClause = SimpleAssociatedJoinClause(listOf(joinSpec)) - - val root = mockk>() - - every { updateQuery.from(Data1::class.java) } returns root - every { deleteQuery.from(Data1::class.java) } returns root - - // when - val exception = catchThrowable(IllegalStateException::class) { - fromClause.associate(joinClause, updateQuery) - } - - val deleteException = catchThrowable(IllegalStateException::class) { - fromClause.associate(joinClause, deleteQuery) - } - - // then - assertThat(exception) - .hasMessageContaining("Associate clause is incomplete. Please check if the following Entities are associated") - - assertThat(deleteException) - .hasMessageContaining("Associate clause is incomplete. Please check if the following Entities are associated") - - verify(exactly = 1) { - updateQuery.from(Data1::class.java) - deleteQuery.from(Data1::class.java) - } - - confirmVerified(root, updateQuery, deleteQuery) - } - - private class Data1 - private class Data2 - private class Data3 - private class Data4 - - private class RootOther( - val id: Long, - val treatChildrenInner: List, - val treatChildrenOuter: List, - val innerChild2: Parent, - val outerChild1: Parent, - val fetchInnerChild1: Parent, - val fetchOuterChild2: Parent, - val treatFetchInnerChild1: Parent, - val treatFetchOuterChild2: Parent - ) - - private open class Parent(val id: Long, val rootId: Long) - private class Child1(parentId: Long, rootId: Long) : Parent(parentId, rootId) - private class Child2(parentId: Long, rootId: Long) : Parent(parentId, rootId) - private class Child3(parentId: Long, rootId: Long) : Parent(parentId, rootId) - - private interface MockFetch : Join, Fetch -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/GroupByClauseTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/GroupByClauseTest.kt deleted file mode 100644 index 34729bee9..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/groupby/GroupByClauseTest.kt +++ /dev/null @@ -1,106 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.groupby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Expression -import javax.persistence.criteria.Subquery - -@ExtendWith(MockKExtension::class) -internal class GroupByClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var subquery: Subquery - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `apply criteria query`() { - // given - val expressionSpec1: ExpressionSpec<*> = mockk() - val expressionSpec2: ExpressionSpec<*> = mockk() - - val expression1: Expression<*> = mockk() - val expression2: Expression<*> = mockk() - - every { expressionSpec1.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression1 - every { expressionSpec2.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression2 - - every { criteriaQuery.groupBy(listOf(expression1, expression2)) } returns criteriaQuery - - // when - GroupByClause(listOf(expressionSpec1, expressionSpec2)).apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec1.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - expressionSpec2.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - - criteriaQuery.groupBy(listOf(expression1, expression2)) - } - - confirmVerified(expressionSpec1, expressionSpec2, froms, subquery, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply criteria query - if expression is empty then do nothing`() { - // when - GroupByClause(emptyList()).apply(froms, criteriaQuery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply subquery`() { - // given - val expressionSpec1: ExpressionSpec<*> = mockk() - val expressionSpec2: ExpressionSpec<*> = mockk() - - val expression1: Expression<*> = mockk() - val expression2: Expression<*> = mockk() - - every { expressionSpec1.toCriteriaExpression(froms, subquery, criteriaBuilder) } returns expression1 - every { expressionSpec2.toCriteriaExpression(froms, subquery, criteriaBuilder) } returns expression2 - - every { subquery.groupBy(listOf(expression1, expression2)) } returns subquery - - // when - GroupByClause(listOf(expressionSpec1, expressionSpec2)).apply(froms, subquery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec1.toCriteriaExpression(froms, subquery, criteriaBuilder) - expressionSpec2.toCriteriaExpression(froms, subquery, criteriaBuilder) - - subquery.groupBy(listOf(expression1, expression2)) - } - - confirmVerified(expressionSpec1, expressionSpec2, froms, subquery, subquery, criteriaBuilder) - } - - @Test - fun `apply subquery - if expression is empty then do nothing`() { - // when - GroupByClause(emptyList()).apply(froms, subquery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, subquery, criteriaBuilder) - } -} \ No newline at end of file diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/having/HavingClauseTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/having/HavingClauseTest.kt deleted file mode 100644 index 4500603dd..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/having/HavingClauseTest.kt +++ /dev/null @@ -1,100 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.having - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Predicate -import javax.persistence.criteria.Subquery - -@ExtendWith(MockKExtension::class) -internal class HavingClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var subquery: Subquery - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `apply criteria query`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - every { predicateSpec.isEmpty() } returns false - every { predicateSpec.toCriteriaPredicate(froms, criteriaQuery, criteriaBuilder) } returns predicate - every { criteriaQuery.having(predicate) } returns criteriaQuery - - // when - HavingClause(predicateSpec).apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - predicateSpec.isEmpty() - predicateSpec.toCriteriaPredicate(froms, criteriaQuery, criteriaBuilder) - criteriaQuery.having(predicate) - - criteriaQuery.having(predicate) - } - - confirmVerified(predicateSpec, froms, subquery, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply criteria query - if predicate is empty then do nothing`() { - // when - HavingClause(PredicateSpec.empty).apply(froms, criteriaQuery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply subquery`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - every { predicateSpec.isEmpty() } returns false - every { predicateSpec.toCriteriaPredicate(froms, subquery, criteriaBuilder) } returns predicate - every { subquery.having(predicate) } returns subquery - - // when - HavingClause(predicateSpec).apply(froms, subquery, criteriaBuilder) - - // then - verify(exactly = 1) { - predicateSpec.isEmpty() - predicateSpec.toCriteriaPredicate(froms, subquery, criteriaBuilder) - subquery.having(predicate) - - subquery.having(predicate) - } - - confirmVerified(predicateSpec, froms, subquery, subquery, criteriaBuilder) - } - - @Test - fun `apply subquery - if predicate is empty then do nothing`() { - // when - HavingClause(PredicateSpec.empty).apply(froms, subquery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, subquery, criteriaBuilder) - } -} \ No newline at end of file diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/OrderByClauseTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/OrderByClauseTest.kt deleted file mode 100644 index 29016b1ab..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/orderby/OrderByClauseTest.kt +++ /dev/null @@ -1,65 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Order - -@ExtendWith(MockKExtension::class) -internal class OrderByClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun apply() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - val order1: Order = mockk() - val order2: Order = mockk() - val order3: Order = mockk() - - every { orderSpec1.toCriteriaOrder(froms, criteriaQuery, criteriaBuilder) } returns listOf(order1) - every { orderSpec2.toCriteriaOrder(froms, criteriaQuery, criteriaBuilder) } returns listOf(order2, order3) - - every { criteriaQuery.orderBy(listOf(order1, order2, order3)) } returns criteriaQuery - - // when - OrderByClause(listOf(orderSpec1, orderSpec2)).apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - orderSpec1.toCriteriaOrder(froms, criteriaQuery, criteriaBuilder) - orderSpec2.toCriteriaOrder(froms, criteriaQuery, criteriaBuilder) - criteriaQuery.orderBy(listOf(order1, order2, order3)) - } - - confirmVerified(orderSpec1, orderSpec2, froms, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply - empty`() { - // when - OrderByClause(emptyList()).apply(froms, criteriaQuery, criteriaBuilder) - - // then - confirmVerified(froms, criteriaQuery, criteriaBuilder) - } -} \ No newline at end of file diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountMultiSelectClauseTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountMultiSelectClauseTest.kt deleted file mode 100644 index ec35ed10c..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountMultiSelectClauseTest.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Expression - -@ExtendWith(MockKExtension::class) -internal class CountMultiSelectClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun apply() { - // given - val expressionSpec1: ExpressionSpec<*> = mockk() - val expressionSpec2: ExpressionSpec<*> = mockk() - - val literalExpression: Expression = mockk() - val countExpression: Expression = mockk() - - every { criteriaBuilder.literal(1) } returns literalExpression - every { criteriaBuilder.count(literalExpression) } returns countExpression - every { criteriaQuery.select(countExpression) } returns criteriaQuery - - // when - CountMultiSelectClause(distinct = false, listOf(expressionSpec1, expressionSpec2)) - .apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - criteriaBuilder.literal(1) - criteriaBuilder.count(literalExpression) - - criteriaQuery.select(countExpression) - } - - confirmVerified(froms, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply - if it is distinct then throw exception`() { - // given - val expressionSpec1: ExpressionSpec<*> = mockk() - val expressionSpec2: ExpressionSpec<*> = mockk() - - // when - val exception = catchThrowable(IllegalStateException::class) { - CountMultiSelectClause(distinct = true, listOf(expressionSpec1, expressionSpec2)) - .apply(froms, criteriaQuery, criteriaBuilder) - } - - // then - assertThat(exception).hasMessageContaining( - "Count distinct does not support multiple columns. Please remove distinct in selection" - ) - - confirmVerified(froms, criteriaQuery, criteriaBuilder) - } -} \ No newline at end of file diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountSingleSelectClauseTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountSingleSelectClauseTest.kt deleted file mode 100644 index f529e8cc3..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/CountSingleSelectClauseTest.kt +++ /dev/null @@ -1,78 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Expression - -@ExtendWith(MockKExtension::class) -internal class CountSingleSelectClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `apply - distinct`() { - // given - val expressionSpec: ExpressionSpec<*> = mockk() - val expression: Expression<*> = mockk() - - val countDistinctExpression: Expression = mockk() - - every { expressionSpec.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.countDistinct(expression) } returns countDistinctExpression - every { criteriaQuery.select(countDistinctExpression) } returns criteriaQuery - - // when - CountSingleSelectClause(distinct = true, expressionSpec).apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - criteriaBuilder.countDistinct(expression) - criteriaQuery.select(countDistinctExpression) - } - - confirmVerified(expressionSpec, froms, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply - not distinct`() { - // given - val expressionSpec: ExpressionSpec<*> = mockk() - val expression: Expression<*> = mockk() - - val countExpression: Expression = mockk() - - every { expressionSpec.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.count(expression) } returns countExpression - every { criteriaQuery.select(countExpression) } returns criteriaQuery - - // when - CountSingleSelectClause(distinct = false, expressionSpec).apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - criteriaBuilder.count(expression) - criteriaQuery.select(countExpression) - } - - confirmVerified(expressionSpec, froms, criteriaQuery, criteriaBuilder) - } -} \ No newline at end of file diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/MultiSelectClauseTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/MultiSelectClauseTest.kt deleted file mode 100644 index 6c6439965..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/MultiSelectClauseTest.kt +++ /dev/null @@ -1,64 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.CompoundSelection -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Expression - -@ExtendWith(MockKExtension::class) -internal class MultiSelectClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun apply() { - // given - val expressionSpec1: ExpressionSpec<*> = mockk() - val expressionSpec2: ExpressionSpec<*> = mockk() - - val expression1: Expression<*> = mockk() - val expression2: Expression<*> = mockk() - - val constructExpression: CompoundSelection = mockk() - - every { expressionSpec1.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression1 - every { expressionSpec2.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression2 - every { criteriaBuilder.construct(Data1::class.java, expression1, expression2) } returns constructExpression - every { criteriaQuery.select(constructExpression) } returns criteriaQuery - every { criteriaQuery.distinct(true) } returns criteriaQuery - - // when - MultiSelectClause(Data1::class.java, distinct = true, listOf(expressionSpec1, expressionSpec2)) - .apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec1.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - expressionSpec2.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - criteriaBuilder.construct(Data1::class.java, expression1, expression2) - criteriaQuery.select(constructExpression) - criteriaQuery.distinct(true) - } - - confirmVerified(expressionSpec1, expressionSpec2, froms, criteriaQuery, criteriaBuilder) - } - - class Data1 -} \ No newline at end of file diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SingleSelectClauseTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SingleSelectClauseTest.kt deleted file mode 100644 index d407961a3..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/select/SingleSelectClauseTest.kt +++ /dev/null @@ -1,80 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.select - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Expression -import javax.persistence.criteria.Subquery - -@ExtendWith(MockKExtension::class) -internal class SingleSelectClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var subquery: Subquery - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `apply criteria query`() { - // given - val expressionSpec: ExpressionSpec = mockk() - val expression: Expression = mockk() - - every { expressionSpec.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) } returns expression - every { criteriaQuery.select(expression) } returns criteriaQuery - every { criteriaQuery.distinct(true) } returns criteriaQuery - - // when - SingleSelectClause(Int::class.java, distinct = true, expressionSpec) - .apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - criteriaQuery.select(expression) - criteriaQuery.distinct(true) - } - - confirmVerified(expressionSpec, froms, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply subquery`() { - // given - val expressionSpec: ExpressionSpec = mockk() - val expression: Expression = mockk() - - every { expressionSpec.toCriteriaExpression(froms, subquery, criteriaBuilder) } returns expression - every { subquery.select(expression) } returns subquery - every { subquery.distinct(true) } returns subquery - - // when - SingleSelectClause(Int::class.java, distinct = true, expressionSpec) - .apply(froms, subquery, criteriaBuilder) - - // then - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, subquery, criteriaBuilder) - subquery.select(expression) - subquery.distinct(true) - } - - confirmVerified(expressionSpec, froms, criteriaQuery, criteriaBuilder) - } -} \ No newline at end of file diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/set/SetClauseTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/set/SetClauseTest.kt deleted file mode 100644 index 15147633d..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/set/SetClauseTest.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.set - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaUpdate -import javax.persistence.criteria.Path - -internal class SetClauseTest { - @Suppress("CAST_NEVER_SUCCEEDS") - @Test - fun apply() { - val froms: Froms = mockk() - val query: CriteriaUpdate = mockk() - val criteriaBuilder: CriteriaBuilder = mockk() - - val column1 = mockk>() - val column2 = mockk>() - val params: Map, Any?> = mapOf(column1 to 1234, column2 to null) - - val key1 = mockk>() - val key2 = mockk>() - every { query.set(key1, 1234) } returns query - every { query.set(key2, null as? String) } returns query - every { column1.toCriteriaExpression(froms, query, criteriaBuilder) } returns key1 - every { column2.toCriteriaExpression(froms, query, criteriaBuilder) } returns key2 - - SetClause(params).apply(froms, query, criteriaBuilder) - - verify(exactly = 1) { - query.set(key1, 1234) - query.set(key2, null as? String) - column1.toCriteriaExpression(froms, query, criteriaBuilder) - column2.toCriteriaExpression(froms, query, criteriaBuilder) - } - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/where/WhereClauseTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/where/WhereClauseTest.kt deleted file mode 100644 index e41ede29f..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/where/WhereClauseTest.kt +++ /dev/null @@ -1,171 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.where - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class WhereClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var subquery: Subquery - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaUpdateQuery: CriteriaUpdate - - @MockK - private lateinit var criteriaDeleteQuery: CriteriaDelete - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `apply criteria query`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - every { predicateSpec.isEmpty() } returns false - every { predicateSpec.toCriteriaPredicate(froms, criteriaQuery, criteriaBuilder) } returns predicate - every { criteriaQuery.where(predicate) } returns criteriaQuery - - // when - WhereClause(predicateSpec).apply(froms, criteriaQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - predicateSpec.isEmpty() - predicateSpec.toCriteriaPredicate(froms, criteriaQuery, criteriaBuilder) - criteriaQuery.where(predicate) - - criteriaQuery.where(predicate) - } - - confirmVerified(predicateSpec, froms, subquery, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply criteria query - if predicate is empty then do nothing`() { - // when - WhereClause(PredicateSpec.empty).apply(froms, criteriaQuery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, criteriaQuery, criteriaBuilder) - } - - @Test - fun `apply criteria update query`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - every { predicateSpec.isEmpty() } returns false - every { predicateSpec.toCriteriaPredicate(froms, criteriaUpdateQuery, criteriaBuilder) } returns predicate - every { criteriaUpdateQuery.where(predicate) } returns criteriaUpdateQuery - - // when - WhereClause(predicateSpec).apply(froms, criteriaUpdateQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - predicateSpec.isEmpty() - predicateSpec.toCriteriaPredicate(froms, criteriaUpdateQuery, criteriaBuilder) - criteriaUpdateQuery.where(predicate) - - criteriaUpdateQuery.where(predicate) - } - - confirmVerified(predicateSpec, froms, subquery, criteriaUpdateQuery, criteriaBuilder) - } - - @Test - fun `apply criteria update query - if predicate is empty then do nothing`() { - // when - WhereClause(PredicateSpec.empty).apply(froms, criteriaUpdateQuery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, criteriaUpdateQuery, criteriaBuilder) - } - - @Test - fun `apply criteria delete query`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - every { predicateSpec.isEmpty() } returns false - every { predicateSpec.toCriteriaPredicate(froms, criteriaDeleteQuery, criteriaBuilder) } returns predicate - every { criteriaDeleteQuery.where(predicate) } returns criteriaDeleteQuery - - // when - WhereClause(predicateSpec).apply(froms, criteriaDeleteQuery, criteriaBuilder) - - // then - verify(exactly = 1) { - predicateSpec.isEmpty() - predicateSpec.toCriteriaPredicate(froms, criteriaDeleteQuery, criteriaBuilder) - criteriaDeleteQuery.where(predicate) - - criteriaDeleteQuery.where(predicate) - } - - confirmVerified(predicateSpec, froms, subquery, criteriaDeleteQuery, criteriaBuilder) - } - - @Test - fun `apply criteria delete query - if predicate is empty then do nothing`() { - // when - WhereClause(PredicateSpec.empty).apply(froms, criteriaDeleteQuery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, criteriaDeleteQuery, criteriaBuilder) - } - - @Test - fun `apply subquery`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - every { predicateSpec.isEmpty() } returns false - every { predicateSpec.toCriteriaPredicate(froms, subquery, criteriaBuilder) } returns predicate - every { subquery.where(predicate) } returns subquery - - // when - WhereClause(predicateSpec).apply(froms, subquery, criteriaBuilder) - - // then - verify(exactly = 1) { - predicateSpec.isEmpty() - predicateSpec.toCriteriaPredicate(froms, subquery, criteriaBuilder) - subquery.where(predicate) - - subquery.where(predicate) - } - - confirmVerified(predicateSpec, froms, subquery, subquery, criteriaBuilder) - } - - @Test - fun `apply subquery - if predicate is empty then do nothing`() { - // when - WhereClause(PredicateSpec.empty).apply(froms, subquery, criteriaBuilder) - - // then - confirmVerified(froms, subquery, subquery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/JpaCriteriaQueryBuilderTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/JpaCriteriaQueryBuilderTest.kt deleted file mode 100644 index 2515c2f7f..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/JpaCriteriaQueryBuilderTest.kt +++ /dev/null @@ -1,254 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.EntityManager -import javax.persistence.Query -import javax.persistence.TypedQuery -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class JpaCriteriaQueryBuilderTest : WithKotlinJdslAssertions { - private val sut = JpaCriteriaQueryBuilder - - @MockK - private lateinit var em: EntityManager - - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun createQuery() { - data class TestCriteriaQuerySpec( - override val select: CriteriaQuerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: CriteriaQueryWhereClause, - override val groupBy: CriteriaQueryGroupByClause, - override val having: CriteriaQueryHavingClause, - override val orderBy: CriteriaQueryOrderByClause, - override val limit: QueryLimitClause>, - override val jpaHint: JpaQueryHintClause>, - override val sqlHint: SqlQueryHintClause>, - ) : CriteriaQuerySpec> - // given - val createdQuery: CriteriaQuery = mockk() - val typedQuery: TypedQuery = mockk() - - val select: CriteriaQuerySelectClause = mockk { - every { returnType } returns Int::class.java - } - val from: FromClause<*> = mockk() - val join: JoinClause = mockk() - val where: CriteriaQueryWhereClause = mockk() - val groupBy: CriteriaQueryGroupByClause = mockk() - val having: CriteriaQueryHavingClause = mockk() - val orderBy: CriteriaQueryOrderByClause = mockk() - val limit: QueryLimitClause> = mockk() - val jpaHint: JpaQueryHintClause> = mockk() - val sqlHint: SqlQueryHintClause> = mockk() - - val spec: CriteriaQuerySpec> = TestCriteriaQuerySpec( - from = from, - join = join, - where = where, - groupBy = groupBy, - having = having, - orderBy = orderBy, - limit = limit, - jpaHint = jpaHint, - sqlHint = sqlHint, - select = select - ) - - every { em.createQuery(createdQuery) } returns typedQuery - every { criteriaBuilder.createQuery(Int::class.java) } returns createdQuery - every { from.join(join, createdQuery, criteriaBuilder) } returns froms - every { select.apply(froms, createdQuery, criteriaBuilder) } just runs - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { groupBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { having.apply(froms, createdQuery, criteriaBuilder) } just runs - every { orderBy.apply(froms, createdQuery, criteriaBuilder) } just runs - every { limit.apply(typedQuery) } just runs - every { jpaHint.apply(typedQuery) } just runs - every { sqlHint.apply(typedQuery) } just runs - - // when - val actual = sut.createQuery(spec, criteriaBuilder, em::createQuery) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - em.createQuery(createdQuery) - criteriaBuilder.createQuery(Int::class.java) - from.join(join, createdQuery, criteriaBuilder) - select.returnType - select.apply(froms, createdQuery, criteriaBuilder) - where.apply(froms, createdQuery, criteriaBuilder) - groupBy.apply(froms, createdQuery, criteriaBuilder) - having.apply(froms, createdQuery, criteriaBuilder) - orderBy.apply(froms, createdQuery, criteriaBuilder) - limit.apply(typedQuery) - jpaHint.apply(typedQuery) - sqlHint.apply(typedQuery) - typedQuery == typedQuery - } - - confirmVerified( - select, from, join, where, groupBy, having, orderBy, limit, jpaHint, sqlHint, - createdQuery, typedQuery, - em, froms, criteriaBuilder - ) - } - - @Test - fun createUpdateQuery() { - data class TestCriteriaUpdateQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - override val set: SetClause - ) : CriteriaUpdateQuerySpec - // given - val createdQuery: CriteriaUpdate = mockk() - val query: Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause = mockk() - val sqlHint: SqlQueryHintClause = mockk() - val set: SetClause = mockk() - - val spec: CriteriaUpdateQuerySpec = TestCriteriaUpdateQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - set = set, - targetEntity = Int::class.java - ) - - val setKey = mockk>() - every { createdQuery.set(setKey, 1234) } returns createdQuery - - every { em.createQuery(createdQuery) } returns query - every { criteriaBuilder.createCriteriaUpdate(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(query) } just runs - every { sqlHint.apply(query) } just runs - every { set.apply(froms, createdQuery, criteriaBuilder) } just runs - - // when - val actual = sut.createQuery(spec, criteriaBuilder, em::createQuery) - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - em.createQuery(createdQuery) - criteriaBuilder.createCriteriaUpdate(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - set.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query) - sqlHint.apply(query) - query == query - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, query, - em, froms, criteriaBuilder - ) - } - - @Test - fun createDeleteQuery() { - data class TestCriteriaDeleteQuerySpec( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - ) : CriteriaDeleteQuerySpec - // given - val createdQuery: CriteriaDelete = mockk() - val query: Query = mockk() - - val from: FromClause = mockk() - val associate = SimpleAssociatedJoinClause(emptyList()) - val where: CriteriaQueryWhereClause = mockk() - val jpaHint: JpaQueryHintClause = mockk() - val sqlHint: SqlQueryHintClause = mockk() - val set: SetClause = mockk() - - val spec: CriteriaDeleteQuerySpec = TestCriteriaDeleteQuerySpec( - from = from, - associate = associate, - where = where, - jpaHint = jpaHint, - sqlHint = sqlHint, - targetEntity = Int::class.java - ) - - every { em.createQuery(createdQuery) } returns query - every { criteriaBuilder.createCriteriaDelete(Int::class.java) } returns createdQuery - every { from.associate(associate, createdQuery) } returns froms - every { where.apply(froms, createdQuery, criteriaBuilder) } just runs - every { jpaHint.apply(query) } just runs - every { sqlHint.apply(query) } just runs - - // when - val actual = sut.createQuery(spec, criteriaBuilder, em::createQuery) - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - em.createQuery(createdQuery) - criteriaBuilder.createCriteriaDelete(Int::class.java) - from.associate(associate, createdQuery) - where.apply(froms, createdQuery, criteriaBuilder) - jpaHint.apply(query) - sqlHint.apply(query) - query == query - } - - confirmVerified( - from, where, jpaHint, sqlHint, set, - createdQuery, query, - em, froms, criteriaBuilder - ) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreatorImplTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreatorImplTest.kt deleted file mode 100644 index bc5dc4014..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/creator/SubqueryCreatorImplTest.kt +++ /dev/null @@ -1,167 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.SubquerySpec -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.SubqueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.SubqueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.select.SubquerySelectClause -import com.linecorp.kotlinjdsl.query.clause.where.SubqueryWhereClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class SubqueryCreatorImplTest : WithAssertions { - private val sut: SubqueryCreatorImpl = SubqueryCreatorImpl() - - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @MockK - private lateinit var criteriaQuery: CriteriaQuery - - @MockK - private lateinit var criteriaUpdate: CriteriaUpdate - - @MockK - private lateinit var criteriaDelete: CriteriaDelete - - @MockK - private lateinit var subquery: Subquery - - data class TestSubquerySpec( - override val select: SubquerySelectClause, - override val from: FromClause, - override val join: JoinClause, - override val where: SubqueryWhereClause, - override val groupBy: SubqueryGroupByClause, - override val having: SubqueryHavingClause - ) : SubquerySpec - - @Test - fun createQuery() { - // given - val createdQuery: Subquery = mockk() - - val createdFroms: Froms = mockk() - val mergedFroms: Froms = mockk() - - val select: SubquerySelectClause = mockk { - every { returnType } returns Int::class.java - } - val from: FromClause = mockk() - val join: JoinClause = mockk() - val where: SubqueryWhereClause = mockk() - val groupBy: SubqueryGroupByClause = mockk() - val having: SubqueryHavingClause = mockk() - - val spec: SubquerySpec = TestSubquerySpec( - select = select, - from = from, - join = join, - where = where, - groupBy = groupBy, - having = having - ) - - every { criteriaQuery.subquery(Int::class.java) } returns createdQuery - every { from.join(join, createdQuery, criteriaBuilder) } returns createdFroms - every { createdFroms + froms } returns mergedFroms - every { select.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - every { where.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - every { groupBy.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - every { having.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - - // when - val actual = sut.createQuery(spec, froms, criteriaQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(createdQuery) - - verify(exactly = 1) { - criteriaQuery.subquery(Int::class.java) - from.join(join, createdQuery, criteriaBuilder) - createdFroms + froms - select.returnType - select.apply(mergedFroms, createdQuery, criteriaBuilder) - where.apply(mergedFroms, createdQuery, criteriaBuilder) - groupBy.apply(mergedFroms, createdQuery, criteriaBuilder) - having.apply(mergedFroms, createdQuery, criteriaBuilder) - createdQuery == createdQuery - } - - confirmVerified( - select, from, join, where, groupBy, having, - createdFroms, mergedFroms, createdQuery, - criteriaQuery, subquery, criteriaBuilder - ) - } - - @Test - fun createUpdateQuery() { - // given - val createdQuery: Subquery = mockk() - - val createdFroms: Froms = mockk() - val mergedFroms: Froms = mockk() - - val select: SubquerySelectClause = mockk { - every { returnType } returns Int::class.java - } - val from: FromClause = mockk() - val join: JoinClause = mockk() - val where: SubqueryWhereClause = mockk() - val groupBy: SubqueryGroupByClause = mockk() - val having: SubqueryHavingClause = mockk() - - val spec: SubquerySpec = TestSubquerySpec( - select = select, - from = from, - join = join, - where = where, - groupBy = groupBy, - having = having - ) - - every { criteriaUpdate.subquery(Int::class.java) } returns createdQuery - every { from.join(join, createdQuery, criteriaBuilder) } returns createdFroms - every { createdFroms + froms } returns mergedFroms - every { select.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - every { where.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - every { groupBy.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - every { having.apply(mergedFroms, createdQuery, criteriaBuilder) } just runs - - // when - val actual = sut.createQuery(spec, froms, criteriaUpdate, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(createdQuery) - - verify(exactly = 1) { - criteriaUpdate.subquery(Int::class.java) - from.join(join, createdQuery, criteriaBuilder) - createdFroms + froms - select.returnType - select.apply(mergedFroms, createdQuery, criteriaBuilder) - where.apply(mergedFroms, createdQuery, criteriaBuilder) - groupBy.apply(mergedFroms, createdQuery, criteriaBuilder) - having.apply(mergedFroms, createdQuery, criteriaBuilder) - createdQuery == createdQuery - } - - confirmVerified( - select, from, join, where, groupBy, having, - createdFroms, mergedFroms, createdQuery, - criteriaUpdate, subquery, criteriaBuilder - ) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/ExpressionOrderSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/ExpressionOrderSpecTest.kt deleted file mode 100644 index 726c44685..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/ExpressionOrderSpecTest.kt +++ /dev/null @@ -1,82 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Expression -import javax.persistence.criteria.Order - -@ExtendWith(MockKExtension::class) -internal class ExpressionOrderSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: CriteriaQuery<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `toCriteriaOrder - asc`() { - // given - val expression = mockk>() - val criteriaExpression = mockk>() - - val order = mockk() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns criteriaExpression - every { criteriaBuilder.asc(any()) } returns order - - // when - val spec = ExpressionOrderSpec(expression, ascending = true) - - val actual = spec.toCriteriaOrder(froms, query, criteriaBuilder) - - // then - assertThat(actual).containsOnly(order) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.asc(criteriaExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaOrder - desc`() { - // given - val expression = mockk>() - val criteriaExpression = mockk>() - - val order = mockk() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns criteriaExpression - every { criteriaBuilder.desc(any()) } returns order - - // when - val spec = ExpressionOrderSpec(expression, ascending = false) - - val actual = spec.toCriteriaOrder(froms, query, criteriaBuilder) - - // then - assertThat(actual).containsOnly(order) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.desc(criteriaExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/FromsTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/FromsTest.kt deleted file mode 100644 index 4d2fa0f0a..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/FromsTest.kt +++ /dev/null @@ -1,130 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec - -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.From -import javax.persistence.criteria.Path -import javax.persistence.criteria.Root - -@ExtendWith(MockKExtension::class) -internal class FromsTest : WithKotlinJdslAssertions { - @Test - fun get() { - // given - val root: Root<*> = mockk() - - val entitySpec1 = EntitySpec(Data1::class.java) - val from1: Path<*> = mockk() - - val entitySpec2 = EntitySpec(Data2::class.java) - val from2: From<*, *> = mockk() - - val entitySpec3 = EntitySpec(Data3::class.java) - - // when - val froms = Froms( - root, mapOf( - entitySpec1 to from1, - entitySpec2 to from2, - ) - ) - - // then - assertThat(froms[entitySpec1]).isEqualTo(from1) - assertThat(froms[entitySpec2]).isEqualTo(from2) - - val exception = catchThrowable(IllegalStateException::class) { froms[entitySpec3] } - assertThat(exception).isNotNull - } - - @Test - fun plus() { - // given - val rootOfLeft: Root<*> = mockk() - val rootOfRight: Root<*> = mockk() - - val entitySpec1 = EntitySpec(Data1::class.java) - val from1: From<*, *> = mockk() - - val entitySpec2 = EntitySpec(Data2::class.java) - val from2: From<*, *> = mockk() - - val entitySpec3 = EntitySpec(Data2::class.java, "data2") - val from3: From<*, *> = mockk() - - // when - val leftFroms = Froms( - rootOfLeft, mapOf( - entitySpec1 to from1, - entitySpec2 to from2, - ) - ) - - val rightFroms = Froms( - rootOfRight, mapOf( - entitySpec3 to from3, - ) - ) - - val actual = leftFroms + rightFroms - - // then - assertThat(actual[entitySpec1]).isEqualTo(from1) - assertThat(actual[entitySpec2]).isEqualTo(from2) - assertThat(actual[entitySpec3]).isEqualTo(from3) - } - - @Test - fun `plus - if there is duplicated entity then throw exception`() { - // given - val rootOfLeft: Root<*> = mockk() - val rootOfRight: Root<*> = mockk() - - val entitySpec1 = EntitySpec(Data1::class.java) - val from1: From<*, *> = mockk() - - val entitySpec2 = EntitySpec(Data2::class.java) - val from2: From<*, *> = mockk() - - val entitySpec3 = EntitySpec(Data2::class.java) - val from3: From<*, *> = mockk() - - // when - val leftFroms = Froms( - rootOfLeft, mapOf( - entitySpec1 to from1, - entitySpec2 to from2, - ) - ) - - val rightFroms = Froms( - rootOfRight, mapOf( - entitySpec3 to from3, - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - leftFroms + rightFroms - } - - // then - assertThat(exception) - .hasMessageContaining("Other froms has duplicated entitySpec. Please alias the duplicated entities") - } - - data class Data1( - val id: Long - ) - - data class Data2( - val id: Long - ) - - data class Data3( - val id: Long - ) -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpecTest.kt deleted file mode 100644 index f72ce3b65..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpecTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class AvgSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - val returnExpression = mockk>() - - val avgExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns returnExpression - every { criteriaBuilder.avg(any>()) } returns avgExpression - - // when - val spec = AvgSpec(expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(avgExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.avg(returnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val avgExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.avg(any>()) } returns avgExpression - - // when - val spec = AvgSpec(column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(avgExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.avg(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val avgExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.avg(any>()) } returns avgExpression - - // when - val spec = AvgSpec(column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(avgExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.avg(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CaseSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CaseSpecTest.kt deleted file mode 100644 index 8a5554f16..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CaseSpecTest.kt +++ /dev/null @@ -1,233 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class CaseSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val predicateSpec1 = mockk() - val predicateSpec2 = mockk() - - val predicate1 = mockk() - val predicate2 = mockk() - - val resultSpec1 = mockk>() - val resultSpec2 = mockk>() - - val result1 = mockk>() - val result2 = mockk>() - - val when1 = CaseSpec.WhenSpec(predicateSpec1, resultSpec1) - val when2 = CaseSpec.WhenSpec(predicateSpec2, resultSpec2) - - val otherwise1 = mockk>() - val otherwise1Expression = mockk>() - - val case = mockk>() - val caseExpression = mockk>() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { resultSpec1.toCriteriaExpression(any(), any>(), any()) } returns result1 - every { resultSpec2.toCriteriaExpression(any(), any>(), any()) } returns result2 - - every { otherwise1.toCriteriaExpression(any(), any>(), any()) } returns otherwise1Expression - - every { criteriaBuilder.selectCase() } returns case - every { case.`when`(any(), any>()) } returns case - every { case.otherwise(any>()) } returns caseExpression - - // when - val spec = CaseSpec(listOf(when1, when2), otherwise1) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(caseExpression) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, query, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, query, criteriaBuilder) - - resultSpec1.toCriteriaExpression(froms, query, criteriaBuilder) - resultSpec2.toCriteriaExpression(froms, query, criteriaBuilder) - - otherwise1.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.selectCase() - case.`when`(predicate1, result1) - case.`when`(predicate2, result2) - case.otherwise(otherwise1Expression) - } - - confirmVerified( - predicateSpec1, predicateSpec2, - resultSpec1, resultSpec2, - otherwise1, case, - froms, query, criteriaBuilder - ) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val predicateSpec1 = mockk() - val predicateSpec2 = mockk() - - val predicate1 = mockk() - val predicate2 = mockk() - - val resultSpec1 = mockk>() - val resultSpec2 = mockk>() - - val result1 = mockk>() - val result2 = mockk>() - - val when1 = CaseSpec.WhenSpec(predicateSpec1, resultSpec1) - val when2 = CaseSpec.WhenSpec(predicateSpec2, resultSpec2) - - val otherwise1 = mockk>() - val otherwise1Expression = mockk>() - - val case = mockk>() - val caseExpression = mockk>() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { resultSpec1.toCriteriaExpression(any(), any>(), any()) } returns result1 - every { resultSpec2.toCriteriaExpression(any(), any>(), any()) } returns result2 - - every { otherwise1.toCriteriaExpression(any(), any>(), any()) } returns otherwise1Expression - - every { criteriaBuilder.selectCase() } returns case - every { case.`when`(any(), any>()) } returns case - every { case.otherwise(any>()) } returns caseExpression - - // when - val spec = CaseSpec(listOf(when1, when2), otherwise1) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(caseExpression) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - resultSpec1.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - resultSpec2.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - otherwise1.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.selectCase() - case.`when`(predicate1, result1) - case.`when`(predicate2, result2) - case.otherwise(otherwise1Expression) - } - - confirmVerified( - predicateSpec1, predicateSpec2, - resultSpec1, resultSpec2, - otherwise1, case, - froms, updateQuery, criteriaBuilder - ) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val predicateSpec1 = mockk() - val predicateSpec2 = mockk() - - val predicate1 = mockk() - val predicate2 = mockk() - - val resultSpec1 = mockk>() - val resultSpec2 = mockk>() - - val result1 = mockk>() - val result2 = mockk>() - - val when1 = CaseSpec.WhenSpec(predicateSpec1, resultSpec1) - val when2 = CaseSpec.WhenSpec(predicateSpec2, resultSpec2) - - val otherwise1 = mockk>() - val otherwise1Expression = mockk>() - - val case = mockk>() - val caseExpression = mockk>() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { resultSpec1.toCriteriaExpression(any(), any>(), any()) } returns result1 - every { resultSpec2.toCriteriaExpression(any(), any>(), any()) } returns result2 - - every { otherwise1.toCriteriaExpression(any(), any>(), any()) } returns otherwise1Expression - - every { criteriaBuilder.selectCase() } returns case - every { case.`when`(any(), any>()) } returns case - every { case.otherwise(any>()) } returns caseExpression - - // when - val spec = CaseSpec(listOf(when1, when2), otherwise1) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(caseExpression) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - resultSpec1.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - resultSpec2.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - otherwise1.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.selectCase() - case.`when`(predicate1, result1) - case.`when`(predicate2, result2) - case.otherwise(otherwise1Expression) - } - - confirmVerified( - predicateSpec1, predicateSpec2, - resultSpec1, resultSpec2, - otherwise1, case, - froms, deleteQuery, criteriaBuilder - ) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ColumnSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ColumnSpecTest.kt deleted file mode 100644 index 61c1f3e45..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/ColumnSpecTest.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class ColumnSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val from = mockk>() - val path = mockk>() - - every { froms[any>()] } returns from - every { from.get(any()) } returns path - - // when - val spec = ColumnSpec(EntitySpec(Data::class.java), "name") - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(path) - - verify { - froms[EntitySpec(Data::class.java)] - from.get("name") - } - - confirmVerified(from, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val from = mockk>() - val path = mockk>() - - every { froms[any>()] } returns from - every { from.get(any()) } returns path - - // when - val spec = ColumnSpec(EntitySpec(Data::class.java), "name") - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(path) - - verify { - froms[EntitySpec(Data::class.java)] - from.get("name") - } - - confirmVerified(from, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val from = mockk>() - val path = mockk>() - - every { froms[any>()] } returns from - every { from.get(any()) } returns path - - // when - val spec = ColumnSpec(EntitySpec(Data::class.java), "name") - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(path) - - verify { - froms[EntitySpec(Data::class.java)] - from.get("name") - } - - confirmVerified(from, froms, deleteQuery, criteriaBuilder) - } - - private class Data { - val name = "name" - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpecTest.kt deleted file mode 100644 index 6516dab93..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpecTest.kt +++ /dev/null @@ -1,193 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class CountSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `toCriteriaExpression - distinct`() { - // given - val expression = mockk>() - val columnExpression = mockk>() - - val countExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.countDistinct(any>()) } returns countExpression - - // when - val spec = CountSpec(distinct = true, expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(countExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.countDistinct(columnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaExpression - non distinct`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val countExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.count(any>()) } returns countExpression - - // when - val spec = CountSpec(distinct = false, column) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(countExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.count(columnExpression) - } - - confirmVerified(column, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression - distinct`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val countExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.countDistinct(any>()) } returns countExpression - - // when - val spec = CountSpec(distinct = true, column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(countExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.countDistinct(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression - non distinct`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val countExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.count(any>()) } returns countExpression - - // when - val spec = CountSpec(distinct = false, column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(countExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.count(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression - distinct`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val countExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.countDistinct(any>()) } returns countExpression - - // when - val spec = CountSpec(distinct = true, column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(countExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.countDistinct(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression - non distinct`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val countExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.count(any>()) } returns countExpression - - // when - val spec = CountSpec(distinct = false, column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(countExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.count(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/EntitySpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/EntitySpecTest.kt deleted file mode 100644 index 382bd9a1e..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/EntitySpecTest.kt +++ /dev/null @@ -1,171 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class EntitySpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val from = mockk>() - - every { froms[any>()] } returns from - - // when - val spec = EntitySpec(Data::class.java) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(from) - - verify(exactly = 1) { - froms[spec] - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaExpression with alias`() { - // given - val from = mockk>() - - every { froms[any>()] } returns from - every { from.alias("data1") } returns mockk() - - // when - val spec = EntitySpec(Data::class.java, "data1") - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(from) - - verify(exactly = 1) { - froms[spec] - from.alias("data1") - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val from = mockk>() - - every { froms[any>()] } returns from - - // when - val spec = EntitySpec(Data::class.java) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(from) - - verify(exactly = 1) { - froms[spec] - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression with alias`() { - // given - val from = mockk>() - - every { froms[any>()] } returns from - every { from.alias("data1") } returns mockk() - - // when - val spec = EntitySpec(Data::class.java, "data1") - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(from) - - verify(exactly = 1) { - froms[spec] - from.alias("data1") - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val from = mockk>() - - every { froms[any>()] } returns from - - // when - val spec = EntitySpec(Data::class.java) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(from) - - verify(exactly = 1) { - froms[spec] - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression with alias`() { - // given - val from = mockk>() - - every { froms[any>()] } returns from - every { from.alias("data1") } returns mockk() - - // when - val spec = EntitySpec(Data::class.java, "data1") - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(from) - - verify(exactly = 1) { - froms[spec] - from.alias("data1") - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } - - private class Data -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpecTest.kt deleted file mode 100644 index 351985345..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpecTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class GreatestSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - val columnExpression = mockk>() - - val greatestExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.greatest(any>()) } returns greatestExpression - - // when - val spec = GreatestSpec(expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greatestExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.greatest(columnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val greatestExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.greatest(any>()) } returns greatestExpression - - // when - val spec = GreatestSpec(column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greatestExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.greatest(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val greatestExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.greatest(any>()) } returns greatestExpression - - // when - val spec = GreatestSpec(column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greatestExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.greatest(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpecTest.kt deleted file mode 100644 index 88836759c..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpecTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class LeastSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - val columnExpression = mockk>() - - val leastExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.least(any>()) } returns leastExpression - - // when - val spec = LeastSpec(expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(leastExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.least(columnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val leastExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.least(any>()) } returns leastExpression - - // when - val spec = LeastSpec(column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(leastExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.least(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val leastExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.least(any>()) } returns leastExpression - - // when - val spec = LeastSpec(column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(leastExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.least(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LiteralSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LiteralSpecTest.kt deleted file mode 100644 index 597f56a4f..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LiteralSpecTest.kt +++ /dev/null @@ -1,97 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class LiteralSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - - every { criteriaBuilder.literal(any()) } returns expression - - // when - val spec = LiteralSpec("TEST") - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(expression) - - verify(exactly = 1) { - criteriaBuilder.literal("TEST") - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val expression = mockk>() - - every { criteriaBuilder.literal(any()) } returns expression - - // when - val spec = LiteralSpec("TEST") - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(expression) - - verify(exactly = 1) { - criteriaBuilder.literal("TEST") - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val expression = mockk>() - - every { criteriaBuilder.literal(any()) } returns expression - - // when - val spec = LiteralSpec("TEST") - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(expression) - - verify(exactly = 1) { - criteriaBuilder.literal("TEST") - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpecTest.kt deleted file mode 100644 index 952be68eb..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpecTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class MaxSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - val columnExpression = mockk>() - - val maxExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.max(any>()) } returns maxExpression - - // when - val spec = MaxSpec(expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(maxExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.max(columnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val maxExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.max(any>()) } returns maxExpression - - // when - val spec = MaxSpec(column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(maxExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.max(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val maxExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.max(any>()) } returns maxExpression - - // when - val spec = MaxSpec(column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(maxExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.max(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpecTest.kt deleted file mode 100644 index 9be7f72fc..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpecTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class MinSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - val columnExpression = mockk>() - - val minExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.min(any>()) } returns minExpression - - // when - val spec = MinSpec(expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(minExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.min(columnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val minExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.min(any>()) } returns minExpression - - // when - val spec = MinSpec(column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(minExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.min(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val minExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.min(any>()) } returns minExpression - - // when - val spec = MinSpec(column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(minExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.min(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NestedColumnSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NestedColumnSpecTest.kt deleted file mode 100644 index 506ec3688..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NestedColumnSpecTest.kt +++ /dev/null @@ -1,132 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -class NestedColumnSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val from = mockk>() - val path = mockk>() - val nestedPath = mockk>() - - every { froms[any>()] } returns from - every { from.get(any()) } returns path - every { path.get(any()) } returns nestedPath - - // when - val spec = NestedColumnSpec( - ColumnSpec(EntitySpec(Data::class.java), "nestedData"), - "nestedId" - ) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(nestedPath) - - verify { - froms[EntitySpec(Data::class.java)] - from.get("nestedData") - path.get("nestedId") - } - - confirmVerified(from, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val from = mockk>() - val path = mockk>() - val nestedPath = mockk>() - - every { froms[any>()] } returns from - every { from.get(any()) } returns path - every { path.get(any()) } returns nestedPath - - // when - val spec = NestedColumnSpec( - ColumnSpec(EntitySpec(Data::class.java), "nestedData"), - "nestedId" - ) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(nestedPath) - - verify { - froms[EntitySpec(Data::class.java)] - from.get("nestedData") - path.get("nestedId") - } - - confirmVerified(from, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val from = mockk>() - val path = mockk>() - val nestedPath = mockk>() - - every { froms[any>()] } returns from - every { from.get(any()) } returns path - every { path.get(any()) } returns nestedPath - - // when - val spec = NestedColumnSpec( - ColumnSpec(EntitySpec(Data::class.java), "nestedData"), - "nestedId" - ) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(nestedPath) - - verify { - froms[EntitySpec(Data::class.java)] - from.get("nestedData") - path.get("nestedId") - } - - confirmVerified(from, froms, deleteQuery, criteriaBuilder) - } - - private class Data { - val nestedData = NestedData() - } - - private class NestedData { - val nestedId: Long = 0L - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NullLiteralSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NullLiteralSpecTest.kt deleted file mode 100644 index 7247ee998..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/NullLiteralSpecTest.kt +++ /dev/null @@ -1,67 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class NullLiteralSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - toCriteriaExpression { it.toCriteriaExpression(froms, query, criteriaBuilder) } - } - - @Test - fun `update toCriteriaExpression`() { - toCriteriaExpression { it.toCriteriaExpression(froms, updateQuery, criteriaBuilder) } - } - - @Test - fun `delete toCriteriaExpression`() { - toCriteriaExpression { it.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) } - } - - private fun toCriteriaExpression(predicate: (NullLiteralSpec) -> Expression) { - // given - val expression = mockk>() - - every { criteriaBuilder.nullLiteral(any()) } returns expression - - // when - val spec = NullLiteralSpec(String::class.java) - - val actual = predicate(spec) - - // then - assertThat(actual).isEqualTo(expression) - - verify(exactly = 1) { - criteriaBuilder.nullLiteral(String::class.java) - } - - confirmVerified(froms, query, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SubqueryExpressionSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SubqueryExpressionSpecTest.kt deleted file mode 100644 index 79fcd0fe6..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SubqueryExpressionSpecTest.kt +++ /dev/null @@ -1,130 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.SubquerySpec -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class SubqueryExpressionSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var abstractQuery: AbstractQuery<*> - - @MockK - private lateinit var criteriaQuery: CriteriaQuery<*> - - @MockK - private lateinit var criteriaDelete: CriteriaDelete<*> - - @MockK - private lateinit var criteriaUpdate: CriteriaUpdate<*> - - @MockK - private lateinit var subquery: Subquery<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @MockK - private lateinit var subqueryCreator: SubqueryCreator - - @Test - fun toCriteriaExpression() { - // given - val spec: SubquerySpec = mockk() - val createdSubquery: Subquery = mockk() - - every { subqueryCreator.createQuery(spec, froms, criteriaQuery, criteriaBuilder) } returns createdSubquery - - // when - val actual = SubqueryExpressionSpec(spec, subqueryCreator) - .toCriteriaExpression(froms, criteriaQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(createdSubquery) - - verify(exactly = 1) { - subqueryCreator.createQuery(spec, froms, criteriaQuery, criteriaBuilder) - } - - confirmVerified(froms, abstractQuery, criteriaQuery, subquery, criteriaBuilder, subqueryCreator) - } - - @Test - fun `toCriteriaExpression - by criteria update query`() { - // given - val spec: SubquerySpec = mockk() - val createdSubquery: Subquery = mockk() - - every { subqueryCreator.createQuery(spec, froms, criteriaUpdate, criteriaBuilder) } returns createdSubquery - - // when - val actual = SubqueryExpressionSpec(spec, subqueryCreator) - .toCriteriaExpression(froms, criteriaUpdate, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(createdSubquery) - - verify(exactly = 1) { - subqueryCreator.createQuery(spec, froms, criteriaUpdate, criteriaBuilder) - } - - confirmVerified(froms, abstractQuery, criteriaUpdate, subquery, criteriaBuilder, subqueryCreator) - } - - @Test - fun `toCriteriaExpression - by criteria delete query`() { - // given - val spec: SubquerySpec = mockk() - val createdSubquery: Subquery = mockk() - - every { subqueryCreator.createQuery(spec, froms, criteriaDelete, criteriaBuilder) } returns createdSubquery - - // when - val actual = SubqueryExpressionSpec(spec, subqueryCreator) - .toCriteriaExpression(froms, criteriaDelete, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(createdSubquery) - - verify(exactly = 1) { - subqueryCreator.createQuery(spec, froms, criteriaDelete, criteriaBuilder) - } - - confirmVerified(froms, abstractQuery, criteriaDelete, subquery, criteriaBuilder, subqueryCreator) - } - - @Test - fun `toCriteriaExpression - by subquery`() { - // given - val spec: SubquerySpec = mockk() - val createdSubquery: Subquery = mockk() - - every { subqueryCreator.createQuery(spec, froms, subquery, criteriaBuilder) } returns createdSubquery - - // when - val actual = SubqueryExpressionSpec(spec, subqueryCreator) - .toCriteriaExpression(froms, subquery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(createdSubquery) - - verify(exactly = 1) { - subqueryCreator.createQuery(spec, froms, subquery, criteriaBuilder) - } - - confirmVerified(froms, abstractQuery, criteriaQuery, subquery, criteriaBuilder, subqueryCreator) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpecTest.kt deleted file mode 100644 index 4547ab60e..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpecTest.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.expression - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class SumSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaExpression() { - // given - val expression = mockk>() - val columnExpression = mockk>() - - val sumExpression = mockk>() - - every { expression.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.sum(any>()) } returns sumExpression - - // when - val spec = SumSpec(expression) - - val actual = spec.toCriteriaExpression(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(sumExpression) - - verify(exactly = 1) { - expression.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.sum(columnExpression) - } - - confirmVerified(expression, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val sumExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.sum(any>()) } returns sumExpression - - // when - val spec = SumSpec(column) - - val actual = spec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(sumExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.sum(columnExpression) - } - - confirmVerified(column, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaExpression`() { - // given - val column = mockk>() - val columnExpression = mockk>() - - val sumExpression = mockk>() - - every { column.toCriteriaExpression(any(), any>(), any()) } returns columnExpression - every { criteriaBuilder.sum(any>()) } returns sumExpression - - // when - val spec = SumSpec(column) - - val actual = spec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(sumExpression) - - verify(exactly = 1) { - column.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.sum(columnExpression) - } - - confirmVerified(column, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/AndSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/AndSpecTest.kt deleted file mode 100644 index b9f7a5a57..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/AndSpecTest.kt +++ /dev/null @@ -1,198 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class AndSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - val predicateSpec3: PredicateSpec? = null - - val predicate1: Predicate = mockk() - val predicate2: Predicate = mockk() - val andPredicate: Predicate = mockk() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { criteriaBuilder.and(any(), any()) } returns andPredicate - - // when - val actual = AndSpec(listOf(predicateSpec1, predicateSpec2, predicateSpec3)) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, query, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, query, criteriaBuilder) - criteriaBuilder.and(predicate1, predicate2) - } - - confirmVerified(predicateSpec1, predicateSpec2, froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaPredicate - if predicate is empty then return conjunction`() { - // given - val predicateSpec1: PredicateSpec? = null - val predicateSpec2: PredicateSpec? = null - - val andPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns andPredicate - - // when - val actual = AndSpec(listOf(predicateSpec1, predicateSpec2)).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - val predicateSpec3: PredicateSpec? = null - - val predicate1: Predicate = mockk() - val predicate2: Predicate = mockk() - val andPredicate: Predicate = mockk() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { criteriaBuilder.and(any(), any()) } returns andPredicate - - // when - val actual = AndSpec(listOf(predicateSpec1, predicateSpec2, predicateSpec3)) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - criteriaBuilder.and(predicate1, predicate2) - } - - confirmVerified(predicateSpec1, predicateSpec2, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - if predicate is empty then return conjunction`() { - // given - val predicateSpec1: PredicateSpec? = null - val predicateSpec2: PredicateSpec? = null - - val andPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns andPredicate - - // when - val actual = - AndSpec(listOf(predicateSpec1, predicateSpec2)).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - val predicateSpec3: PredicateSpec? = null - - val predicate1: Predicate = mockk() - val predicate2: Predicate = mockk() - val andPredicate: Predicate = mockk() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { criteriaBuilder.and(any(), any()) } returns andPredicate - - // when - val actual = AndSpec(listOf(predicateSpec1, predicateSpec2, predicateSpec3)) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.and(predicate1, predicate2) - } - - confirmVerified(predicateSpec1, predicateSpec2, froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - if predicate is empty then return conjunction`() { - // given - val predicateSpec1: PredicateSpec? = null - val predicateSpec2: PredicateSpec? = null - - val andPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns andPredicate - - // when - val actual = - AndSpec(listOf(predicateSpec1, predicateSpec2)).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenExpressionSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenExpressionSpecTest.kt deleted file mode 100644 index eae0f38b5..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenExpressionSpecTest.kt +++ /dev/null @@ -1,203 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class BetweenExpressionSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec1: ExpressionSpec = mockk() - val rightExpressionSpec2: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression1: Expression = mockk() - val rightExpression2: Expression = mockk() - - val betweenPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec1.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression1 - every { - rightExpressionSpec2.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression2 - - every { criteriaBuilder.between(any(), any>(), any()) } returns betweenPredicate - - // when - val actual = BetweenExpressionSpec( - leftExpressionSpec, - rightExpressionSpec1, - rightExpressionSpec2 - ).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(betweenPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec1.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec2.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.between(leftExpression, rightExpression1, rightExpression2) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec1, - rightExpressionSpec2, - froms, query, criteriaBuilder - ) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec1: ExpressionSpec = mockk() - val rightExpressionSpec2: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression1: Expression = mockk() - val rightExpression2: Expression = mockk() - - val betweenPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec1.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression1 - every { - rightExpressionSpec2.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression2 - - every { criteriaBuilder.between(any(), any>(), any()) } returns betweenPredicate - - // when - val actual = BetweenExpressionSpec( - leftExpressionSpec, - rightExpressionSpec1, - rightExpressionSpec2 - ).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(betweenPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec1.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec2.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.between(leftExpression, rightExpression1, rightExpression2) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec1, - rightExpressionSpec2, - froms, updateQuery, criteriaBuilder - ) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec1: ExpressionSpec = mockk() - val rightExpressionSpec2: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression1: Expression = mockk() - val rightExpression2: Expression = mockk() - - val betweenPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec1.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression1 - every { - rightExpressionSpec2.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression2 - - every { criteriaBuilder.between(any(), any>(), any()) } returns betweenPredicate - - // when - val actual = BetweenExpressionSpec( - leftExpressionSpec, - rightExpressionSpec1, - rightExpressionSpec2 - ).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(betweenPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec1.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec2.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.between(leftExpression, rightExpression1, rightExpression2) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec1, - rightExpressionSpec2, - froms, deleteQuery, criteriaBuilder - ) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenValueSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenValueSpecTest.kt deleted file mode 100644 index 787b46049..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/BetweenValueSpecTest.kt +++ /dev/null @@ -1,125 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class BetweenValueSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right1 = 10 - val right2 = 20 - - val leftExpression: Expression = mockk() - - val betweenPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.between(any(), any(), any()) } returns betweenPredicate - - // when - val actual = BetweenValueSpec(leftExpressionSpec, right1, right2) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(betweenPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.between(leftExpression, right1, right2) - } - - confirmVerified(leftExpressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `updateQuery toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right1 = 10 - val right2 = 20 - - val leftExpression: Expression = mockk() - - val betweenPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.between(any(), any(), any()) } returns betweenPredicate - - // when - val actual = BetweenValueSpec(leftExpressionSpec, right1, right2) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(betweenPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.between(leftExpression, right1, right2) - } - - confirmVerified(leftExpressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right1 = 10 - val right2 = 20 - - val leftExpression: Expression = mockk() - - val betweenPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.between(any(), any(), any()) } returns betweenPredicate - - // when - val actual = BetweenValueSpec(leftExpressionSpec, right1, right2) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(betweenPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.between(leftExpression, right1, right2) - } - - confirmVerified(leftExpressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EmptyPredicateSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EmptyPredicateSpecTest.kt deleted file mode 100644 index fe3efa6bf..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EmptyPredicateSpecTest.kt +++ /dev/null @@ -1,65 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class EmptyPredicateSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - toCriteriaPredicate { EmptyPredicateSpec.toCriteriaPredicate(froms, query, criteriaBuilder) } - } - - @Test - fun `update toCriteriaPredicate`() { - toCriteriaPredicate { EmptyPredicateSpec.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) } - } - - @Test - fun `delete toCriteriaPredicate`() { - toCriteriaPredicate { EmptyPredicateSpec.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) } - } - - private fun toCriteriaPredicate(predicate: () -> Predicate) { - // given - val emptyPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns emptyPredicate - - // when - val actual = predicate() - - // then - assertThat(actual).isEqualTo(emptyPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, query, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualExpressionSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualExpressionSpecTest.kt deleted file mode 100644 index ef1012300..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualExpressionSpecTest.kt +++ /dev/null @@ -1,142 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class EqualExpressionSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val equalPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.equal(leftExpression, rightExpression) } returns equalPredicate - - // when - val actual = EqualExpressionSpec(leftExpressionSpec, rightExpressionSpec) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(equalPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.equal(leftExpression, rightExpression) - } - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val equalPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.equal(leftExpression, rightExpression) } returns equalPredicate - - // when - val actual = EqualExpressionSpec(leftExpressionSpec, rightExpressionSpec) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(equalPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.equal(leftExpression, rightExpression) - } - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val equalPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.equal(leftExpression, rightExpression) } returns equalPredicate - - // when - val actual = EqualExpressionSpec(leftExpressionSpec, rightExpressionSpec) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(equalPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.equal(leftExpression, rightExpression) - } - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualValueSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualValueSpecTest.kt deleted file mode 100644 index c86de420d..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/EqualValueSpecTest.kt +++ /dev/null @@ -1,116 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class EqualValueSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val equalPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) } returns leftExpression - - every { criteriaBuilder.equal(any(), any()) } returns equalPredicate - - // when - val actual = EqualValueSpec(leftExpressionSpec, right).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(equalPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.equal(leftExpression, right) - } - - confirmVerified(leftExpressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val equalPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) } returns leftExpression - - every { criteriaBuilder.equal(any(), any()) } returns equalPredicate - - // when - val actual = EqualValueSpec(leftExpressionSpec, right).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(equalPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.equal(leftExpression, right) - } - - confirmVerified(leftExpressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val equalPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) } returns leftExpression - - every { criteriaBuilder.equal(any(), any()) } returns equalPredicate - - // when - val actual = EqualValueSpec(leftExpressionSpec, right).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(equalPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.equal(leftExpression, right) - } - - confirmVerified(leftExpressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/ExistsSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/ExistsSpecTest.kt deleted file mode 100644 index dd44c5c32..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/ExistsSpecTest.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class ExistsSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val subqueryExpressionSpec: SubqueryExpressionSpec = mockk() - - val subquery: Subquery = mockk() - val existsPredicate: Predicate = mockk() - - every { subqueryExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns subquery - every { criteriaBuilder.exists(any>()) } returns existsPredicate - - // when - val actual = ExistsSpec(subqueryExpressionSpec) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(existsPredicate) - - verify(exactly = 1) { - subqueryExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.exists(subquery) - } - - confirmVerified(subqueryExpressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val subqueryExpressionSpec: SubqueryExpressionSpec = mockk() - - val subquery: Subquery = mockk() - val existsPredicate: Predicate = mockk() - - every { subqueryExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns subquery - every { criteriaBuilder.exists(any>()) } returns existsPredicate - - // when - val actual = ExistsSpec(subqueryExpressionSpec) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(existsPredicate) - - verify(exactly = 1) { - subqueryExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.exists(subquery) - } - - confirmVerified(subqueryExpressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val subqueryExpressionSpec: SubqueryExpressionSpec = mockk() - - val subquery: Subquery = mockk() - val existsPredicate: Predicate = mockk() - - every { subqueryExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns subquery - every { criteriaBuilder.exists(any>()) } returns existsPredicate - - // when - val actual = ExistsSpec(subqueryExpressionSpec) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(existsPredicate) - - verify(exactly = 1) { - subqueryExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.exists(subquery) - } - - confirmVerified(subqueryExpressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanExpressionSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanExpressionSpecTest.kt deleted file mode 100644 index bc4ba2c34..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanExpressionSpecTest.kt +++ /dev/null @@ -1,296 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class GreaterThanExpressionSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val greaterThanOrEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { - criteriaBuilder.greaterThanOrEqualTo(any(), any>()) - } returns greaterThanOrEqualToPredicate - - // when - val actual = GreaterThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, true) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanOrEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.greaterThanOrEqualTo(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, query, criteriaBuilder - ) - } - - @Test - fun `toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val greaterThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.greaterThan(any(), any>()) } returns greaterThanPredicate - - // when - val actual = GreaterThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, false) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.greaterThan(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, query, criteriaBuilder - ) - } - - @Test - fun `update toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val greaterThanOrEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { - criteriaBuilder.greaterThanOrEqualTo(any(), any>()) - } returns greaterThanOrEqualToPredicate - - // when - val actual = GreaterThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, true) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanOrEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.greaterThanOrEqualTo(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, updateQuery, criteriaBuilder - ) - } - - @Test - fun `update toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val greaterThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.greaterThan(any(), any>()) } returns greaterThanPredicate - - // when - val actual = GreaterThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, false) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.greaterThan(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, updateQuery, criteriaBuilder - ) - } - - @Test - fun `delete toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val greaterThanOrEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { - criteriaBuilder.greaterThanOrEqualTo(any(), any>()) - } returns greaterThanOrEqualToPredicate - - // when - val actual = GreaterThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, true) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanOrEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.greaterThanOrEqualTo(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, deleteQuery, criteriaBuilder - ) - } - - @Test - fun `delete toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val greaterThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.greaterThan(any(), any>()) } returns greaterThanPredicate - - // when - val actual = GreaterThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, false) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.greaterThan(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, deleteQuery, criteriaBuilder - ) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanValueSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanValueSpecTest.kt deleted file mode 100644 index b014cd907..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/GreaterThanValueSpecTest.kt +++ /dev/null @@ -1,206 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class GreaterThanValueSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val greaterThanEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.greaterThanOrEqualTo(any(), any()) } returns greaterThanEqualToPredicate - - // when - val actual = GreaterThanValueSpec(leftExpressionSpec, right, true) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.greaterThanOrEqualTo(leftExpression, right) - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val greaterThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.greaterThan(any(), any()) } returns greaterThanPredicate - - // when - val actual = GreaterThanValueSpec(leftExpressionSpec, right, false) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.greaterThan(leftExpression, right) - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val greaterThanEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.greaterThanOrEqualTo(any(), any()) } returns greaterThanEqualToPredicate - - // when - val actual = GreaterThanValueSpec(leftExpressionSpec, right, true) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.greaterThanOrEqualTo(leftExpression, right) - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val greaterThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.greaterThan(any(), any()) } returns greaterThanPredicate - - // when - val actual = GreaterThanValueSpec(leftExpressionSpec, right, false) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.greaterThan(leftExpression, right) - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val greaterThanEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.greaterThanOrEqualTo(any(), any()) } returns greaterThanEqualToPredicate - - // when - val actual = GreaterThanValueSpec(leftExpressionSpec, right, true) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.greaterThanOrEqualTo(leftExpression, right) - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val greaterThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.greaterThan(any(), any()) } returns greaterThanPredicate - - // when - val actual = GreaterThanValueSpec(leftExpressionSpec, right, false) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(greaterThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.greaterThan(leftExpression, right) - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InExpressionSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InExpressionSpecTest.kt deleted file mode 100644 index 894871f80..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InExpressionSpecTest.kt +++ /dev/null @@ -1,278 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class InExpressionSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec1: ExpressionSpec = mockk() - val rightExpressionSpec2: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression1: Expression = mockk() - val rightExpression2: Expression = mockk() - - val `in`: CriteriaBuilder.In = mockk() - - every { criteriaBuilder.`in`(any>()) } returns `in` - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec1.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression1 - every { - rightExpressionSpec2.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression2 - - every { `in`.value(rightExpression1) } returns `in` - every { `in`.value(rightExpression2) } returns `in` - - // when - val actual = InExpressionSpec( - leftExpressionSpec, - listOf(rightExpressionSpec1, rightExpressionSpec2) - ).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(`in`) - - verify(exactly = 1) { - criteriaBuilder.`in`(leftExpression) - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec1.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec2.toCriteriaExpression(froms, query, criteriaBuilder) - - `in`.value(rightExpression1) - `in`.value(rightExpression2) - } - - confirmVerified( - leftExpressionSpec, rightExpressionSpec1, rightExpressionSpec2, - froms, query, criteriaBuilder, - ) - } - - @Test - fun `toCriteriaPredicate - empty rights`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - - val emptyPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns emptyPredicate - - // when - val actual = InExpressionSpec( - leftExpressionSpec, emptyList() - ).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(emptyPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(leftExpressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec1: ExpressionSpec = mockk() - val rightExpressionSpec2: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression1: Expression = mockk() - val rightExpression2: Expression = mockk() - - val `in`: CriteriaBuilder.In = mockk() - - every { criteriaBuilder.`in`(any>()) } returns `in` - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec1.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression1 - every { - rightExpressionSpec2.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression2 - - every { `in`.value(rightExpression1) } returns `in` - every { `in`.value(rightExpression2) } returns `in` - - // when - val actual = InExpressionSpec( - leftExpressionSpec, - listOf(rightExpressionSpec1, rightExpressionSpec2) - ).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(`in`) - - verify(exactly = 1) { - criteriaBuilder.`in`(leftExpression) - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec1.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec2.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - `in`.value(rightExpression1) - `in`.value(rightExpression2) - } - - confirmVerified( - leftExpressionSpec, rightExpressionSpec1, rightExpressionSpec2, - froms, updateQuery, criteriaBuilder, - ) - } - - @Test - fun `update toCriteriaPredicate - empty rights`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - - val emptyPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns emptyPredicate - - // when - val actual = InExpressionSpec( - leftExpressionSpec, emptyList() - ).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(emptyPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(leftExpressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec1: ExpressionSpec = mockk() - val rightExpressionSpec2: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression1: Expression = mockk() - val rightExpression2: Expression = mockk() - - val `in`: CriteriaBuilder.In = mockk() - - every { criteriaBuilder.`in`(any>()) } returns `in` - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec1.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression1 - every { - rightExpressionSpec2.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression2 - - every { `in`.value(rightExpression1) } returns `in` - every { `in`.value(rightExpression2) } returns `in` - - // when - val actual = InExpressionSpec( - leftExpressionSpec, - listOf(rightExpressionSpec1, rightExpressionSpec2) - ).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(`in`) - - verify(exactly = 1) { - criteriaBuilder.`in`(leftExpression) - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec1.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec2.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - `in`.value(rightExpression1) - `in`.value(rightExpression2) - } - - confirmVerified( - leftExpressionSpec, rightExpressionSpec1, rightExpressionSpec2, - froms, deleteQuery, criteriaBuilder, - ) - } - - @Test - fun `delete toCriteriaPredicate - empty rights`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - - val emptyPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns emptyPredicate - - // when - val actual = InExpressionSpec( - leftExpressionSpec, emptyList() - ).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(emptyPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(leftExpressionSpec, froms, deleteQuery, criteriaBuilder) - } -} 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 deleted file mode 100644 index 0bfb9c3a6..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/InValueSpecTest.kt +++ /dev/null @@ -1,203 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class InValueSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right1 = 10 - val right2 = 20 - - val leftExpression: Expression = mockk() - - val `in`: CriteriaBuilder.In = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.`in`(any>()) } returns `in` - every { `in`.value(right1) } returns `in` - every { `in`.value(right2) } returns `in` - - // when - val actual = InValueSpec(leftExpressionSpec, listOf(right1, right2)) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(`in`) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.`in`(leftExpression) - `in`(right1) - `in`(right2) - } - - confirmVerified(leftExpressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaPredicate - empty rights`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - - val falsePredicate: Predicate = mockk() - - every { criteriaBuilder.disjunction() } returns falsePredicate - - // when - val actual = InValueSpec(leftExpressionSpec, emptyList()) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(falsePredicate) - - verify(exactly = 1) { - criteriaBuilder.disjunction() - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right1 = 10 - val right2 = 20 - - val leftExpression: Expression = mockk() - - val `in`: CriteriaBuilder.In = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.`in`(any>()) } returns `in` - every { `in`.value(right1) } returns `in` - every { `in`.value(right2) } returns `in` - - // when - val actual = InValueSpec(leftExpressionSpec, listOf(right1, right2)) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(`in`) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.`in`(leftExpression) - `in`(right1) - `in`(right2) - } - - confirmVerified(leftExpressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - empty rights`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - - val falsePredicate: Predicate = mockk() - - every { criteriaBuilder.disjunction() } returns falsePredicate - - // when - val actual = InValueSpec(leftExpressionSpec, emptyList()) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(falsePredicate) - - verify(exactly = 1) { - criteriaBuilder.disjunction() - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right1 = 10 - val right2 = 20 - - val leftExpression: Expression = mockk() - - val `in`: CriteriaBuilder.In = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.`in`(any>()) } returns `in` - every { `in`.value(right1) } returns `in` - every { `in`.value(right2) } returns `in` - - // when - val actual = InValueSpec(leftExpressionSpec, listOf(right1, right2)) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(`in`) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.`in`(leftExpression) - `in`(right1) - `in`(right2) - } - - confirmVerified(leftExpressionSpec, froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - empty rights`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - - val falsePredicate: Predicate = mockk() - - every { criteriaBuilder.disjunction() } returns falsePredicate - - // when - val actual = InValueSpec(leftExpressionSpec, emptyList()) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(falsePredicate) - - verify(exactly = 1) { - criteriaBuilder.disjunction() - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsFalseSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsFalseSpecTest.kt deleted file mode 100644 index 89602a075..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsFalseSpecTest.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class IsFalseSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isFalsePredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) } returns expression - every { criteriaBuilder.isFalse(expression) } returns isFalsePredicate - - // when - val actual = IsFalseSpec(expressionSpec).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isFalsePredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.isFalse(expression) - } - - confirmVerified(expressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isFalsePredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.isFalse(expression) } returns isFalsePredicate - - // when - val actual = IsFalseSpec(expressionSpec).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isFalsePredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.isFalse(expression) - } - - confirmVerified(expressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isFalsePredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.isFalse(expression) } returns isFalsePredicate - - // when - val actual = IsFalseSpec(expressionSpec).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isFalsePredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.isFalse(expression) - } - - confirmVerified(expressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsNullSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsNullSpecTest.kt deleted file mode 100644 index 5a5e7293e..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsNullSpecTest.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class IsNullSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isNullPredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) } returns expression - every { criteriaBuilder.isNull(expression) } returns isNullPredicate - - // when - val actual = IsNullSpec(expressionSpec).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isNullPredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.isNull(expression) - } - - confirmVerified(expressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isNullPredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.isNull(expression) } returns isNullPredicate - - // when - val actual = IsNullSpec(expressionSpec).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isNullPredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.isNull(expression) - } - - confirmVerified(expressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isNullPredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.isNull(expression) } returns isNullPredicate - - // when - val actual = IsNullSpec(expressionSpec).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isNullPredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.isNull(expression) - } - - confirmVerified(expressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsTrueSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsTrueSpecTest.kt deleted file mode 100644 index eb5291065..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/IsTrueSpecTest.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class IsTrueSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isTruePredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) } returns expression - every { criteriaBuilder.isTrue(expression) } returns isTruePredicate - - // when - val actual = IsTrueSpec(expressionSpec).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isTruePredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.isTrue(expression) - } - - confirmVerified(expressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isTruePredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.isTrue(expression) } returns isTruePredicate - - // when - val actual = IsTrueSpec(expressionSpec).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isTruePredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.isTrue(expression) - } - - confirmVerified(expressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val expressionSpec: ExpressionSpec = mockk() - - val expression: Expression = mockk() - - val isTruePredicate: Predicate = mockk() - - every { expressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) } returns expression - every { criteriaBuilder.isTrue(expression) } returns isTruePredicate - - // when - val actual = IsTrueSpec(expressionSpec).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(isTruePredicate) - - verify(exactly = 1) { - expressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.isTrue(expression) - } - - confirmVerified(expressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanExpressionSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanExpressionSpecTest.kt deleted file mode 100644 index ef5bcc179..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanExpressionSpecTest.kt +++ /dev/null @@ -1,296 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class LessThanExpressionSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val lessThanOrEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { - criteriaBuilder.lessThanOrEqualTo(any(), any>()) - } returns lessThanOrEqualToPredicate - - // when - val actual = LessThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, true) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanOrEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.lessThanOrEqualTo(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, query, criteriaBuilder - ) - } - - @Test - fun `toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val lessThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.lessThan(any(), any>()) } returns lessThanPredicate - - // when - val actual = LessThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, false) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - - criteriaBuilder.lessThan(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, query, criteriaBuilder - ) - } - - @Test - fun `update toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val lessThanOrEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { - criteriaBuilder.lessThanOrEqualTo(any(), any>()) - } returns lessThanOrEqualToPredicate - - // when - val actual = LessThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, true) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanOrEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.lessThanOrEqualTo(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, updateQuery, criteriaBuilder - ) - } - - @Test - fun `update toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val lessThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.lessThan(any(), any>()) } returns lessThanPredicate - - // when - val actual = LessThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, false) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - - criteriaBuilder.lessThan(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, updateQuery, criteriaBuilder - ) - } - - @Test - fun `delete toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val lessThanOrEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { - criteriaBuilder.lessThanOrEqualTo(any(), any>()) - } returns lessThanOrEqualToPredicate - - // when - val actual = LessThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, true) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanOrEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.lessThanOrEqualTo(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, deleteQuery, criteriaBuilder - ) - } - - @Test - fun `delete toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val rightExpressionSpec: ExpressionSpec = mockk() - - val leftExpression: Expression = mockk() - val rightExpression: Expression = mockk() - - val lessThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - every { - rightExpressionSpec.toCriteriaExpression( - any(), - any>(), - any() - ) - } returns rightExpression - - every { criteriaBuilder.lessThan(any(), any>()) } returns lessThanPredicate - - // when - val actual = LessThanExpressionSpec(leftExpressionSpec, rightExpressionSpec, false) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - rightExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - - criteriaBuilder.lessThan(leftExpression, rightExpression) - } - - confirmVerified( - leftExpressionSpec, - rightExpressionSpec, - froms, deleteQuery, criteriaBuilder - ) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanValueSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanValueSpecTest.kt deleted file mode 100644 index 820b815d2..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LessThanValueSpecTest.kt +++ /dev/null @@ -1,206 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class LessThanValueSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun `toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val lessThanEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.lessThanOrEqualTo(any(), any()) } returns lessThanEqualToPredicate - - // when - val actual = LessThanValueSpec(leftExpressionSpec, right, true) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.lessThanOrEqualTo(leftExpression, right) - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val lessThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.lessThan(any(), any()) } returns lessThanPredicate - - // when - val actual = LessThanValueSpec(leftExpressionSpec, right, false) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.lessThan(leftExpression, right) - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val lessThanEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.lessThanOrEqualTo(any(), any()) } returns lessThanEqualToPredicate - - // when - val actual = LessThanValueSpec(leftExpressionSpec, right, true) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.lessThanOrEqualTo(leftExpression, right) - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val lessThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.lessThan(any(), any()) } returns lessThanPredicate - - // when - val actual = LessThanValueSpec(leftExpressionSpec, right, false) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.lessThan(leftExpression, right) - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val lessThanEqualToPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.lessThanOrEqualTo(any(), any()) } returns lessThanEqualToPredicate - - // when - val actual = LessThanValueSpec(leftExpressionSpec, right, true) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanEqualToPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.lessThanOrEqualTo(leftExpression, right) - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - not inclusive`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = 10 - - val leftExpression: Expression = mockk() - - val lessThanPredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(any(), any>(), any()) } returns leftExpression - - every { criteriaBuilder.lessThan(any(), any()) } returns lessThanPredicate - - // when - val actual = LessThanValueSpec(leftExpressionSpec, right, false) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(lessThanPredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.lessThan(leftExpression, right) - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LikeSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LikeSpecTest.kt deleted file mode 100644 index c75f90e93..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/LikeSpecTest.kt +++ /dev/null @@ -1,113 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class LikeSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = "%test%" - - val likeExpression: Expression = mockk() - - val likePredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) } returns likeExpression - every { criteriaBuilder.like(likeExpression, right) } returns likePredicate - - // when - val actual = LikeSpec(leftExpressionSpec, right).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(likePredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, query, criteriaBuilder) - criteriaBuilder.like(likeExpression, right) - } - - confirmVerified(leftExpressionSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = "%test%" - - val likeExpression: Expression = mockk() - - val likePredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) } returns likeExpression - every { criteriaBuilder.like(likeExpression, right) } returns likePredicate - - // when - val actual = LikeSpec(leftExpressionSpec, right).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(likePredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, updateQuery, criteriaBuilder) - criteriaBuilder.like(likeExpression, right) - } - - confirmVerified(leftExpressionSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val leftExpressionSpec: ExpressionSpec = mockk() - val right = "%test%" - - val likeExpression: Expression = mockk() - - val likePredicate: Predicate = mockk() - - every { leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) } returns likeExpression - every { criteriaBuilder.like(likeExpression, right) } returns likePredicate - - // when - val actual = LikeSpec(leftExpressionSpec, right).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(likePredicate) - - verify(exactly = 1) { - leftExpressionSpec.toCriteriaExpression(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.like(likeExpression, right) - } - - confirmVerified(leftExpressionSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/NotSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/NotSpecTest.kt deleted file mode 100644 index a1715da50..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/NotSpecTest.kt +++ /dev/null @@ -1,106 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class NotSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - val notPredicate: Predicate = mockk() - - every { predicateSpec.toCriteriaPredicate(froms, query, criteriaBuilder) } returns predicate - every { criteriaBuilder.not(predicate) } returns notPredicate - - // when - val actual = NotSpec(predicateSpec).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(notPredicate) - - verify(exactly = 1) { - predicateSpec.toCriteriaPredicate(froms, query, criteriaBuilder) - criteriaBuilder.not(predicate) - } - - confirmVerified(predicateSpec, froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - val notPredicate: Predicate = mockk() - - every { predicateSpec.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) } returns predicate - every { criteriaBuilder.not(predicate) } returns notPredicate - - // when - val actual = NotSpec(predicateSpec).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(notPredicate) - - verify(exactly = 1) { - predicateSpec.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - criteriaBuilder.not(predicate) - } - - confirmVerified(predicateSpec, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val predicateSpec: PredicateSpec = mockk() - val predicate: Predicate = mockk() - - val notPredicate: Predicate = mockk() - - every { predicateSpec.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) } returns predicate - every { criteriaBuilder.not(predicate) } returns notPredicate - - // when - val actual = NotSpec(predicateSpec).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(notPredicate) - - verify(exactly = 1) { - predicateSpec.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.not(predicate) - } - - confirmVerified(predicateSpec, froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/OrSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/OrSpecTest.kt deleted file mode 100644 index 2a7916c61..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/OrSpecTest.kt +++ /dev/null @@ -1,198 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.* - -@ExtendWith(MockKExtension::class) -internal class OrSpecTest : WithKotlinJdslAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: AbstractQuery<*> - - @MockK - private lateinit var updateQuery: CriteriaUpdate<*> - - @MockK - private lateinit var deleteQuery: CriteriaDelete<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun toCriteriaPredicate() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - val predicateSpec3: PredicateSpec? = null - - val predicate1: Predicate = mockk() - val predicate2: Predicate = mockk() - val orPredicate: Predicate = mockk() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { criteriaBuilder.or(any(), any()) } returns orPredicate - - // when - val actual = OrSpec(listOf(predicateSpec1, predicateSpec2, predicateSpec3)) - .toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(orPredicate) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, query, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, query, criteriaBuilder) - criteriaBuilder.or(predicate1, predicate2) - } - - confirmVerified(predicateSpec1, predicateSpec2, froms, query, criteriaBuilder) - } - - @Test - fun `toCriteriaPredicate - if predicate is empty then return conjunction`() { - // given - val predicateSpec1: PredicateSpec? = null - val predicateSpec2: PredicateSpec? = null - - val andPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns andPredicate - - // when - val actual = OrSpec(listOf(predicateSpec1, predicateSpec2)).toCriteriaPredicate(froms, query, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, query, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate`() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - val predicateSpec3: PredicateSpec? = null - - val predicate1: Predicate = mockk() - val predicate2: Predicate = mockk() - val orPredicate: Predicate = mockk() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { criteriaBuilder.or(any(), any()) } returns orPredicate - - // when - val actual = OrSpec(listOf(predicateSpec1, predicateSpec2, predicateSpec3)) - .toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(orPredicate) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - criteriaBuilder.or(predicate1, predicate2) - } - - confirmVerified(predicateSpec1, predicateSpec2, froms, updateQuery, criteriaBuilder) - } - - @Test - fun `update toCriteriaPredicate - if predicate is empty then return conjunction`() { - // given - val predicateSpec1: PredicateSpec? = null - val predicateSpec2: PredicateSpec? = null - - val andPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns andPredicate - - // when - val actual = - OrSpec(listOf(predicateSpec1, predicateSpec2)).toCriteriaPredicate(froms, updateQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, updateQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate`() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - val predicateSpec3: PredicateSpec? = null - - val predicate1: Predicate = mockk() - val predicate2: Predicate = mockk() - val orPredicate: Predicate = mockk() - - every { predicateSpec1.toCriteriaPredicate(any(), any>(), any()) } returns predicate1 - every { predicateSpec2.toCriteriaPredicate(any(), any>(), any()) } returns predicate2 - - every { criteriaBuilder.or(any(), any()) } returns orPredicate - - // when - val actual = OrSpec(listOf(predicateSpec1, predicateSpec2, predicateSpec3)) - .toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(orPredicate) - - verify(exactly = 1) { - predicateSpec1.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - predicateSpec2.toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - criteriaBuilder.or(predicate1, predicate2) - } - - confirmVerified(predicateSpec1, predicateSpec2, froms, deleteQuery, criteriaBuilder) - } - - @Test - fun `delete toCriteriaPredicate - if predicate is empty then return conjunction`() { - // given - val predicateSpec1: PredicateSpec? = null - val predicateSpec2: PredicateSpec? = null - - val andPredicate: Predicate = mockk() - - every { criteriaBuilder.conjunction() } returns andPredicate - - // when - val actual = - OrSpec(listOf(predicateSpec1, predicateSpec2)).toCriteriaPredicate(froms, deleteQuery, criteriaBuilder) - - // then - assertThat(actual).isEqualTo(andPredicate) - - verify(exactly = 1) { - criteriaBuilder.conjunction() - } - - confirmVerified(froms, deleteQuery, criteriaBuilder) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/PredicateSpecTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/PredicateSpecTest.kt deleted file mode 100644 index 1f8baed91..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/query/spec/predicate/PredicateSpecTest.kt +++ /dev/null @@ -1,80 +0,0 @@ -package com.linecorp.kotlinjdsl.query.spec.predicate - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import javax.persistence.criteria.* - -internal class PredicateSpecTest : WithKotlinJdslAssertions { - private val predicateSpec1: PredicateSpec = object : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - } - - private val predicateSpec2: PredicateSpec = object : PredicateSpec { - override fun toCriteriaPredicate( - froms: Froms, - query: AbstractQuery<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaUpdate<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - - override fun toCriteriaPredicate( - froms: Froms, - query: CriteriaDelete<*>, - criteriaBuilder: CriteriaBuilder - ): Predicate { - return criteriaBuilder.conjunction() - } - } - - @Test - fun isEmpty() { - assertThat(PredicateSpec.empty.isEmpty()).isTrue - } - - @Test - fun reverse() { - assertThat(predicateSpec1.reverse()).isEqualTo(NotSpec(predicateSpec1)) - } - - @Test - fun and() { - assertThat(predicateSpec1 and predicateSpec2).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun or() { - assertThat(predicateSpec1 or predicateSpec2).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDslExtensionsTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDslExtensionsTest.kt deleted file mode 100644 index d6ebfd9fc..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDslExtensionsTest.kt +++ /dev/null @@ -1,411 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.* -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MockKExtension::class) -internal class ExpressionDslExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var dsl: ExpressionDsl - - @Test - fun col() { - // given - val columnSpec: ColumnSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::id) } returns columnSpec - } - - // when - val actual = with(dsl) { col(Data1::id) } - - // then - assertThat(actual).isEqualTo(columnSpec) - - verify(exactly = 1) { - with(dsl) { column(EntitySpec(Data1::class.java), Data1::id) } - } - - confirmVerified(dsl) - } - - @Test - fun column() { - // given - val columnSpec: ColumnSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::id) } returns columnSpec - } - - // when - val actual = with(dsl) { column(Data1::id) } - - // then - assertThat(actual).isEqualTo(columnSpec) - - verify(exactly = 1) { - with(dsl) { column(EntitySpec(Data1::class.java), Data1::id) } - } - - confirmVerified(dsl) - } - - @Test - fun nullLiteral() { - // given - val nullLiteral: NullLiteralSpec = mockk() - - with(dsl) { - every { nullLiteral(String::class.java) } returns nullLiteral - } - - // when - val actual = with(dsl) { nullLiteral() } - - // then - assertThat(actual).isEqualTo(nullLiteral) - - verify(exactly = 1) { - with(dsl) { nullLiteral(String::class.java) } - } - - confirmVerified(dsl) - } - - @Test - fun max() { - // given - val columnSpec: ColumnSpec = mockk() - val maxSpec: MaxSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { max(columnSpec) } returns maxSpec - } - - // when - val actual = with(dsl) { max(Data1::price) } - - // then - assertThat(actual).isEqualTo(maxSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - max(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun min() { - // given - val columnSpec: ColumnSpec = mockk() - val minSpec: MinSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { min(columnSpec) } returns minSpec - } - - // when - val actual = with(dsl) { min(Data1::price) } - - // then - assertThat(actual).isEqualTo(minSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - min(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun avg() { - // given - val columnSpec: ColumnSpec = mockk() - val avgSpec: AvgSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { avg(columnSpec) } returns avgSpec - } - - // when - val actual = with(dsl) { avg(Data1::price) } - - // then - assertThat(actual).isEqualTo(avgSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - avg(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun sum() { - // given - val columnSpec: ColumnSpec = mockk() - val sumSpec: SumSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { sum(columnSpec) } returns sumSpec - } - - // when - val actual = with(dsl) { sum(Data1::price) } - - // then - assertThat(actual).isEqualTo(sumSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - sum(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun count() { - // given - val columnSpec: ColumnSpec = mockk() - val countSpec: CountSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { count(true, columnSpec) } returns countSpec - } - - // when - val actual = with(dsl) { count(distinct = true, Data1::price) } - - // then - assertThat(actual).isEqualTo(countSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - count(true, columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun countNonDistinct() { - // given - val columnSpec: ColumnSpec = mockk() - val countSpec: CountSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { count(columnSpec) } returns countSpec - } - - // when - val actual = with(dsl) { count(Data1::price) } - - // then - assertThat(actual).isEqualTo(countSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - count(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun countDistinct() { - // given - val columnSpec: ColumnSpec = mockk() - val countSpec: CountSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { countDistinct(columnSpec) } returns countSpec - } - - // when - val actual = with(dsl) { countDistinct(Data1::price) } - - // then - assertThat(actual).isEqualTo(countSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - countDistinct(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun greatest() { - // given - val columnSpec: ColumnSpec = mockk() - val greatestSpec: GreatestSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { greatest(columnSpec) } returns greatestSpec - } - - // when - val actual = with(dsl) { greatest(Data1::price) } - - // then - assertThat(actual).isEqualTo(greatestSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - greatest(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun least() { - // given - val columnSpec: ColumnSpec = mockk() - val leastSpec: LeastSpec = mockk() - - with(dsl) { - every { column(EntitySpec(Data1::class.java), Data1::price) } returns columnSpec - every { least(columnSpec) } returns leastSpec - } - - // when - val actual = with(dsl) { least(Data1::price) } - - // then - assertThat(actual).isEqualTo(leastSpec) - - verify(exactly = 1) { - with(dsl) { - column(EntitySpec(Data1::class.java), Data1::price) - least(columnSpec) - } - } - - confirmVerified(dsl) - } - - @Test - fun functionVarArg() { - // given - val columnSpec: ColumnSpec = mockk() - val literal1: LiteralSpec = mockk() - val literal2: LiteralSpec = mockk() - val functionSpec: FunctionSpec = mockk() - val entitySpec = EntitySpec(Data1::class.java) - - with(dsl) { - every { literal(1) } returns literal1 - every { literal(2) } returns literal2 - every { column(entitySpec, Data1::id) } returns columnSpec - every { function("substring", listOf(columnSpec, literal1, literal2)) } returns functionSpec - } - - // when - val actual = with(dsl) { function("substring", column(entitySpec, Data1::id), literal(1), literal(2)) } - - // then - assertThat(actual).isEqualTo(functionSpec) - - verify(exactly = 1) { - with(dsl) { - literal(1) - literal(2) - column(entitySpec, Data1::id) - function("substring", listOf(columnSpec, literal1, literal2)) - } - } - - confirmVerified(dsl) - } - - @Test - fun functionList() { - // given - val columnSpec: ColumnSpec = mockk() - val literal1: LiteralSpec = mockk() - val literal2: LiteralSpec = mockk() - val functionSpec: FunctionSpec = mockk() - val entitySpec = EntitySpec(Data1::class.java) - - with(dsl) { - every { literal(1) } returns literal1 - every { literal(2) } returns literal2 - every { column(entitySpec, Data1::id) } returns columnSpec - every { - function( - "substring", - String::class.java, - listOf(columnSpec, literal1, literal2) - ) - } returns functionSpec - } - - // when - val actual = - with(dsl) { function("substring", listOf(column(entitySpec, Data1::id), literal(1), literal(2))) } - - // then - assertThat(actual).isEqualTo(functionSpec) - - verify(exactly = 1) { - with(dsl) { - literal(1) - literal(2) - column(entitySpec, Data1::id) - function( - "substring", - String::class.java, - listOf(columnSpec, literal1, literal2) - ) - } - } - - confirmVerified(dsl) - } - - class Data1 { - val id: String = "10" - val price: Int = 100 - } -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/AssociateDslExtensionsTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/AssociateDslExtensionsTest.kt deleted file mode 100644 index 932a1ce77..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/AssociateDslExtensionsTest.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.justRun -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.JoinType - -@ExtendWith(MockKExtension::class) -internal class AssociateDslExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var dsl: AssociateDsl - - @Test - fun associate() { - // given - with(dsl) { - justRun { associate(Data1::class, Data2::class, Relation("data2"), JoinType.LEFT) } - justRun { associate(Data1::class, Data2::class, Relation("data2List"), JoinType.RIGHT) } - } - - // when - with(dsl) { - associate(Data1::data2, JoinType.LEFT) - associate(Data1::data2List, JoinType.RIGHT) - } - - // then - verify(exactly = 1) { - with(dsl) { - associate(Data1::class, Data2::class, Relation("data2"), JoinType.LEFT) - associate(Data1::class, Data2::class, Relation("data2List"), JoinType.RIGHT) - } - } - - confirmVerified(dsl) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FetchDslExtensionsTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FetchDslExtensionsTest.kt deleted file mode 100644 index d19fff55d..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/FetchDslExtensionsTest.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.justRun -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.JoinType - -@ExtendWith(MockKExtension::class) -internal class FetchDslExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var dsl: FetchDsl - - @Test - fun fetch() { - // given - with(dsl) { - justRun { fetch(Data1::class, Data2::class, Relation("data2"), JoinType.LEFT) } - justRun { fetch(Data1::class, Data2::class, Relation("data2List"), JoinType.RIGHT) } - } - - // when - with(dsl) { - fetch(Data1::data2, JoinType.LEFT) - fetch(Data1::data2List, JoinType.RIGHT) - } - - // then - verify(exactly = 1) { - with(dsl) { - fetch(Data1::class, Data2::class, Relation("data2"), JoinType.LEFT) - fetch(Data1::class, Data2::class, Relation("data2List"), JoinType.RIGHT) - } - } - - confirmVerified(dsl) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} \ No newline at end of file diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/JoinDslExtensionsTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/JoinDslExtensionsTest.kt deleted file mode 100644 index 8d03cb3c5..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/JoinDslExtensionsTest.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.justRun -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.criteria.JoinType - -@ExtendWith(MockKExtension::class) -internal class JoinDslExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var dsl: JoinDsl - - @Test - fun join() { - // given - with(dsl) { - justRun { join(Data1::class, Data2::class, Relation("data2"), JoinType.LEFT) } - justRun { join(Data1::class, Data2::class, Relation("data2List"), JoinType.RIGHT) } - } - - // when - with(dsl) { - join(Data1::data2, JoinType.LEFT) - join(Data1::data2List, JoinType.RIGHT) - } - - // then - verify(exactly = 1) { - with(dsl) { - join(Data1::class, Data2::class, Relation("data2"), JoinType.LEFT) - join(Data1::class, Data2::class, Relation("data2List"), JoinType.RIGHT) - } - } - - confirmVerified(dsl) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} diff --git a/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/set/SetParameterDslExtensionsTest.kt b/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/set/SetParameterDslExtensionsTest.kt deleted file mode 100644 index 996aa4c37..000000000 --- a/query/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/set/SetParameterDslExtensionsTest.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.set - -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MockKExtension::class) -internal class SetParameterDslExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var dsl: SetParameterDsl - - @Test - fun `setParams vararg`() { - // given - val columnSpec: ColumnSpec = mockk() - - with(dsl) { - every { setParams(columnSpec to null) } just runs - } - - // when - with(dsl) { setParams(columnSpec to null) } - - // then - verify(exactly = 1) { - with(dsl) { setParams(columnSpec to null) } - } - - confirmVerified(dsl) - } - - @Test - fun setParams() { - // given - val columnSpec: ColumnSpec = mockk() - - with(dsl) { - every { setParams(mapOf(columnSpec to null)) } just runs - } - - // when - with(dsl) { setParams(mapOf(columnSpec to null)) } - - // then - verify(exactly = 1) { - with(dsl) { setParams(mapOf(columnSpec to null)) } - } - - confirmVerified(dsl) - } - - @Test - fun set() { - // given - val columnSpec: ColumnSpec = mockk() - - with(dsl) { - every { set(columnSpec, null) } just runs - } - - // when - with(dsl) { set(columnSpec, null) } - - // then - verify(exactly = 1) { - with(dsl) { set(columnSpec, null) } - } - - confirmVerified(dsl) - } - -} diff --git a/reactive-core-jakarta/build.gradle.kts b/reactive-core-jakarta/build.gradle.kts deleted file mode 100644 index ff43b15fa..000000000 --- a/reactive-core-jakarta/build.gradle.kts +++ /dev/null @@ -1,18 +0,0 @@ -apply() - -coverage { - exclude(project) -} - -dependencies { - api(Modules.queryJakarta) - - compileOnly(libs.jakarta.persistence.api) - compileOnly(libs.slf4j) - - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntityJakarta) - testImplementation(libs.jakarta.persistence.api) - testImplementation(libs.h2) - testImplementation(libs.coroutine.jdk8) -} diff --git a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactory.kt b/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactory.kt deleted file mode 100644 index 69cd75e65..000000000 --- a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactory.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import kotlin.reflect.KClass - -interface ReactiveQueryFactory { - fun selectQuery( - returnType: Class, - dsl: CriteriaQueryDsl.() -> Unit - ): ReactiveQuery - - fun updateQuery( - target: KClass, - dsl: CriteriaUpdateQueryDsl.() -> Unit - ): ReactiveQuery - - fun deleteQuery( - target: KClass, - dsl: CriteriaDeleteQueryDsl.() -> Unit - ): ReactiveQuery - - fun subquery( - returnType: Class, - dsl: SubqueryDsl.() -> Unit - ): SubqueryExpressionSpec -} diff --git a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryExtensions.kt b/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryExtensions.kt deleted file mode 100644 index 587110bf5..000000000 --- a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryExtensions.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl - -suspend inline fun ReactiveQueryFactory.singleQuery(noinline dsl: CriteriaQueryDsl.() -> Unit) = - selectQuery(dsl).singleResult() - -suspend inline fun ReactiveQueryFactory.singleQueryOrNull(noinline dsl: CriteriaQueryDsl.() -> Unit) = - selectQuery(dsl).singleResultOrNull() - -suspend inline fun ReactiveQueryFactory.listQuery(noinline dsl: CriteriaQueryDsl.() -> Unit) = - selectQuery(dsl).resultList() - -inline fun ReactiveQueryFactory.selectQuery(noinline dsl: CriteriaQueryDsl.() -> Unit) = - selectQuery(T::class.java, dsl) - -inline fun ReactiveQueryFactory.updateQuery(noinline dsl: CriteriaUpdateQueryDsl.() -> Unit) = - updateQuery(T::class, dsl) - -inline fun ReactiveQueryFactory.deleteQuery(noinline dsl: CriteriaDeleteQueryDsl.() -> Unit) = - deleteQuery(T::class, dsl) - -inline fun ReactiveQueryFactory.subquery(noinline dsl: SubqueryDsl.() -> Unit) = - subquery(T::class.java, dsl) diff --git a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryImpl.kt b/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryImpl.kt deleted file mode 100644 index ef2d2e1ad..000000000 --- a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryImpl.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.creator.ReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.* -import kotlin.reflect.KClass - -class ReactiveQueryFactoryImpl( - private val criteriaQueryCreator: ReactiveCriteriaQueryCreator, - private val subqueryCreator: SubqueryCreator, -) : ReactiveQueryFactory { - override fun selectQuery( - returnType: Class, - dsl: CriteriaQueryDsl.() -> Unit - ): ReactiveQuery = - criteriaQueryCreator.createQuery(ReactiveQueryDslImpl(returnType).apply(dsl).createCriteriaQuerySpec()) - - override fun updateQuery( - target: KClass, - dsl: CriteriaUpdateQueryDsl.() -> Unit - ): ReactiveQuery = - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl(target.java).apply(dsl).apply { from(target) }.createCriteriaUpdateQuerySpec() - ) - - override fun deleteQuery( - target: KClass, - dsl: CriteriaDeleteQueryDsl.() -> Unit - ): ReactiveQuery = - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl(target.java).apply(dsl).apply { from(target) }.createCriteriaDeleteQuerySpec() - ) - - override fun subquery( - returnType: Class, - dsl: SubqueryDsl.() -> Unit - ): SubqueryExpressionSpec = - subquery(returnType, subqueryCreator, dsl) -} - -fun subquery( - returnType: Class, - subqueryCreator: SubqueryCreator, - dsl: SubqueryDsl.() -> Unit -): SubqueryExpressionSpec = - SubqueryExpressionSpec(ReactiveQueryDslImpl(returnType).apply(dsl).createSubquerySpec(), subqueryCreator) diff --git a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/ReactiveQuery.kt b/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/ReactiveQuery.kt deleted file mode 100644 index 12a9d6811..000000000 --- a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/ReactiveQuery.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import jakarta.persistence.Parameter -import kotlin.reflect.KClass - -interface ReactiveQuery { - suspend fun singleResult(): R - suspend fun resultList(): List - suspend fun singleResultOrNull(): R? - suspend fun executeUpdate(): Int - fun setParameter(position: Int, value: Any?): ReactiveQuery - fun setParameter(name: String, value: Any?): ReactiveQuery - fun setParameter(parameter: Parameter, value: T?): ReactiveQuery - fun setMaxResults(maxResults: Int): ReactiveQuery - fun setFirstResult(firstResult: Int): ReactiveQuery - fun setQueryHint(hintName: String, value: Any) - val maxResults: Int - val firstResult: Int - fun unwrap(type: KClass): T -} diff --git a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/ReactiveQueryExtensions.kt b/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/ReactiveQueryExtensions.kt deleted file mode 100644 index 71e98e228..000000000 --- a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/ReactiveQueryExtensions.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -inline fun ReactiveQuery.unwrap(): T = unwrap(T::class) diff --git a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EmptySqlReactiveQueryHintClause.kt b/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EmptySqlReactiveQueryHintClause.kt deleted file mode 100644 index 13b61b9cf..000000000 --- a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EmptySqlReactiveQueryHintClause.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import com.linecorp.kotlinjdsl.query.clause.hint.EmptySqlReactiveQueryHintClause.Companion.empty -import org.slf4j.LoggerFactory - -@Suppress("UNCHECKED_CAST") -inline fun emptySqlHintClause(): SqlQueryHintClause = empty as SqlQueryHintClause - -class EmptySqlReactiveQueryHintClause : SqlQueryHintClause { - private val log = LoggerFactory.getLogger(EmptySqlReactiveQueryHintClause::class.java) - - companion object { - val empty: SqlQueryHintClause<*> = EmptySqlReactiveQueryHintClause() - } - - override fun apply(query: T) { - log.warn( - "We do not yet support the sql query hint of this jpa implementation. Please contact us through github." - ) - } -} diff --git a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaReactiveQueryHintClauseImpl.kt b/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaReactiveQueryHintClauseImpl.kt deleted file mode 100644 index 6407b082a..000000000 --- a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaReactiveQueryHintClauseImpl.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import com.linecorp.kotlinjdsl.query.ReactiveQuery - -data class JpaReactiveQueryHintClauseImpl( - val hints: Map -) : JpaQueryHintClause> { - override fun apply(query: ReactiveQuery) { - hints.forEach { (hintName, value) -> query.setQueryHint(hintName, value) } - } -} diff --git a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/ReactiveLimitClause.kt b/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/ReactiveLimitClause.kt deleted file mode 100644 index ee6f7d5d4..000000000 --- a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/ReactiveLimitClause.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.limit - -import com.linecorp.kotlinjdsl.query.ReactiveQuery - - -data class ReactiveLimitClause( - private val offset: Int?, - private val maxResults: Int?, -) : QueryLimitClause> { - companion object { - val empty = ReactiveLimitClause(null, null) - - @Suppress("UNCHECKED_CAST") - fun empty(): QueryLimitClause = empty as QueryLimitClause - } - - override fun apply(query: ReactiveQuery) { - offset?.run { query.setFirstResult(this) } - maxResults?.run { query.setMaxResults(this) } - } -} diff --git a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/ReactiveCriteriaQueryCreator.kt b/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/ReactiveCriteriaQueryCreator.kt deleted file mode 100644 index 427d128e7..000000000 --- a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/ReactiveCriteriaQueryCreator.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import com.linecorp.kotlinjdsl.query.ReactiveQuery - -interface ReactiveCriteriaQueryCreator { - fun createQuery(spec: CriteriaQuerySpec>): ReactiveQuery - fun createQuery(spec: CriteriaUpdateQuerySpec>): ReactiveQuery - fun createQuery(spec: CriteriaDeleteQuerySpec>): ReactiveQuery -} diff --git a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/ReactiveQueryDslImpl.kt b/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/ReactiveQueryDslImpl.kt deleted file mode 100644 index f3ee90236..000000000 --- a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/ReactiveQueryDslImpl.kt +++ /dev/null @@ -1,382 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl - -import com.linecorp.kotlinjdsl.query.* -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.clause.groupby.SubqueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.clause.having.SubqueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaReactiveQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.limit.ReactiveLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SubquerySelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause -import com.linecorp.kotlinjdsl.query.clause.where.SubqueryWhereClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.* -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.OrSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.from.Relation -import com.linecorp.kotlinjdsl.querydsl.hint.SqlReactiveQueryHintClauseProvider -import jakarta.persistence.criteria.JoinType - -/** - * Internal DSL Implementation - * - * Don't use this directly because it's an **INTERNAL** class. - * It does not support backward compatibility. - * This class should be used with the understanding that it is not thread safe and therefore not suitable for parallel processing. - */ -open class ReactiveQueryDslImpl( - private val returnType: Class, -) : CriteriaQueryDsl, SubqueryDsl, CriteriaUpdateQueryDsl, CriteriaDeleteQueryDsl { - private var singleSelectClause: SingleSelectClause? = null - private var multiSelectClause: MultiSelectClause? = null - private var fromClause: FromClause<*>? = null - private var joins: MutableList>? = null - private var wheres: MutableList? = null - private var groupBys: MutableList>? = null - private var havings: MutableList? = null - private var orderBys: MutableList? = null - private var offset: Int? = null - private var maxResults: Int? = null - private var sqlHints: MutableList? = null - private var jpaHints: MutableMap? = null - private var params: MutableMap, Any?>? = null - - private fun lazyJoins() = (joins ?: mutableListOf>().apply { joins = this }) - private fun lazyWheres() = (wheres ?: mutableListOf().apply { wheres = this }) - private fun lazyGroupBys() = (groupBys ?: mutableListOf>().apply { groupBys = this }) - private fun lazyHavings() = (havings ?: mutableListOf().apply { havings = this }) - private fun lazyOrderBys() = (orderBys ?: mutableListOf().apply { orderBys = this }) - private fun lazySqlHints() = (sqlHints ?: mutableListOf().apply { sqlHints = this }) - private fun lazyJpaHints() = (jpaHints ?: mutableMapOf().apply { jpaHints = this }) - private fun lazyParams() = (params ?: mutableMapOf, Any?>().apply { params = this }) - - override fun select(distinct: Boolean, expression: ExpressionSpec): SingleSelectClause { - return SingleSelectClause( - returnType = returnType, - distinct = distinct, - expression = expression, - ).also { singleSelectClause = it } - } - - override fun select(distinct: Boolean, expressions: List>): MultiSelectClause { - return MultiSelectClause( - returnType = returnType, - distinct = distinct, - expressions = expressions, - ).also { multiSelectClause = it } - } - - override fun from(entity: EntitySpec<*>) { - fromClause = FromClause(entity) - } - - override fun join(left: EntitySpec, right: EntitySpec, relation: Relation, joinType: JoinType) { - lazyJoins().add(SimpleJoinSpec(left = left, right = right, path = relation.path, joinType = joinType)) - } - - override fun join(entity: EntitySpec, predicate: PredicateSpec) { - lazyJoins().add(CrossJoinSpec(entity)) - lazyWheres().add(predicate) - } - - override fun associate( - left: EntitySpec, - right: EntitySpec, - relation: Relation, - joinType: JoinType - ) { - lazyJoins().add(SimpleAssociatedJoinSpec(left = left, right = right, path = relation.path)) - } - - override fun treat( - root: ColumnSpec<*>, - parent: EntitySpec

, - child: EntitySpec, - parentJoinType: JoinType - ) { - lazyJoins().add(TreatJoinSpec(parent, child, parentJoinType, root)) - } - - override fun fetch( - left: EntitySpec, - right: EntitySpec, - relation: Relation, - joinType: JoinType - ) { - lazyJoins().add(FetchJoinSpec(left = left, right = right, path = relation.path, joinType = joinType)) - } - - override fun where(predicate: PredicateSpec?) { - predicate?.run { lazyWheres().add(this) } - } - - override fun whereAnd(predicates: List) { - predicates.filterNotNull() - .takeIf { it.isNotEmpty() } - ?.run { where(AndSpec(this)) } - } - - override fun whereOr(predicates: List) { - predicates.filterNotNull() - .takeIf { it.isNotEmpty() } - ?.run { where(OrSpec(this)) } - } - - override fun groupBy(columns: List>) { - lazyGroupBys().addAll(columns) - } - - override fun having(predicate: PredicateSpec) { - lazyHavings().add(predicate) - } - - override fun orderBy(orders: List) { - lazyOrderBys().addAll(orders) - } - - override fun offset(offset: Int) { - this.offset = offset - } - - override fun maxResults(maxResults: Int) { - this.maxResults = maxResults - } - - override fun sqlHints(hints: List) { - lazySqlHints().addAll(hints) - } - - override fun hints(hints: Map) { - lazyJpaHints().putAll(hints) - } - - override fun setParams(params: Map, Any?>) { - lazyParams().putAll(params) - } - - override fun set(column: ColumnSpec<*>, value: Any?) { - lazyParams()[column] = value - } - - fun createCriteriaQuerySpec(): CriteriaQuerySpec> { - return CriteriaQuerySpecImpl( - select = getCriteriaQuerySelectClause(), - from = getFromClause(), - join = getJoinClause(), - where = getWhereClause(), - groupBy = getGroupByClause(), - having = getHavingClause(), - orderBy = getOrderByClause(), - limit = getLimitClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - ) - } - - @Suppress("UNCHECKED_CAST") - fun createCriteriaUpdateQuerySpec(): CriteriaUpdateQuerySpec> { - return CriteriaUpdateQuerySpecImpl( - targetEntity = returnType, - from = getFromClause() as FromClause, - associate = getSimpleAssociatedJoinClauseOnly(), - where = getWhereClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - set = getSetClause() - ) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getSetClause() = SetClause(params.orEmpty()) - - @Suppress("UNCHECKED_CAST") - fun createCriteriaDeleteQuerySpec(): CriteriaDeleteQuerySpec> { - return CriteriaDeleteQuerySpecImpl( - targetEntity = returnType, - from = getFromClause() as FromClause, - associate = getSimpleAssociatedJoinClauseOnly(), - where = getWhereClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause() - ) - } - - @Suppress("UNCHECKED_CAST") - fun createSubquerySpec(): SubquerySpec { - return SubquerySpecImpl( - select = getSubquerySelectClause(), - from = getFromClause(), - join = getJoinClauseDoesNotHaveFetch(), - where = getWhereClause(), - groupBy = getGroupByClause(), - having = getHavingClause(), - ) - } - - protected fun getCriteriaQuerySelectClause(): CriteriaQuerySelectClause { - mustBe(singleSelectClause != null || multiSelectClause != null) { - "There is no select clause in query" - } - - return singleSelectClause ?: multiSelectClause!! - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getSubquerySelectClause(): SubquerySelectClause { - mustBe(singleSelectClause != null) { "There is no select clause in query" } - - return singleSelectClause!! - } - - protected fun getFromClause(): FromClause<*> { - mustBe(fromClause != null) { "There is no from clause in query" } - - return fromClause!! - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getJoinClause(): JoinClause { - return JoinClause(joins.orEmpty()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getJoinClauseDoesNotHaveFetch(): JoinClause { - mustBe(joins.orEmpty().filterIsInstance>().isEmpty()) { "This query does not support fetch" } - - return getJoinClause() - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getSimpleAssociatedJoinClauseOnly(): SimpleAssociatedJoinClause { - val joins = joins.orEmpty() - return joins.filterIsInstance>().let { - mustBe(it.size == joins.size) { "This query only support associate" } - SimpleAssociatedJoinClause(it) - } - } - - protected fun getWhereClause(): WhereClause { - return WhereClause(wheres.orEmpty().merge()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getGroupByClause(): GroupByClause { - return GroupByClause(groupBys.orEmpty()) - } - - protected fun getEmptyGroupByClause(): GroupByClause { - return GroupByClause(emptyList()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getHavingClause(): HavingClause { - return HavingClause(havings.orEmpty().merge()) - } - - protected fun getEmptyHavingClause(): HavingClause { - return HavingClause(PredicateSpec.empty) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getOrderByClause(): CriteriaQueryOrderByClause { - return OrderByClause(orderBys.orEmpty()) - } - - protected fun getEmptyOrderByClause(): CriteriaQueryOrderByClause { - return OrderByClause.empty - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getLimitClause(): QueryLimitClause> { - return ReactiveLimitClause(offset, maxResults) - } - - @Suppress("UNCHECKED_CAST") - protected fun getEmptyLimitClause(): QueryLimitClause> { - return ReactiveLimitClause.empty as QueryLimitClause> - } - - protected fun getJpaQueryHintClause(): JpaQueryHintClause> { - return JpaReactiveQueryHintClauseImpl(jpaHints.orEmpty()) - } - - protected fun getSqlQueryHintClause(): SqlQueryHintClause> { - return SqlReactiveQueryHintClauseProvider.provide(sqlHints.orEmpty()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun List.merge(): PredicateSpec { - return when { - isEmpty() -> PredicateSpec.empty - size == 1 -> first() - else -> AndSpec(this) - } - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun mustBe(condition: Boolean, lazyMessage: () -> String) { - if (!condition) { - throw IllegalStateException(lazyMessage()) - } - } - - data class CriteriaQuerySpecImpl( - override val select: CriteriaQuerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: CriteriaQueryWhereClause, - override val groupBy: CriteriaQueryGroupByClause, - override val having: CriteriaQueryHavingClause, - override val orderBy: CriteriaQueryOrderByClause, - override val limit: QueryLimitClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - ) : CriteriaQuerySpec - - data class CriteriaUpdateQuerySpecImpl( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - override val set: SetClause - ) : CriteriaUpdateQuerySpec - - data class CriteriaDeleteQuerySpecImpl( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause - ) : CriteriaDeleteQuerySpec - - data class SubquerySpecImpl( - override val select: SubquerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: SubqueryWhereClause, - override val groupBy: SubqueryGroupByClause, - override val having: SubqueryHavingClause - ) : SubquerySpec -} diff --git a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/ReactiveSqlQueryHintClauseFactoryProvider.kt b/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/ReactiveSqlQueryHintClauseFactoryProvider.kt deleted file mode 100644 index fcd457291..000000000 --- a/reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/ReactiveSqlQueryHintClauseFactoryProvider.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.emptySqlHintClause -import org.slf4j.LoggerFactory -import java.util.* - -interface SqlReactiveQueryHintClauseFactoryProvider { - fun factory(): (List) -> SqlQueryHintClause> - - companion object { - private val log = LoggerFactory.getLogger(SqlReactiveQueryHintClauseFactoryProvider::class.java) - val loadedFactory by lazy { - ServiceLoader.load(SqlReactiveQueryHintClauseFactoryProvider::class.java).checkDuplicate().firstOrNull() - ?.factory() - } - - private fun ServiceLoader.checkDuplicate(): ServiceLoader { - takeIf { count() > 1 } - ?.run { log.warn("Duplicate Factory implementation detected") } - return this - } - } -} - -object SqlReactiveQueryHintClauseProvider { - @Suppress("UNCHECKED_CAST") - fun provide(hints: List): SqlQueryHintClause> { - val factory = (SqlReactiveQueryHintClauseFactoryProvider.loadedFactory - ?: { emptySqlHintClause() }) as (List) -> SqlQueryHintClause> - return factory(hints) - } -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryExtensionsTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryExtensionsTest.kt deleted file mode 100644 index e0880ef4b..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryExtensionsTest.kt +++ /dev/null @@ -1,179 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import kotlinx.coroutines.runBlocking -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MockKExtension::class) -internal class ReactiveQueryFactoryExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var queryFactory: ReactiveQueryFactory - - @MockK - private lateinit var query: ReactiveQuery - - @MockK - private lateinit var subqueryExpressionSpec: SubqueryExpressionSpec - - @Test - fun singleQuery() = runBlocking { - // given - every { queryFactory.selectQuery(any(), any()) } returns query - coEvery { query.singleResult() } returns Data1() - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: Data1 = queryFactory.singleQuery(dsl) - - // then - assertThat(actual).isEqualTo(Data1()) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - coVerify(exactly = 1) { - query.singleResult() - } - - confirmVerified(queryFactory, query) - } - - @Test - fun listQuery() = runBlocking { - // given - every { queryFactory.selectQuery(any(), any()) } returns query - coEvery { query.resultList() } returns listOf(Data1()) - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: List = queryFactory.listQuery(dsl) - - // then - assertThat(actual).isEqualTo(listOf(Data1())) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - coVerify(exactly = 1) { - query.resultList() - } - - confirmVerified(queryFactory, query) - } - - @Test - fun selectQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns query - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: ReactiveQuery = queryFactory.selectQuery(dsl) - - // then - assertThat(actual).isEqualTo(query) - - verify { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun updateQuery() { - // given - every { queryFactory.updateQuery(any(), any()) } returns query - - val dsl: CriteriaUpdateQueryDsl.() -> Unit = { - set(col(Data1::id), 1) - where(col(Data1::id).equal(2)) - } - - // when - val actual: ReactiveQuery = queryFactory.updateQuery(dsl) - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - queryFactory.updateQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun deleteQuery() { - // given - every { queryFactory.deleteQuery(any(), any()) } returns query - - val dsl: CriteriaDeleteQueryDsl.() -> Unit = { - where(col(Data1::id).equal(1)) - } - - // when - val actual: ReactiveQuery = queryFactory.deleteQuery(dsl) - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - queryFactory.deleteQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun subquery() { - // given - every { queryFactory.subquery(any(), any()) } returns subqueryExpressionSpec - - val dsl: SubqueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: SubqueryExpressionSpec = queryFactory.subquery(dsl) - - // then - assertThat(actual).isEqualTo(subqueryExpressionSpec) - - verify(exactly = 1) { - queryFactory.subquery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - data class Data1( - val id: Int = 100 - ) -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryImplTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryImplTest.kt deleted file mode 100644 index f2f883931..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryImplTest.kt +++ /dev/null @@ -1,187 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaReactiveQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.emptySqlHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.ReactiveLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.creator.ReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.EqualValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MockKExtension::class) -internal class ReactiveQueryFactoryImplTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: ReactiveQueryFactoryImpl - - @MockK - private lateinit var criteriaQueryCreator: ReactiveCriteriaQueryCreator - - @MockK - private lateinit var subqueryCreator: SubqueryCreator - - @Test - fun selectQuery() { - // given - val query: ReactiveQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>>()) } returns query - - // when - val actual = sut.selectQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - val actualSelectQuery = sut.selectQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - assertThat(actual).isEqualTo(query) - assertThat(actualSelectQuery).isEqualTo(query) - - verify(exactly = 2) { - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = ReactiveLimitClause.empty(), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun updateQuery() { - // given - val query: ReactiveQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>>()) } returns query - - // when - val actual = sut.updateQuery(Data1::class) { - where(col(Data1::id).equal(1)) - set(col(Data1::id), 2) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl.CriteriaUpdateQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - set = SetClause(mapOf(columnSpec to 2)), - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun deleteQuery() { - // given - val query: ReactiveQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>>()) } returns query - - // when - val actual = sut.deleteQuery(Data1::class) { - where(col(Data1::id).equal(1)) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl.CriteriaDeleteQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun subquery() { - // when - val actual = sut.subquery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - val subquerySpec = ReactiveQueryDslImpl.SubquerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - ) - - assertThat(actual).isEqualTo(SubqueryExpressionSpec(subquerySpec, subqueryCreator)) - } - - data class Data1( - val id: Int = 1 - ) -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaReactiveQueryHintClauseImplTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaReactiveQueryHintClauseImplTest.kt deleted file mode 100644 index 32d685368..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaReactiveQueryHintClauseImplTest.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertDoesNotThrow -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MockKExtension::class) -internal class JpaReactiveQueryHintClauseImplTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: ReactiveQuery - - @Test - fun apply() { - // given - val hints = mapOf( - "cacheable" to true, - "sql.hint" to "index" - ) - - every { query.setQueryHint(any(), any()) } just runs - - // when - JpaReactiveQueryHintClauseImpl(hints).apply(query) - - // then - verify(exactly = 1) { - query.setQueryHint("cacheable", true) - query.setQueryHint("sql.hint", "index") - } - - confirmVerified(query) - } - - @Test - fun empty() { - assertDoesNotThrow { emptySqlHintClause().apply(Any()) } - } -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/ReactiveLimitClauseTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/ReactiveLimitClauseTest.kt deleted file mode 100644 index fce695dc5..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/ReactiveLimitClauseTest.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.limit - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MockKExtension::class) -internal class ReactiveLimitClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: ReactiveQuery - - @Test - fun apply() { - // given - val offset = 10 - val maxResults = 20 - - every { query.setFirstResult(10) } returns query - every { query.setMaxResults(20) } returns query - - // when - ReactiveLimitClause(offset, maxResults).apply(query) - - // then - verify(exactly = 1) { - query.setFirstResult(offset) - query.setMaxResults(maxResults) - } - - confirmVerified(query) - } - - @Test - fun `apply - null`() { - // given - val offset: Int? = null - val maxResults: Int? = null - - // when - ReactiveLimitClause(offset, maxResults).apply(query) - - // then - confirmVerified(query) - } -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ReactiveQueryDslImplExpressionTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ReactiveQueryDslImplExpressionTest.kt deleted file mode 100644 index cb7d20ec7..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ReactiveQueryDslImplExpressionTest.kt +++ /dev/null @@ -1,364 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.* -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplExpressionTest : WithKotlinJdslAssertions { - @Test - fun entity() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class) - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java)) - } - - @Test - fun entityWithAlias() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class, "data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun alias() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = Data1::class.alias("data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun literal() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = literal(10) - } - - assertThat(actual).isEqualTo(LiteralSpec(10)) - } - - @Test - fun nullLiteral() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = nullLiteral(Int::class.java) - } - - assertThat(actual).isEqualTo(NullLiteralSpec(Int::class.java)) - } - - @Test - fun col() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = col(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun column() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = column(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun max() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = max(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MaxSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun min() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = min(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MinSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun avg() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = avg(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - AvgSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun sum() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = sum(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - SumSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun count() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = count(distinct = true, col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countNonDistinct() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = count(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countDistinct() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = countDistinct(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun greatest() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = greatest(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - GreatestSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun least() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = least(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - LeastSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun caseList() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = case( - listOf( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - ), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun caseVararg() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = case( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun `when`() { - val predicate1: PredicateSpec = mockk() - val expression1: ExpressionSpec = mockk() - - val actual: CaseSpec.WhenSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1, expression1) - } - - assertThat(actual).isEqualTo(CaseSpec.WhenSpec(predicate1, expression1)) - } - - @Test - fun whenWithPredicate() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1) - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - @Test - fun whenWithLambda() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = `when` { predicate1 } - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - @Test - fun functionVarArg() { - // when - val actual: FunctionSpec - ReactiveQueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - @Test - fun functionList() { - // when - val actual: FunctionSpec - ReactiveQueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - listOf( - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - class Data1 { - val id: Int = 10 - } -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplFetchTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplFetchTest.kt deleted file mode 100644 index edad6174d..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplFetchTest.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.spec.FetchJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import jakarta.persistence.criteria.JoinType - -internal class ReactiveQueryDslImplFetchTest : WithKotlinJdslAssertions { - @Test - fun fetch() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - fetch(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val fetchSpec = FetchJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(fetchSpec, fetchSpec, fetchSpec, fetchSpec)) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("This query does not support fetch") - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplFromTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplFromTest.kt deleted file mode 100644 index 93f828586..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplFromTest.kt +++ /dev/null @@ -1,77 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplFromTest : WithKotlinJdslAssertions { - @Test - fun fromJavaClass() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromKotlinClass() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromEntitySpec() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class, "data1")) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - } - - class Data1 -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplJoinTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplJoinTest.kt deleted file mode 100644 index 8083b25ad..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplJoinTest.kt +++ /dev/null @@ -1,253 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.CrossJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleAssociatedJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleJoinSpec -import com.linecorp.kotlinjdsl.query.spec.TreatJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.employee.Employee -import com.linecorp.kotlinjdsl.test.entity.employee.FullTimeEmployee -import com.linecorp.kotlinjdsl.test.entity.employee.Project -import io.mockk.mockk -import org.junit.jupiter.api.Test -import java.math.BigDecimal -import jakarta.persistence.criteria.JoinType - -internal class ReactiveQueryDslImplJoinTest : WithKotlinJdslAssertions { - @Test - fun on() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = on(predicateSpec) - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun onLambda() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = on { predicateSpec } - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun join() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun associate() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun treat() { - // when - val actual = ReactiveQueryDslImpl(FullTimeEmployee::class.java).apply { - val project: EntitySpec = Project::class.alias("project") - val fullTimeEmployee = FullTimeEmployee::class.alias("fe") - val employee = Employee::class.alias("e") - - selectDistinct(fullTimeEmployee) - from(project) - treat( - root = ColumnSpec(entity = project, path = Project::employees.name), - parent = employee, - child = fullTimeEmployee, - parentJoinType = JoinType.RIGHT - ) - where( - ColumnSpec(fullTimeEmployee, FullTimeEmployee::annualSalary.name) - .greaterThan(100000.toBigDecimal()) - ) - } - - // then - val joinSpec = TreatJoinSpec( - left = EntitySpec(Employee::class.java, "e"), - right = EntitySpec(FullTimeEmployee::class.java, "fe"), - joinType = JoinType.RIGHT, - root = ColumnSpec(EntitySpec(Project::class.java, "project"), Project::employees.name), - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec)) - ) - } - - @Test - fun updateAssociate() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaUpdateQuerySpec() - - assertThat(criteriaQuerySpec.associate).isEqualTo( - SimpleAssociatedJoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun updateAssociateOnlyAllowsSimpleAssociatedJoinSpec() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2)) - } - - val result = catchThrowable(IllegalStateException::class) { actual.createCriteriaUpdateQuerySpec() } - - assertThat(result).hasMessage("This query only support associate") - } - - @Test - fun crossJoin() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(Data2::class, on(predicateSpec1)) - join(entity(Data2::class), on(predicateSpec1)) - where(predicateSpec2) - } - - // then - val joinSpec = CrossJoinSpec(EntitySpec(Data2::class.java)) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplRelationTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplRelationTest.kt deleted file mode 100644 index 4b98c2fd5..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplRelationTest.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplRelationTest : WithKotlinJdslAssertions { - @Test - fun on() { - val actual: Relation - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2) - } - - assertThat(actual).isEqualTo(Relation("data2")) - } - - @Test - fun onCollection() { - val actual: Relation - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2List) - } - - assertThat(actual).isEqualTo(Relation("data2List")) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/ReactiveQueryDslImplGroupByTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/ReactiveQueryDslImplGroupByTest.kt deleted file mode 100644 index 126b69b87..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/ReactiveQueryDslImplGroupByTest.kt +++ /dev/null @@ -1,88 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.groupby - -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplGroupByTest : WithKotlinJdslAssertions { - @Test - fun noGroupBy() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - @Test - fun groupByVararg() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(columnSpec1, columnSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - } - - @Test - fun groupByList() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(listOf(columnSpec1, columnSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - } - - class Data1 -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/having/ReactiveQueryDslImplHavingTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/having/ReactiveQueryDslImplHavingTest.kt deleted file mode 100644 index 47928a22c..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/having/ReactiveQueryDslImplHavingTest.kt +++ /dev/null @@ -1,89 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.having - -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplHavingTest : WithKotlinJdslAssertions { - @Test - fun noHaving() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - @Test - fun having() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - } - - @Test - fun multipleHaving() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec1) - having(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - class Data1 -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/ReactiveQueryDslImplHintTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/ReactiveQueryDslImplHintTest.kt deleted file mode 100644 index ec5f9c872..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/ReactiveQueryDslImplHintTest.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint - -import com.linecorp.kotlinjdsl.query.clause.hint.JpaReactiveQueryHintClauseImpl -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplHintTest : WithKotlinJdslAssertions { - @Test - fun noHints() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaReactiveQueryHintClauseImpl(emptyMap()) - ) - } - - @Test - fun hintsVararg() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints("hint1" to true, "hint2" to "comment") - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaReactiveQueryHintClauseImpl( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - ) - } - - @Test - fun hintsMap() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints(mapOf("hint1" to true, "hint2" to "comment")) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaReactiveQueryHintClauseImpl( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - ) - } - - class Data1 -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/ReactiveQueryDslImplLimitTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/ReactiveQueryDslImplLimitTest.kt deleted file mode 100644 index 42dee8956..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/ReactiveQueryDslImplLimitTest.kt +++ /dev/null @@ -1,97 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.limit - -import com.linecorp.kotlinjdsl.query.clause.limit.ReactiveLimitClause -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplLimitTest : WithKotlinJdslAssertions { - @Test - fun noLimit() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = null, maxResults = null) - ) - } - - @Test - fun offset() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - offset(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = 10, maxResults = null) - ) - } - - @Test - fun maxResults() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - maxResults(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = null, maxResults = 10) - ) - } - - @Test - fun limitMaxResults() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = null, maxResults = 10) - ) - } - - @Test - fun limitOffsetAndMaxResults() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(1, 10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = 1, maxResults = 10) - ) - } - - class Data1 { - val id: String = "test" - val name: String = "test_name" - } -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/ReactiveQueryDslImplOrderByWhereTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/ReactiveQueryDslImplOrderByWhereTest.kt deleted file mode 100644 index fa220d54f..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/ReactiveQueryDslImplOrderByWhereTest.kt +++ /dev/null @@ -1,98 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.orderby - -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.spec.ExpressionOrderSpec -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplOrderByWhereTest : WithKotlinJdslAssertions { - @Test - fun noOrderBy() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun orderByVararg() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(orderSpec1, orderSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - } - - @Test - fun orderByList() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(listOf(orderSpec1, orderSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - } - - @Test - fun asc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.asc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, true)) - } - - @Test - fun desc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.desc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, false)) - } - - class Data1 -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/ReactiveQueryDslImplPredicateTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/ReactiveQueryDslImplPredicateTest.kt deleted file mode 100644 index 88c1022e1..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/ReactiveQueryDslImplPredicateTest.kt +++ /dev/null @@ -1,473 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.* -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplPredicateTest : WithKotlinJdslAssertions { - @Test - fun not() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = not(predicateSpec) - } - - assertThat(actual).isEqualTo(NotSpec(predicateSpec)) - } - - @Test - fun andVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = and(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun andList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = and(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = or(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = or(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun equalValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.equal(value) - } - - assertThat(actual).isEqualTo(EqualValueSpec(expressionSpec, value)) - } - - @Test - fun equalExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.equal(expressionSpec2) - } - - assertThat(actual).isEqualTo(EqualExpressionSpec(expressionSpec1, expressionSpec2)) - } - - @Test - fun notEqualValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.notEqual(value) - } - - assertThat(actual).isEqualTo(NotSpec(EqualValueSpec(expressionSpec, value))) - } - - @Test - fun notEqualExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.notEqual(expressionSpec2) - } - - assertThat(actual).isEqualTo(NotSpec(EqualExpressionSpec(expressionSpec1, expressionSpec2))) - } - - @Test - fun inValueVararg() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(value1, value2) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inValueList() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(listOf(value1, value2)) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inExpressionVararg() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun inExpressionList() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(listOf(expressionSpec2, expressionSpec3)) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun greaterThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun greaterThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun greaterThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun greaterThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun lessThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun lessThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun betweenValue() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(value1, value2) - } - - assertThat(actual).isEqualTo(BetweenValueSpec(expressionSpec, value1, value2)) - } - - @Test - fun betweenExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.between(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(BetweenExpressionSpec(expressionSpec1, expressionSpec2, expressionSpec3)) - } - - @Test - fun isTrue() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isTrue() - } - - assertThat(actual).isEqualTo(IsTrueSpec(expressionSpec)) - } - - @Test - fun isFalse() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isFalse() - } - - assertThat(actual).isEqualTo(IsFalseSpec(expressionSpec)) - } - - @Test - fun isNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNull() - } - - assertThat(actual).isEqualTo(IsNullSpec(expressionSpec)) - } - - @Test - fun isNotNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNotNull() - } - - assertThat(actual).isEqualTo(NotSpec(IsNullSpec(expressionSpec))) - } - - @Test - fun like() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.like(value) - } - - assertThat(actual).isEqualTo(LikeSpec(expressionSpec, value)) - } - - @Test - fun notLike() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.notLike(value) - } - - assertThat(actual).isEqualTo(NotSpec(LikeSpec(expressionSpec, value))) - } -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/ReactiveQueryDslImplMultiSelectTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/ReactiveQueryDslImplMultiSelectTest.kt deleted file mode 100644 index 18257423b..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/ReactiveQueryDslImplMultiSelectTest.kt +++ /dev/null @@ -1,253 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplMultiSelectTest : WithKotlinJdslAssertions { - @Test - fun select() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - select(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectNonDistinct() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - select(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectDistinct() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - selectDistinct(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMulti() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - selectMulti(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiNonDistinctVararg() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - selectMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiNonDistinctList() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - selectMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiDistinctVararg() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - selectDistinctMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiDistinctList() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - selectDistinctMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - data class Row( - val id: String, - val name: String, - ) - - class Data1 { - val id: String = "test" - val name: String = "test_name" - } -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/ReactiveQueryDslImplSingleSelectTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/ReactiveQueryDslImplSingleSelectTest.kt deleted file mode 100644 index 001455726..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/ReactiveQueryDslImplSingleSelectTest.kt +++ /dev/null @@ -1,168 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplSingleSelectTest : WithKotlinJdslAssertions { - @Test - fun noSelect() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - from(entity(Data1::class)) - } - - // then - val exception1 = catchThrowable(IllegalStateException::class) { - actual.createCriteriaQuerySpec() - } - - assertThat(exception1).hasMessageContaining("There is no select clause in query") - - val exception2 = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception2).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectEntity() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectExpression() { - // when - val actual = ReactiveQueryDslImpl(String::class.java).apply { - select(distinct = true, column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectNonDistinctEntity() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectNonDistinctExpression() { - // when - val actual = ReactiveQueryDslImpl(String::class.java).apply { - select(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectDistinctEntity() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - selectDistinct(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectDistinctExpression() { - // when - val actual = ReactiveQueryDslImpl(String::class.java).apply { - selectDistinct(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - class Data1 { - val id: String = "test" - } -} diff --git a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/where/ReactiveQueryDslImplWhereTest.kt b/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/where/ReactiveQueryDslImplWhereTest.kt deleted file mode 100644 index f0695bab7..000000000 --- a/reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/where/ReactiveQueryDslImplWhereTest.kt +++ /dev/null @@ -1,275 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.where - -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.OrSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplWhereTest : WithKotlinJdslAssertions { - @Test - fun noWhere() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - } - - @Test - fun nullInWhere() { - // given - val predicateSpec: PredicateSpec? = null - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - } - - @Test - fun where() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - } - - @Test - fun whereAndVararg() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereAnd(nullPredicateSpec, predicateSpec1, predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun whereAndList() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereAnd(listOf(nullPredicateSpec, predicateSpec1, predicateSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun whereOrVararg() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereOr(nullPredicateSpec, predicateSpec1, predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun whereOrList() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereOr(listOf(nullPredicateSpec, predicateSpec1, predicateSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun wheres() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec1) - where(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun allTypeWheres() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(nullPredicateSpec) - where(predicateSpec1) - whereAnd(nullPredicateSpec, predicateSpec1, predicateSpec2) - whereOr(nullPredicateSpec, predicateSpec1, predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause( - AndSpec( - listOf( - predicateSpec1, - AndSpec(listOf(predicateSpec1, predicateSpec2)), - OrSpec(listOf(predicateSpec1, predicateSpec2)) - ) - ) - ) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause( - AndSpec( - listOf( - predicateSpec1, - AndSpec(listOf(predicateSpec1, predicateSpec2)), - OrSpec(listOf(predicateSpec1, predicateSpec2)) - ) - ) - ) - ) - } - - class Data1 -} diff --git a/reactive-core/README.md b/reactive-core/README.md deleted file mode 100644 index 7374b616e..000000000 --- a/reactive-core/README.md +++ /dev/null @@ -1,330 +0,0 @@ -# Kotlin JDSL Reactive - -Kotlin JDSL Reactive is a module in Kotlin JDSL that generates Reactive based JPA queries without Metamodel and Reflection. - -## Introduction - -Currently, there is no JPA standard for Reactive. -However, the only Reactive implementation of JPA, [hibernate-reactive](https://hibernate.org/reactive) exists. -so, our implementation of Kotlin JDSL Reactive is heavily inspired by hibernate-reactive. - -The current Reactive module has the following structure. - -![](../document/image/reactive/reactive1.png) - -Also, our module supports Spring Data (Pageable, Range.Bound), and the structure of the module including Spring Data is as follows. - -![](../document/image/reactive/reactive2.png) - -Why did we come up with this structure? Please refer to this [Wiki](https://github.com/line/kotlin-jdsl/wiki/Support-Reactive-JPA) - -Currently, Other Implementation corresponding to the above figure is not supported by Eclipselink, another JPA standard that we are supporting. -However, please note that the structure shown in the figure above was created in consideration of future scalability. - -## About Kotlin JDSL Reactive JPA Implementation -As mentioned in [Introduction](#introduction), there is currently no Reactive JPA standard, so we created interfaces called ReactiveQuery and ReactiveQueryFactory to support other extensible reactive implementations including Hibernate. - -ReactiveQuery is as below. - -```kotlin -interface ReactiveQuery { - suspend fun singleResult(): R - suspend fun resultList(): List - suspend fun singleResultOrNull(): R? - suspend fun executeUpdate(): Int - fun setParameter(position: Int, value: Any?): ReactiveQuery - fun setParameter(name: String, value: Any?): ReactiveQuery - fun setParameter(parameter: Parameter, value: T?): ReactiveQuery - fun setMaxResults(maxResults: Int): ReactiveQuery - fun setFirstResult(firstResult: Int): ReactiveQuery - fun setQueryHint(hintName: String, value: Any) - val maxResults: Int - val firstResult: Int - fun unwrap(type: KClass): T -} -``` - -As written above, ReactiveQuery is similar to JPA's [TypedQuery](https://docs.oracle.com/javaee/6/api/javax/persistence/TypedQuery.html), but with many missing parts. -It is also similar to Hibernate's [ReactiveQuery](https://hibernate.org/reactive/documentation/1.1/javadocs/org/hibernate/reactive/session/ReactiveQuery.html), but similarly, many parts are omitted. -If so, what if you need to directly use the query object (e.g: Mutiny.Query), which is the actual implementation of Reactive Query? -The answer is right there in the unwrap method. -You can check the example code using unwrap in the description a little further below. - -Next, we introduce you to ReactiveQueryFactory. -Overall, it's not very different from the QueryFactory you were aware of, - -```kotlin -interface ReactiveQueryFactory { - fun selectQuery(returnType: Class, dsl: CriteriaQueryDsl.() -> Unit): ReactiveQuery - - fun updateQuery(target: KClass, dsl: CriteriaUpdateQueryDsl.() -> Unit): ReactiveQuery - - fun deleteQuery(target: KClass, dsl: CriteriaDeleteQueryDsl.() -> Unit): ReactiveQuery - - fun subquery(returnType: Class, dsl: SubqueryDsl.() -> Unit): SubqueryExpressionSpec -} -``` - -ReactiveQueryFactoryImpl, the only implementation of ReactiveQueryFactory, has the following structure. - -```kotlin -class ReactiveQueryFactoryImpl( - private val criteriaQueryCreator: ReactiveCriteriaQueryCreator, - private val subqueryCreator: SubqueryCreator, -) : ReactiveQueryFactory { - override fun selectQuery( - returnType: Class, - dsl: CriteriaQueryDsl.() -> Unit - ): ReactiveQuery = - criteriaQueryCreator.createQuery(ReactiveQueryDslImpl(returnType).apply(dsl).createCriteriaQuerySpec()) - - override fun updateQuery( - target: KClass, - dsl: CriteriaUpdateQueryDsl.() -> Unit - ): ReactiveQuery = - ... - - override fun deleteQuery( - target: KClass, - dsl: CriteriaDeleteQueryDsl.() -> Unit - ): ReactiveQuery = - ... - - override fun subquery( - returnType: Class, - dsl: SubqueryDsl.() -> Unit - ): SubqueryExpressionSpec = - ... -} -``` - -The key to the code above is the ReactiveCriteriaQueryCreator. -There is currently only one type implementation of ReactiveCriteriaQueryCreator, the Mutiny(Stateless)ReactiveCriteriaQueryCreator class. -Therefore, we will develop the story based on MutinyReactiveCriteriaQueryCreator. -Please refer to the [Quick Start](#Quick-Start) below - -## Quick Start - JPA 2.2 - -Add Kotlin JDSL Hibernate Reactive related library & Mutiny kotlin - -```kotlin -dependencies { - implementation("com.linecorp.kotlin-jdsl:hibernate-reactive-kotlin-jdsl:x.y.z") - implementation("org.hibernate.reactive:hibernate-reactive-core:x.y.z") - implementation("io.smallrye.reactive:mutiny-kotlin:x.y.z") -} -``` - -## Quick Start - JPA 3.0 - -Add Kotlin JDSL Hibernate Reactive related library & Mutiny kotlin - -```kotlin -dependencies { - implementation("com.linecorp.kotlin-jdsl:hibernate-reactive-kotlin-jdsl-jakarta:x.y.z") - implementation("org.hibernate.reactive:hibernate-reactive-core-jakarta:x.y.z") - implementation("io.smallrye.reactive:mutiny-kotlin:x.y.z") -} -``` -Basically, configure the Persistence Unit referring to the setting [description](http://hibernate.org/reactive/documentation/1.1/reference/html_single/#_basic_configuration) of hibernate-reactive. - -For the basic DB operation method using withFactory, refer to the code below. - -```kotlin -fun main() { - val sessionFactory = Persistence.createEntityManagerFactory("persistenceUnitName") - .unwrap(Mutiny.SessionFactory::class.java) - val subqueryCreator: SubqueryCreator = SubqueryCreatorImpl() - - // it just an example, runBlocking should not be used in the real world(production code). - // All associate with asynchronously code must be a suspend function - // or run in a chain of asynchronously operated code (like CompletableFuture(Stage), Uni, Mono etc...). - runBlocking { - example(sessionFactory, subqueryCreator) - } -} - -suspend fun example(sessionFactory: Mutiny.SessionFactory, subqueryCreator: SubqueryCreator) { - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, subqueryCreator = subqueryCreator - ) - val order = Order(...initialize code) - sessionFactory.withSession { session -> session.persist(order).flatMap { session.flush() } } - // awaitSuspending method is io.smallrye.reactive:mutiny-kotlin library's "coroutine await" extension - // you should add dependency in build.gradle.kts like below - // implementation("io.smallrye.reactive:mutiny-kotlin:${mutinyVersion}") - .awaitSuspending() - val actual = queryFactory.withFactory { factory -> - // You can simply get the query result through the extension method of ReactiveQueryFactory in ReactiveQueryFactoryExtensions. - val firstOrder = factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(5000)) - } - - // You can check all the execution results within this withFactory scope. - // One thing to keep in mind is that it is recommended not to write code that can block in this scope or that can consume CPU operation for a long time. - // Your production server will most likely be down. - assertThat(firstOrder.id).isEqualTo(order.id) - - // In the case of this method, as above, the result must be obtained within the withFactory {} scope to complete the processing normally. - // As a result of executing this method, the Order object is eventually returned as actual. - factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(5000)) - } - } - - assertThat(actual.id).isEqualTo(order.id) - sessionFactory.close() -} - -``` - -If you want DB transaction guarantee, you can write the code below. - -```kotlin -@Test -fun testTransaction(): Unit = runBlocking { - val order = Order(...initialize code) - persist(order) - - val factory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - try { - factory.transactionWithFactory { queryFactory -> - val orders = queryFactory.listQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - } - - // First, the update is done within the transaction. Before committing, of course. - queryFactory.updateQuery { - where(col(Order::id).equal(orders.first().id)) - set(col(Order::purchaserId), orders.first().purchaserId + 1) - }.executeUpdate() - - // Afterwards, if an exception occurs while executing another operation, all operations that occurred in transactionWithFactory {} are rolled back. - queryFactory.updateQuery { - throw IllegalStateException("transaction rollback") - }.executeUpdate() - } - } catch (e: IllegalStateException) { - assertThat(e).hasMessage("transaction rollback") - } - - // When I checked whether the transaction rollback was really done, wow! This test actually passes. - assertThat(producer.transactionWithFactory { queryFactory -> - queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).equal(order.id)) - } - }).isEqualTo(order) - Unit -} - -``` - -If you want to perform DB operations while using Hibernate's Session directly, you can use withSession(or withTransaction) as shown below. - -```kotlin -@Test -fun executeSessionWithFactory() = runBlocking { - val sessionFactory = Persistence.createEntityManagerFactory("persistenceUnitName") - .unwrap(Mutiny.SessionFactory::class.java) - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, subqueryCreator = SubqueryCreatorImpl() - ) - val order = Order(...initialize code) - val actual = queryFactory.withFactory { session, factory -> - // Similarly, all operations should be non-blocking using awaitSuspend when receiving and processing a session. - // Never use get() or join(). - session.persist(order).awaitSuspending() - session.flush().awaitSuspending() - - factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(5000)) - } - } - - assertThat(actual.id).isEqualTo(order.id) -} -``` - -If you want to get a single query result without requiring multiple operations in one session, you can write a simpler code to solve it. - -```kotlin -@Test -fun listQuery(): Unit = runBlocking { - val order = Order(...initialize code) - persist(order) - - val queryFactory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() - ) - - val orders = queryFactory.listQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - } - - assertThat(orders) - .containsExactly(order) -} -``` - -In the above example, since the Persistence Context is immediately terminated within the listQuery method, LazyInitializationException may occur when non-fetched entities are used outside the session. -Be sure to fetch in advance using methods such as fetch and associate so that an exception does not occur after loading DB data. - -If you want to execute logic in **parallel inside the withFactory or transactionWithFactory methods, it is prohibited**. For more information, see [hibernate-reactive sessions-and-vertx-contexts](https://github.com/hibernate/hibernate-reactive/blob/main/documentation/src/main/asciidoc/reference/introduction.adoc#sessions-and-vertx-contexts). - -You can use the unwrapped Query directly, not the ReactiveQuery we made. -Currently, there is only one real implementation of our ReactiveQuery, Mutiny.Query. -so please be aware that unwrap is not possible with other types. - -```kotlin -val order = Order(...initialize code) -persist(order) - -val factory = HibernateMutinyReactiveQueryFactory( - sessionFactory = factory, - subqueryCreator = SubqueryCreatorImpl() -) - -val orderItem = factory.withFactory { queryFactory -> - val query: queryFactory.selectQuery { - select(entity(OrderItem::class)) - from(entity(OrderItem::class)) - where(col(OrderItem::id).equal(order.groups.first().items.first().id)) - } - // You can unwrap the query using ReactiveQuery extension in ReactiveQueryExtensions - .unwrap>() - - // After unwrap, you can proceed with the Mutiny.Query you want. - query.isReadOnly = true - - query.singleResult.awaitSuspending() -} - -assertThat(orderItem.id).isEqualTo(order.groups.first().items.first().id) -``` - -### Spring Data -If you use Spring Boot & Data Frameworks -See [more](../spring/data-reactive-core/README.md) diff --git a/reactive-core/build.gradle.kts b/reactive-core/build.gradle.kts deleted file mode 100644 index a712ab40c..000000000 --- a/reactive-core/build.gradle.kts +++ /dev/null @@ -1,14 +0,0 @@ -apply() - -dependencies { - api(Modules.query) - - compileOnly(libs.java.persistence.api) - compileOnly(libs.slf4j) - - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntity) - testImplementation(libs.java.persistence.api) - testImplementation(libs.h2) - testImplementation(libs.coroutine.jdk8) -} diff --git a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactory.kt b/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactory.kt deleted file mode 100644 index 69cd75e65..000000000 --- a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactory.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import kotlin.reflect.KClass - -interface ReactiveQueryFactory { - fun selectQuery( - returnType: Class, - dsl: CriteriaQueryDsl.() -> Unit - ): ReactiveQuery - - fun updateQuery( - target: KClass, - dsl: CriteriaUpdateQueryDsl.() -> Unit - ): ReactiveQuery - - fun deleteQuery( - target: KClass, - dsl: CriteriaDeleteQueryDsl.() -> Unit - ): ReactiveQuery - - fun subquery( - returnType: Class, - dsl: SubqueryDsl.() -> Unit - ): SubqueryExpressionSpec -} diff --git a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryExtensions.kt b/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryExtensions.kt deleted file mode 100644 index 587110bf5..000000000 --- a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryExtensions.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl - -suspend inline fun ReactiveQueryFactory.singleQuery(noinline dsl: CriteriaQueryDsl.() -> Unit) = - selectQuery(dsl).singleResult() - -suspend inline fun ReactiveQueryFactory.singleQueryOrNull(noinline dsl: CriteriaQueryDsl.() -> Unit) = - selectQuery(dsl).singleResultOrNull() - -suspend inline fun ReactiveQueryFactory.listQuery(noinline dsl: CriteriaQueryDsl.() -> Unit) = - selectQuery(dsl).resultList() - -inline fun ReactiveQueryFactory.selectQuery(noinline dsl: CriteriaQueryDsl.() -> Unit) = - selectQuery(T::class.java, dsl) - -inline fun ReactiveQueryFactory.updateQuery(noinline dsl: CriteriaUpdateQueryDsl.() -> Unit) = - updateQuery(T::class, dsl) - -inline fun ReactiveQueryFactory.deleteQuery(noinline dsl: CriteriaDeleteQueryDsl.() -> Unit) = - deleteQuery(T::class, dsl) - -inline fun ReactiveQueryFactory.subquery(noinline dsl: SubqueryDsl.() -> Unit) = - subquery(T::class.java, dsl) diff --git a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryImpl.kt b/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryImpl.kt deleted file mode 100644 index ef2d2e1ad..000000000 --- a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryImpl.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.creator.ReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.* -import kotlin.reflect.KClass - -class ReactiveQueryFactoryImpl( - private val criteriaQueryCreator: ReactiveCriteriaQueryCreator, - private val subqueryCreator: SubqueryCreator, -) : ReactiveQueryFactory { - override fun selectQuery( - returnType: Class, - dsl: CriteriaQueryDsl.() -> Unit - ): ReactiveQuery = - criteriaQueryCreator.createQuery(ReactiveQueryDslImpl(returnType).apply(dsl).createCriteriaQuerySpec()) - - override fun updateQuery( - target: KClass, - dsl: CriteriaUpdateQueryDsl.() -> Unit - ): ReactiveQuery = - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl(target.java).apply(dsl).apply { from(target) }.createCriteriaUpdateQuerySpec() - ) - - override fun deleteQuery( - target: KClass, - dsl: CriteriaDeleteQueryDsl.() -> Unit - ): ReactiveQuery = - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl(target.java).apply(dsl).apply { from(target) }.createCriteriaDeleteQuerySpec() - ) - - override fun subquery( - returnType: Class, - dsl: SubqueryDsl.() -> Unit - ): SubqueryExpressionSpec = - subquery(returnType, subqueryCreator, dsl) -} - -fun subquery( - returnType: Class, - subqueryCreator: SubqueryCreator, - dsl: SubqueryDsl.() -> Unit -): SubqueryExpressionSpec = - SubqueryExpressionSpec(ReactiveQueryDslImpl(returnType).apply(dsl).createSubquerySpec(), subqueryCreator) diff --git a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/ReactiveQuery.kt b/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/ReactiveQuery.kt deleted file mode 100644 index b5d768685..000000000 --- a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/ReactiveQuery.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -import javax.persistence.Parameter -import kotlin.reflect.KClass - -interface ReactiveQuery { - suspend fun singleResult(): R - suspend fun resultList(): List - suspend fun singleResultOrNull(): R? - suspend fun executeUpdate(): Int - fun setParameter(position: Int, value: Any?): ReactiveQuery - fun setParameter(name: String, value: Any?): ReactiveQuery - fun setParameter(parameter: Parameter, value: T?): ReactiveQuery - fun setMaxResults(maxResults: Int): ReactiveQuery - fun setFirstResult(firstResult: Int): ReactiveQuery - fun setQueryHint(hintName: String, value: Any) - val maxResults: Int - val firstResult: Int - fun unwrap(type: KClass): T -} diff --git a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/ReactiveQueryExtensions.kt b/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/ReactiveQueryExtensions.kt deleted file mode 100644 index 71e98e228..000000000 --- a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/ReactiveQueryExtensions.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.linecorp.kotlinjdsl.query - -inline fun ReactiveQuery.unwrap(): T = unwrap(T::class) diff --git a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EmptySqlReactiveQueryHintClause.kt b/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EmptySqlReactiveQueryHintClause.kt deleted file mode 100644 index 13b61b9cf..000000000 --- a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/EmptySqlReactiveQueryHintClause.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import com.linecorp.kotlinjdsl.query.clause.hint.EmptySqlReactiveQueryHintClause.Companion.empty -import org.slf4j.LoggerFactory - -@Suppress("UNCHECKED_CAST") -inline fun emptySqlHintClause(): SqlQueryHintClause = empty as SqlQueryHintClause - -class EmptySqlReactiveQueryHintClause : SqlQueryHintClause { - private val log = LoggerFactory.getLogger(EmptySqlReactiveQueryHintClause::class.java) - - companion object { - val empty: SqlQueryHintClause<*> = EmptySqlReactiveQueryHintClause() - } - - override fun apply(query: T) { - log.warn( - "We do not yet support the sql query hint of this jpa implementation. Please contact us through github." - ) - } -} diff --git a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaReactiveQueryHintClauseImpl.kt b/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaReactiveQueryHintClauseImpl.kt deleted file mode 100644 index 6407b082a..000000000 --- a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaReactiveQueryHintClauseImpl.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import com.linecorp.kotlinjdsl.query.ReactiveQuery - -data class JpaReactiveQueryHintClauseImpl( - val hints: Map -) : JpaQueryHintClause> { - override fun apply(query: ReactiveQuery) { - hints.forEach { (hintName, value) -> query.setQueryHint(hintName, value) } - } -} diff --git a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/ReactiveLimitClause.kt b/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/ReactiveLimitClause.kt deleted file mode 100644 index ee6f7d5d4..000000000 --- a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/ReactiveLimitClause.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.limit - -import com.linecorp.kotlinjdsl.query.ReactiveQuery - - -data class ReactiveLimitClause( - private val offset: Int?, - private val maxResults: Int?, -) : QueryLimitClause> { - companion object { - val empty = ReactiveLimitClause(null, null) - - @Suppress("UNCHECKED_CAST") - fun empty(): QueryLimitClause = empty as QueryLimitClause - } - - override fun apply(query: ReactiveQuery) { - offset?.run { query.setFirstResult(this) } - maxResults?.run { query.setMaxResults(this) } - } -} diff --git a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/ReactiveCriteriaQueryCreator.kt b/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/ReactiveCriteriaQueryCreator.kt deleted file mode 100644 index 427d128e7..000000000 --- a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/query/creator/ReactiveCriteriaQueryCreator.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.linecorp.kotlinjdsl.query.creator - -import com.linecorp.kotlinjdsl.query.CriteriaDeleteQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.CriteriaUpdateQuerySpec -import com.linecorp.kotlinjdsl.query.ReactiveQuery - -interface ReactiveCriteriaQueryCreator { - fun createQuery(spec: CriteriaQuerySpec>): ReactiveQuery - fun createQuery(spec: CriteriaUpdateQuerySpec>): ReactiveQuery - fun createQuery(spec: CriteriaDeleteQuerySpec>): ReactiveQuery -} diff --git a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/ReactiveQueryDslImpl.kt b/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/ReactiveQueryDslImpl.kt deleted file mode 100644 index 7a307e3e7..000000000 --- a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/ReactiveQueryDslImpl.kt +++ /dev/null @@ -1,382 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl - -import com.linecorp.kotlinjdsl.query.* -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.CriteriaQueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.clause.groupby.SubqueryGroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.CriteriaQueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.clause.having.SubqueryHavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaReactiveQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.limit.ReactiveLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CriteriaQuerySelectClause -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SubquerySelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.CriteriaQueryWhereClause -import com.linecorp.kotlinjdsl.query.clause.where.SubqueryWhereClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.* -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.OrSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.from.Relation -import com.linecorp.kotlinjdsl.querydsl.hint.SqlReactiveQueryHintClauseProvider -import javax.persistence.criteria.JoinType - -/** - * Internal DSL Implementation - * - * Don't use this directly because it's an **INTERNAL** class. - * It does not support backward compatibility. - * This class should be used with the understanding that it is not thread safe and therefore not suitable for parallel processing. - */ -open class ReactiveQueryDslImpl( - private val returnType: Class, -) : CriteriaQueryDsl, SubqueryDsl, CriteriaUpdateQueryDsl, CriteriaDeleteQueryDsl { - private var singleSelectClause: SingleSelectClause? = null - private var multiSelectClause: MultiSelectClause? = null - private var fromClause: FromClause<*>? = null - private var joins: MutableList>? = null - private var wheres: MutableList? = null - private var groupBys: MutableList>? = null - private var havings: MutableList? = null - private var orderBys: MutableList? = null - private var offset: Int? = null - private var maxResults: Int? = null - private var sqlHints: MutableList? = null - private var jpaHints: MutableMap? = null - private var params: MutableMap, Any?>? = null - - private fun lazyJoins() = (joins ?: mutableListOf>().apply { joins = this }) - private fun lazyWheres() = (wheres ?: mutableListOf().apply { wheres = this }) - private fun lazyGroupBys() = (groupBys ?: mutableListOf>().apply { groupBys = this }) - private fun lazyHavings() = (havings ?: mutableListOf().apply { havings = this }) - private fun lazyOrderBys() = (orderBys ?: mutableListOf().apply { orderBys = this }) - private fun lazySqlHints() = (sqlHints ?: mutableListOf().apply { sqlHints = this }) - private fun lazyJpaHints() = (jpaHints ?: mutableMapOf().apply { jpaHints = this }) - private fun lazyParams() = (params ?: mutableMapOf, Any?>().apply { params = this }) - - override fun select(distinct: Boolean, expression: ExpressionSpec): SingleSelectClause { - return SingleSelectClause( - returnType = returnType, - distinct = distinct, - expression = expression, - ).also { singleSelectClause = it } - } - - override fun select(distinct: Boolean, expressions: List>): MultiSelectClause { - return MultiSelectClause( - returnType = returnType, - distinct = distinct, - expressions = expressions, - ).also { multiSelectClause = it } - } - - override fun from(entity: EntitySpec<*>) { - fromClause = FromClause(entity) - } - - override fun join(left: EntitySpec, right: EntitySpec, relation: Relation, joinType: JoinType) { - lazyJoins().add(SimpleJoinSpec(left = left, right = right, path = relation.path, joinType = joinType)) - } - - override fun join(entity: EntitySpec, predicate: PredicateSpec) { - lazyJoins().add(CrossJoinSpec(entity)) - lazyWheres().add(predicate) - } - - override fun associate( - left: EntitySpec, - right: EntitySpec, - relation: Relation, - joinType: JoinType - ) { - lazyJoins().add(SimpleAssociatedJoinSpec(left = left, right = right, path = relation.path)) - } - - override fun treat( - root: ColumnSpec<*>, - parent: EntitySpec

, - child: EntitySpec, - parentJoinType: JoinType - ) { - lazyJoins().add(TreatJoinSpec(parent, child, parentJoinType, root)) - } - - override fun fetch( - left: EntitySpec, - right: EntitySpec, - relation: Relation, - joinType: JoinType - ) { - lazyJoins().add(FetchJoinSpec(left = left, right = right, path = relation.path, joinType = joinType)) - } - - override fun where(predicate: PredicateSpec?) { - predicate?.run { lazyWheres().add(this) } - } - - override fun whereAnd(predicates: List) { - predicates.filterNotNull() - .takeIf { it.isNotEmpty() } - ?.run { where(AndSpec(this)) } - } - - override fun whereOr(predicates: List) { - predicates.filterNotNull() - .takeIf { it.isNotEmpty() } - ?.run { where(OrSpec(this)) } - } - - override fun groupBy(columns: List>) { - lazyGroupBys().addAll(columns) - } - - override fun having(predicate: PredicateSpec) { - lazyHavings().add(predicate) - } - - override fun orderBy(orders: List) { - lazyOrderBys().addAll(orders) - } - - override fun offset(offset: Int) { - this.offset = offset - } - - override fun maxResults(maxResults: Int) { - this.maxResults = maxResults - } - - override fun sqlHints(hints: List) { - lazySqlHints().addAll(hints) - } - - override fun hints(hints: Map) { - lazyJpaHints().putAll(hints) - } - - override fun setParams(params: Map, Any?>) { - lazyParams().putAll(params) - } - - override fun set(column: ColumnSpec<*>, value: Any?) { - lazyParams()[column] = value - } - - fun createCriteriaQuerySpec(): CriteriaQuerySpec> { - return CriteriaQuerySpecImpl( - select = getCriteriaQuerySelectClause(), - from = getFromClause(), - join = getJoinClause(), - where = getWhereClause(), - groupBy = getGroupByClause(), - having = getHavingClause(), - orderBy = getOrderByClause(), - limit = getLimitClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - ) - } - - @Suppress("UNCHECKED_CAST") - fun createCriteriaUpdateQuerySpec(): CriteriaUpdateQuerySpec> { - return CriteriaUpdateQuerySpecImpl( - targetEntity = returnType, - from = getFromClause() as FromClause, - associate = getSimpleAssociatedJoinClauseOnly(), - where = getWhereClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - set = getSetClause() - ) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getSetClause() = SetClause(params.orEmpty()) - - @Suppress("UNCHECKED_CAST") - fun createCriteriaDeleteQuerySpec(): CriteriaDeleteQuerySpec> { - return CriteriaDeleteQuerySpecImpl( - targetEntity = returnType, - from = getFromClause() as FromClause, - associate = getSimpleAssociatedJoinClauseOnly(), - where = getWhereClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause() - ) - } - - @Suppress("UNCHECKED_CAST") - fun createSubquerySpec(): SubquerySpec { - return SubquerySpecImpl( - select = getSubquerySelectClause(), - from = getFromClause(), - join = getJoinClauseDoesNotHaveFetch(), - where = getWhereClause(), - groupBy = getGroupByClause(), - having = getHavingClause(), - ) - } - - protected fun getCriteriaQuerySelectClause(): CriteriaQuerySelectClause { - mustBe(singleSelectClause != null || multiSelectClause != null) { - "There is no select clause in query" - } - - return singleSelectClause ?: multiSelectClause!! - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getSubquerySelectClause(): SubquerySelectClause { - mustBe(singleSelectClause != null) { "There is no select clause in query" } - - return singleSelectClause!! - } - - protected fun getFromClause(): FromClause<*> { - mustBe(fromClause != null) { "There is no from clause in query" } - - return fromClause!! - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getJoinClause(): JoinClause { - return JoinClause(joins.orEmpty()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getJoinClauseDoesNotHaveFetch(): JoinClause { - mustBe(joins.orEmpty().filterIsInstance>().isEmpty()) { "This query does not support fetch" } - - return getJoinClause() - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getSimpleAssociatedJoinClauseOnly(): SimpleAssociatedJoinClause { - val joins = joins.orEmpty() - return joins.filterIsInstance>().let { - mustBe(it.size == joins.size) { "This query only support associate" } - SimpleAssociatedJoinClause(it) - } - } - - protected fun getWhereClause(): WhereClause { - return WhereClause(wheres.orEmpty().merge()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getGroupByClause(): GroupByClause { - return GroupByClause(groupBys.orEmpty()) - } - - protected fun getEmptyGroupByClause(): GroupByClause { - return GroupByClause(emptyList()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getHavingClause(): HavingClause { - return HavingClause(havings.orEmpty().merge()) - } - - protected fun getEmptyHavingClause(): HavingClause { - return HavingClause(PredicateSpec.empty) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getOrderByClause(): CriteriaQueryOrderByClause { - return OrderByClause(orderBys.orEmpty()) - } - - protected fun getEmptyOrderByClause(): CriteriaQueryOrderByClause { - return OrderByClause.empty - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun getLimitClause(): QueryLimitClause> { - return ReactiveLimitClause(offset, maxResults) - } - - @Suppress("UNCHECKED_CAST") - protected fun getEmptyLimitClause(): QueryLimitClause> { - return ReactiveLimitClause.empty as QueryLimitClause> - } - - protected fun getJpaQueryHintClause(): JpaQueryHintClause> { - return JpaReactiveQueryHintClauseImpl(jpaHints.orEmpty()) - } - - protected fun getSqlQueryHintClause(): SqlQueryHintClause> { - return SqlReactiveQueryHintClauseProvider.provide(sqlHints.orEmpty()) - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun List.merge(): PredicateSpec { - return when { - isEmpty() -> PredicateSpec.empty - size == 1 -> first() - else -> AndSpec(this) - } - } - - @Suppress("MemberVisibilityCanBePrivate") - protected fun mustBe(condition: Boolean, lazyMessage: () -> String) { - if (!condition) { - throw IllegalStateException(lazyMessage()) - } - } - - data class CriteriaQuerySpecImpl( - override val select: CriteriaQuerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: CriteriaQueryWhereClause, - override val groupBy: CriteriaQueryGroupByClause, - override val having: CriteriaQueryHavingClause, - override val orderBy: CriteriaQueryOrderByClause, - override val limit: QueryLimitClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - ) : CriteriaQuerySpec - - data class CriteriaUpdateQuerySpecImpl( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause, - override val set: SetClause - ) : CriteriaUpdateQuerySpec - - data class CriteriaDeleteQuerySpecImpl( - override val targetEntity: Class, - override val from: FromClause, - override val associate: SimpleAssociatedJoinClause, - override val where: CriteriaQueryWhereClause, - override val jpaHint: JpaQueryHintClause, - override val sqlHint: SqlQueryHintClause - ) : CriteriaDeleteQuerySpec - - data class SubquerySpecImpl( - override val select: SubquerySelectClause, - override val from: FromClause<*>, - override val join: JoinClause, - override val where: SubqueryWhereClause, - override val groupBy: SubqueryGroupByClause, - override val having: SubqueryHavingClause - ) : SubquerySpec -} diff --git a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/ReactiveSqlQueryHintClauseFactoryProvider.kt b/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/ReactiveSqlQueryHintClauseFactoryProvider.kt deleted file mode 100644 index fcd457291..000000000 --- a/reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/ReactiveSqlQueryHintClauseFactoryProvider.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.emptySqlHintClause -import org.slf4j.LoggerFactory -import java.util.* - -interface SqlReactiveQueryHintClauseFactoryProvider { - fun factory(): (List) -> SqlQueryHintClause> - - companion object { - private val log = LoggerFactory.getLogger(SqlReactiveQueryHintClauseFactoryProvider::class.java) - val loadedFactory by lazy { - ServiceLoader.load(SqlReactiveQueryHintClauseFactoryProvider::class.java).checkDuplicate().firstOrNull() - ?.factory() - } - - private fun ServiceLoader.checkDuplicate(): ServiceLoader { - takeIf { count() > 1 } - ?.run { log.warn("Duplicate Factory implementation detected") } - return this - } - } -} - -object SqlReactiveQueryHintClauseProvider { - @Suppress("UNCHECKED_CAST") - fun provide(hints: List): SqlQueryHintClause> { - val factory = (SqlReactiveQueryHintClauseFactoryProvider.loadedFactory - ?: { emptySqlHintClause() }) as (List) -> SqlQueryHintClause> - return factory(hints) - } -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryExtensionsTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryExtensionsTest.kt deleted file mode 100644 index e0880ef4b..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryExtensionsTest.kt +++ /dev/null @@ -1,179 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import kotlinx.coroutines.runBlocking -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MockKExtension::class) -internal class ReactiveQueryFactoryExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var queryFactory: ReactiveQueryFactory - - @MockK - private lateinit var query: ReactiveQuery - - @MockK - private lateinit var subqueryExpressionSpec: SubqueryExpressionSpec - - @Test - fun singleQuery() = runBlocking { - // given - every { queryFactory.selectQuery(any(), any()) } returns query - coEvery { query.singleResult() } returns Data1() - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: Data1 = queryFactory.singleQuery(dsl) - - // then - assertThat(actual).isEqualTo(Data1()) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - coVerify(exactly = 1) { - query.singleResult() - } - - confirmVerified(queryFactory, query) - } - - @Test - fun listQuery() = runBlocking { - // given - every { queryFactory.selectQuery(any(), any()) } returns query - coEvery { query.resultList() } returns listOf(Data1()) - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: List = queryFactory.listQuery(dsl) - - // then - assertThat(actual).isEqualTo(listOf(Data1())) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - coVerify(exactly = 1) { - query.resultList() - } - - confirmVerified(queryFactory, query) - } - - @Test - fun selectQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns query - - val dsl: CriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: ReactiveQuery = queryFactory.selectQuery(dsl) - - // then - assertThat(actual).isEqualTo(query) - - verify { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun updateQuery() { - // given - every { queryFactory.updateQuery(any(), any()) } returns query - - val dsl: CriteriaUpdateQueryDsl.() -> Unit = { - set(col(Data1::id), 1) - where(col(Data1::id).equal(2)) - } - - // when - val actual: ReactiveQuery = queryFactory.updateQuery(dsl) - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - queryFactory.updateQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun deleteQuery() { - // given - every { queryFactory.deleteQuery(any(), any()) } returns query - - val dsl: CriteriaDeleteQueryDsl.() -> Unit = { - where(col(Data1::id).equal(1)) - } - - // when - val actual: ReactiveQuery = queryFactory.deleteQuery(dsl) - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - queryFactory.deleteQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun subquery() { - // given - every { queryFactory.subquery(any(), any()) } returns subqueryExpressionSpec - - val dsl: SubqueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: SubqueryExpressionSpec = queryFactory.subquery(dsl) - - // then - assertThat(actual).isEqualTo(subqueryExpressionSpec) - - verify(exactly = 1) { - queryFactory.subquery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - data class Data1( - val id: Int = 100 - ) -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryImplTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryImplTest.kt deleted file mode 100644 index f2f883931..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/ReactiveQueryFactoryImplTest.kt +++ /dev/null @@ -1,187 +0,0 @@ -package com.linecorp.kotlinjdsl - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaReactiveQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.emptySqlHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.ReactiveLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.creator.ReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.EqualValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MockKExtension::class) -internal class ReactiveQueryFactoryImplTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: ReactiveQueryFactoryImpl - - @MockK - private lateinit var criteriaQueryCreator: ReactiveCriteriaQueryCreator - - @MockK - private lateinit var subqueryCreator: SubqueryCreator - - @Test - fun selectQuery() { - // given - val query: ReactiveQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>>()) } returns query - - // when - val actual = sut.selectQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - val actualSelectQuery = sut.selectQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - assertThat(actual).isEqualTo(query) - assertThat(actualSelectQuery).isEqualTo(query) - - verify(exactly = 2) { - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = ReactiveLimitClause.empty(), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun updateQuery() { - // given - val query: ReactiveQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>>()) } returns query - - // when - val actual = sut.updateQuery(Data1::class) { - where(col(Data1::id).equal(1)) - set(col(Data1::id), 2) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl.CriteriaUpdateQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - set = SetClause(mapOf(columnSpec to 2)), - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun deleteQuery() { - // given - val query: ReactiveQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>>()) } returns query - - // when - val actual = sut.deleteQuery(Data1::class) { - where(col(Data1::id).equal(1)) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl.CriteriaDeleteQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun subquery() { - // when - val actual = sut.subquery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - val subquerySpec = ReactiveQueryDslImpl.SubquerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - ) - - assertThat(actual).isEqualTo(SubqueryExpressionSpec(subquerySpec, subqueryCreator)) - } - - data class Data1( - val id: Int = 1 - ) -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaReactiveQueryHintClauseImplTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaReactiveQueryHintClauseImplTest.kt deleted file mode 100644 index 32d685368..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/hint/JpaReactiveQueryHintClauseImplTest.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.hint - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertDoesNotThrow -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MockKExtension::class) -internal class JpaReactiveQueryHintClauseImplTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: ReactiveQuery - - @Test - fun apply() { - // given - val hints = mapOf( - "cacheable" to true, - "sql.hint" to "index" - ) - - every { query.setQueryHint(any(), any()) } just runs - - // when - JpaReactiveQueryHintClauseImpl(hints).apply(query) - - // then - verify(exactly = 1) { - query.setQueryHint("cacheable", true) - query.setQueryHint("sql.hint", "index") - } - - confirmVerified(query) - } - - @Test - fun empty() { - assertDoesNotThrow { emptySqlHintClause().apply(Any()) } - } -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/ReactiveLimitClauseTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/ReactiveLimitClauseTest.kt deleted file mode 100644 index fce695dc5..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/query/clause/limit/ReactiveLimitClauseTest.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.query.clause.limit - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith - -@ExtendWith(MockKExtension::class) -internal class ReactiveLimitClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: ReactiveQuery - - @Test - fun apply() { - // given - val offset = 10 - val maxResults = 20 - - every { query.setFirstResult(10) } returns query - every { query.setMaxResults(20) } returns query - - // when - ReactiveLimitClause(offset, maxResults).apply(query) - - // then - verify(exactly = 1) { - query.setFirstResult(offset) - query.setMaxResults(maxResults) - } - - confirmVerified(query) - } - - @Test - fun `apply - null`() { - // given - val offset: Int? = null - val maxResults: Int? = null - - // when - ReactiveLimitClause(offset, maxResults).apply(query) - - // then - confirmVerified(query) - } -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ReactiveQueryDslImplExpressionTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ReactiveQueryDslImplExpressionTest.kt deleted file mode 100644 index cb7d20ec7..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ReactiveQueryDslImplExpressionTest.kt +++ /dev/null @@ -1,364 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.* -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplExpressionTest : WithKotlinJdslAssertions { - @Test - fun entity() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class) - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java)) - } - - @Test - fun entityWithAlias() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class, "data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun alias() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = Data1::class.alias("data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun literal() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = literal(10) - } - - assertThat(actual).isEqualTo(LiteralSpec(10)) - } - - @Test - fun nullLiteral() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = nullLiteral(Int::class.java) - } - - assertThat(actual).isEqualTo(NullLiteralSpec(Int::class.java)) - } - - @Test - fun col() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = col(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun column() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = column(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun max() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = max(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MaxSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun min() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = min(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MinSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun avg() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = avg(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - AvgSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun sum() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = sum(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - SumSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun count() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = count(distinct = true, col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countNonDistinct() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = count(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countDistinct() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = countDistinct(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun greatest() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = greatest(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - GreatestSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun least() { - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = least(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - LeastSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun caseList() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = case( - listOf( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - ), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun caseVararg() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = case( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun `when`() { - val predicate1: PredicateSpec = mockk() - val expression1: ExpressionSpec = mockk() - - val actual: CaseSpec.WhenSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1, expression1) - } - - assertThat(actual).isEqualTo(CaseSpec.WhenSpec(predicate1, expression1)) - } - - @Test - fun whenWithPredicate() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1) - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - @Test - fun whenWithLambda() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = `when` { predicate1 } - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - @Test - fun functionVarArg() { - // when - val actual: FunctionSpec - ReactiveQueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - @Test - fun functionList() { - // when - val actual: FunctionSpec - ReactiveQueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - listOf( - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - class Data1 { - val id: Int = 10 - } -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplFetchTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplFetchTest.kt deleted file mode 100644 index b50e96d94..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplFetchTest.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.spec.FetchJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import javax.persistence.criteria.JoinType - -internal class ReactiveQueryDslImplFetchTest : WithKotlinJdslAssertions { - @Test - fun fetch() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - fetch(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val fetchSpec = FetchJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(fetchSpec, fetchSpec, fetchSpec, fetchSpec)) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("This query does not support fetch") - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplFromTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplFromTest.kt deleted file mode 100644 index 93f828586..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplFromTest.kt +++ /dev/null @@ -1,77 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplFromTest : WithKotlinJdslAssertions { - @Test - fun fromJavaClass() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromKotlinClass() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromEntitySpec() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class, "data1")) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - } - - class Data1 -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplJoinTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplJoinTest.kt deleted file mode 100644 index 4480c4b1b..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplJoinTest.kt +++ /dev/null @@ -1,253 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.CrossJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleAssociatedJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleJoinSpec -import com.linecorp.kotlinjdsl.query.spec.TreatJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.employee.Employee -import com.linecorp.kotlinjdsl.test.entity.employee.FullTimeEmployee -import com.linecorp.kotlinjdsl.test.entity.employee.Project -import io.mockk.mockk -import org.junit.jupiter.api.Test -import java.math.BigDecimal -import javax.persistence.criteria.JoinType - -internal class ReactiveQueryDslImplJoinTest : WithKotlinJdslAssertions { - @Test - fun on() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = on(predicateSpec) - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun onLambda() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = on { predicateSpec } - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun join() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun associate() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun treat() { - // when - val actual = ReactiveQueryDslImpl(FullTimeEmployee::class.java).apply { - val project: EntitySpec = Project::class.alias("project") - val fullTimeEmployee = FullTimeEmployee::class.alias("fe") - val employee = Employee::class.alias("e") - - selectDistinct(fullTimeEmployee) - from(project) - treat( - root = ColumnSpec(entity = project, path = Project::employees.name), - parent = employee, - child = fullTimeEmployee, - parentJoinType = JoinType.RIGHT - ) - where( - ColumnSpec(fullTimeEmployee, FullTimeEmployee::annualSalary.name) - .greaterThan(100000.toBigDecimal()) - ) - } - - // then - val joinSpec = TreatJoinSpec( - left = EntitySpec(Employee::class.java, "e"), - right = EntitySpec(FullTimeEmployee::class.java, "fe"), - joinType = JoinType.RIGHT, - root = ColumnSpec(EntitySpec(Project::class.java, "project"), Project::employees.name), - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec)) - ) - } - - @Test - fun updateAssociate() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaUpdateQuerySpec() - - assertThat(criteriaQuerySpec.associate).isEqualTo( - SimpleAssociatedJoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun updateAssociateOnlyAllowsSimpleAssociatedJoinSpec() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2)) - } - - val result = catchThrowable(IllegalStateException::class) { actual.createCriteriaUpdateQuerySpec() } - - assertThat(result).hasMessage("This query only support associate") - } - - @Test - fun crossJoin() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(Data2::class, on(predicateSpec1)) - join(entity(Data2::class), on(predicateSpec1)) - where(predicateSpec2) - } - - // then - val joinSpec = CrossJoinSpec(EntitySpec(Data2::class.java)) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplRelationTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplRelationTest.kt deleted file mode 100644 index 4b98c2fd5..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/from/ReactiveQueryDslImplRelationTest.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.from - -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplRelationTest : WithKotlinJdslAssertions { - @Test - fun on() { - val actual: Relation - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2) - } - - assertThat(actual).isEqualTo(Relation("data2")) - } - - @Test - fun onCollection() { - val actual: Relation - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2List) - } - - assertThat(actual).isEqualTo(Relation("data2List")) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/ReactiveQueryDslImplGroupByTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/ReactiveQueryDslImplGroupByTest.kt deleted file mode 100644 index 126b69b87..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/groupby/ReactiveQueryDslImplGroupByTest.kt +++ /dev/null @@ -1,88 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.groupby - -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplGroupByTest : WithKotlinJdslAssertions { - @Test - fun noGroupBy() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - @Test - fun groupByVararg() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(columnSpec1, columnSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - } - - @Test - fun groupByList() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(listOf(columnSpec1, columnSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - } - - class Data1 -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/having/ReactiveQueryDslImplHavingTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/having/ReactiveQueryDslImplHavingTest.kt deleted file mode 100644 index 47928a22c..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/having/ReactiveQueryDslImplHavingTest.kt +++ /dev/null @@ -1,89 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.having - -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplHavingTest : WithKotlinJdslAssertions { - @Test - fun noHaving() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - @Test - fun having() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - } - - @Test - fun multipleHaving() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec1) - having(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - class Data1 -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/ReactiveQueryDslImplHintTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/ReactiveQueryDslImplHintTest.kt deleted file mode 100644 index ec5f9c872..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/hint/ReactiveQueryDslImplHintTest.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.hint - -import com.linecorp.kotlinjdsl.query.clause.hint.JpaReactiveQueryHintClauseImpl -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplHintTest : WithKotlinJdslAssertions { - @Test - fun noHints() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaReactiveQueryHintClauseImpl(emptyMap()) - ) - } - - @Test - fun hintsVararg() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints("hint1" to true, "hint2" to "comment") - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaReactiveQueryHintClauseImpl( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - ) - } - - @Test - fun hintsMap() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints(mapOf("hint1" to true, "hint2" to "comment")) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaReactiveQueryHintClauseImpl( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - ) - } - - class Data1 -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/ReactiveQueryDslImplLimitTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/ReactiveQueryDslImplLimitTest.kt deleted file mode 100644 index 42dee8956..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/limit/ReactiveQueryDslImplLimitTest.kt +++ /dev/null @@ -1,97 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.limit - -import com.linecorp.kotlinjdsl.query.clause.limit.ReactiveLimitClause -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplLimitTest : WithKotlinJdslAssertions { - @Test - fun noLimit() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = null, maxResults = null) - ) - } - - @Test - fun offset() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - offset(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = 10, maxResults = null) - ) - } - - @Test - fun maxResults() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - maxResults(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = null, maxResults = 10) - ) - } - - @Test - fun limitMaxResults() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = null, maxResults = 10) - ) - } - - @Test - fun limitOffsetAndMaxResults() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(1, 10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = 1, maxResults = 10) - ) - } - - class Data1 { - val id: String = "test" - val name: String = "test_name" - } -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/ReactiveQueryDslImplOrderByWhereTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/ReactiveQueryDslImplOrderByWhereTest.kt deleted file mode 100644 index fa220d54f..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/orderby/ReactiveQueryDslImplOrderByWhereTest.kt +++ /dev/null @@ -1,98 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.orderby - -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.spec.ExpressionOrderSpec -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplOrderByWhereTest : WithKotlinJdslAssertions { - @Test - fun noOrderBy() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun orderByVararg() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(orderSpec1, orderSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - } - - @Test - fun orderByList() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(listOf(orderSpec1, orderSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - } - - @Test - fun asc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.asc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, true)) - } - - @Test - fun desc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - ReactiveQueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.desc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, false)) - } - - class Data1 -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/ReactiveQueryDslImplPredicateTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/ReactiveQueryDslImplPredicateTest.kt deleted file mode 100644 index 88c1022e1..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/predicate/ReactiveQueryDslImplPredicateTest.kt +++ /dev/null @@ -1,473 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.* -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplPredicateTest : WithKotlinJdslAssertions { - @Test - fun not() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = not(predicateSpec) - } - - assertThat(actual).isEqualTo(NotSpec(predicateSpec)) - } - - @Test - fun andVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = and(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun andList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = and(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = or(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = or(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun equalValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.equal(value) - } - - assertThat(actual).isEqualTo(EqualValueSpec(expressionSpec, value)) - } - - @Test - fun equalExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.equal(expressionSpec2) - } - - assertThat(actual).isEqualTo(EqualExpressionSpec(expressionSpec1, expressionSpec2)) - } - - @Test - fun notEqualValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.notEqual(value) - } - - assertThat(actual).isEqualTo(NotSpec(EqualValueSpec(expressionSpec, value))) - } - - @Test - fun notEqualExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.notEqual(expressionSpec2) - } - - assertThat(actual).isEqualTo(NotSpec(EqualExpressionSpec(expressionSpec1, expressionSpec2))) - } - - @Test - fun inValueVararg() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(value1, value2) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inValueList() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(listOf(value1, value2)) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inExpressionVararg() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun inExpressionList() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(listOf(expressionSpec2, expressionSpec3)) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun greaterThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun greaterThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun greaterThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun greaterThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun lessThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun lessThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun betweenValue() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(value1, value2) - } - - assertThat(actual).isEqualTo(BetweenValueSpec(expressionSpec, value1, value2)) - } - - @Test - fun betweenExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.between(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(BetweenExpressionSpec(expressionSpec1, expressionSpec2, expressionSpec3)) - } - - @Test - fun isTrue() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isTrue() - } - - assertThat(actual).isEqualTo(IsTrueSpec(expressionSpec)) - } - - @Test - fun isFalse() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isFalse() - } - - assertThat(actual).isEqualTo(IsFalseSpec(expressionSpec)) - } - - @Test - fun isNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNull() - } - - assertThat(actual).isEqualTo(IsNullSpec(expressionSpec)) - } - - @Test - fun isNotNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNotNull() - } - - assertThat(actual).isEqualTo(NotSpec(IsNullSpec(expressionSpec))) - } - - @Test - fun like() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.like(value) - } - - assertThat(actual).isEqualTo(LikeSpec(expressionSpec, value)) - } - - @Test - fun notLike() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - ReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.notLike(value) - } - - assertThat(actual).isEqualTo(NotSpec(LikeSpec(expressionSpec, value))) - } -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/ReactiveQueryDslImplMultiSelectTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/ReactiveQueryDslImplMultiSelectTest.kt deleted file mode 100644 index 18257423b..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/ReactiveQueryDslImplMultiSelectTest.kt +++ /dev/null @@ -1,253 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplMultiSelectTest : WithKotlinJdslAssertions { - @Test - fun select() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - select(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectNonDistinct() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - select(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectDistinct() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - selectDistinct(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMulti() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - selectMulti(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiNonDistinctVararg() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - selectMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiNonDistinctList() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - selectMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiDistinctVararg() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - selectDistinctMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectMultiDistinctList() { - // when - val actual = ReactiveQueryDslImpl(Row::class.java).apply { - selectDistinctMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - } - - data class Row( - val id: String, - val name: String, - ) - - class Data1 { - val id: String = "test" - val name: String = "test_name" - } -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/ReactiveQueryDslImplSingleSelectTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/ReactiveQueryDslImplSingleSelectTest.kt deleted file mode 100644 index 001455726..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/select/ReactiveQueryDslImplSingleSelectTest.kt +++ /dev/null @@ -1,168 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplSingleSelectTest : WithKotlinJdslAssertions { - @Test - fun noSelect() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - from(entity(Data1::class)) - } - - // then - val exception1 = catchThrowable(IllegalStateException::class) { - actual.createCriteriaQuerySpec() - } - - assertThat(exception1).hasMessageContaining("There is no select clause in query") - - val exception2 = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception2).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectEntity() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectExpression() { - // when - val actual = ReactiveQueryDslImpl(String::class.java).apply { - select(distinct = true, column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectNonDistinctEntity() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectNonDistinctExpression() { - // when - val actual = ReactiveQueryDslImpl(String::class.java).apply { - select(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectDistinctEntity() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - selectDistinct(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectDistinctExpression() { - // when - val actual = ReactiveQueryDslImpl(String::class.java).apply { - selectDistinct(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - class Data1 { - val id: String = "test" - } -} diff --git a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/where/ReactiveQueryDslImplWhereTest.kt b/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/where/ReactiveQueryDslImplWhereTest.kt deleted file mode 100644 index f0695bab7..000000000 --- a/reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/querydsl/where/ReactiveQueryDslImplWhereTest.kt +++ /dev/null @@ -1,275 +0,0 @@ -package com.linecorp.kotlinjdsl.querydsl.where - -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.OrSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class ReactiveQueryDslImplWhereTest : WithKotlinJdslAssertions { - @Test - fun noWhere() { - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - } - - @Test - fun nullInWhere() { - // given - val predicateSpec: PredicateSpec? = null - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - } - - @Test - fun where() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - } - - @Test - fun whereAndVararg() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereAnd(nullPredicateSpec, predicateSpec1, predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun whereAndList() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereAnd(listOf(nullPredicateSpec, predicateSpec1, predicateSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun whereOrVararg() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereOr(nullPredicateSpec, predicateSpec1, predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun whereOrList() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - whereOr(listOf(nullPredicateSpec, predicateSpec1, predicateSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(OrSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun wheres() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec1) - where(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - @Test - fun allTypeWheres() { - // given - val nullPredicateSpec: PredicateSpec? = null - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = ReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(nullPredicateSpec) - where(predicateSpec1) - whereAnd(nullPredicateSpec, predicateSpec1, predicateSpec2) - whereOr(nullPredicateSpec, predicateSpec1, predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause( - AndSpec( - listOf( - predicateSpec1, - AndSpec(listOf(predicateSpec1, predicateSpec2)), - OrSpec(listOf(predicateSpec1, predicateSpec2)) - ) - ) - ) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause( - AndSpec( - listOf( - predicateSpec1, - AndSpec(listOf(predicateSpec1, predicateSpec2)), - OrSpec(listOf(predicateSpec1, predicateSpec2)) - ) - ) - ) - ) - } - - class Data1 -} diff --git a/render/build.gradle.kts b/render/build.gradle.kts new file mode 100644 index 000000000..418ed5b51 --- /dev/null +++ b/render/build.gradle.kts @@ -0,0 +1,3 @@ +dependencies { + api(projects.query) +} diff --git a/renovate.json b/renovate.json deleted file mode 100644 index 39a2b6e9a..000000000 --- a/renovate.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:base" - ] -} diff --git a/settings.gradle.kts b/settings.gradle.kts index 31cee03e9..ca13ad321 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,78 +1,17 @@ rootProject.name = "kotlin-jdsl" -val modules: MutableList = mutableListOf() +// Module +module(name = ":module", path = "module") -fun module(name: String, path: String) { - modules.add(Module(name, "${rootDir}/${path}")) -} - -data class Module( - val name: String, - val path: String, -) - -// CORE -module(name = ":kotlin-jdsl-core", path = "core") -module(name = ":kotlin-jdsl-reactive-core", path = "reactive-core") -module(name = ":hibernate-kotlin-jdsl", path = "hibernate") -module(name = ":hibernate-reactive-kotlin-jdsl", path = "hibernate-reactive") -module(name = ":eclipselink-kotlin-jdsl", path = "eclipselink") -module(name = ":kotlin-jdsl-query", path = "query") - -// SPRING -module(name = ":spring", path = "spring") -module(name = ":spring-data-kotlin-jdsl-core", path = "spring/data-core") -module(name = ":spring-data-kotlin-jdsl-reactive-core", path = "spring/data-reactive-core") -module(name = ":spring-data-kotlin-jdsl-hibernate-reactive", path = "spring/data-hibernate-reactive") -module(name = ":spring-batch-kotlin-jdsl-infrastructure", path = "spring/batch-infrastructure") -module(name = ":spring-data-kotlin-jdsl-autoconfigure", path = "spring/data-autoconfigure") -module(name = ":spring-data-kotlin-jdsl-starter", path = "spring/data-starter") +module(name = ":dsl", path = "dsl") -// TEST FIXTURE -module(name = ":test-fixture-core", path = "test-fixture/core") -module(name = ":test-fixture-entity", path = "test-fixture/entity") -module(name = ":test-fixture-integration", path = "test-fixture/integration") -module(name = ":test-fixture-integration-reactive", path = "test-fixture/integration-reactive") -module(name = ":test-fixture-hibernate-reactive", path = "test-fixture/hibernate-reactive") +module(name = ":query", path = "query") -// EXAMPLES -module(name = ":hibernate-example", path = "examples/hibernate") -module(name = ":eclipselink-example", path = "examples/eclipselink") -module(name = ":spring-data-boot-2.6-example", path = "examples/spring-boot-2.6") -module(name = ":spring-data-boot-2.7-example", path = "examples/spring-boot-2.7") -module(name = ":spring-data-boot-3-example", path = "examples/spring-boot-3") -module(name = ":spring-data-boot-hibernate-reactive-2.6-example", path = "examples/spring-boot-hibernate-reactive-2.6") -module(name = ":spring-data-boot-hibernate-reactive-2.7-example", path = "examples/spring-boot-hibernate-reactive-2.7") -module(name = ":spring-data-boot-hibernate-reactive-3-example", path = "examples/spring-boot-hibernate-reactive-3") -module(name = ":spring-data-boot-2.5-example", path = "examples/spring-boot-2.5") -module(name = ":spring-data-boot-2.4-example", path = "examples/spring-boot-2.4") +module(name = ":render", path = "render") -// Jakarta -module(name = ":kotlin-jdsl-core-jakarta", path = "core-jakarta") -module(name = ":kotlin-jdsl-reactive-core-jakarta", path = "reactive-core-jakarta") -module(name = ":kotlin-jdsl-query-jakarta", path = "query-jakarta") -module(name = ":hibernate-kotlin-jdsl-jakarta", path = "hibernate-jakarta") -module(name = ":hibernate-reactive-kotlin-jdsl-jakarta", path = "hibernate-reactive-jakarta") -module(name = ":eclipselink-kotlin-jdsl-jakarta", path = "eclipselink-jakarta") - -// Jakarta - Spring -module(name = ":spring-data-kotlin-jdsl-core-jakarta", path = "spring/data-core-jakarta") -module(name = ":spring-batch-kotlin-jdsl-infrastructure-jakarta", path = "spring/batch-infrastructure-jakarta") -module(name = ":spring-data-kotlin-jdsl-autoconfigure-jakarta", path = "spring/data-autoconfigure-jakarta") -module(name = ":spring-data-kotlin-jdsl-starter-jakarta", path = "spring/data-starter-jakarta") -module(name = ":spring-data-kotlin-jdsl-reactive-core-jakarta", path = "spring/data-reactive-core-jakarta") -module(name = ":spring-data-kotlin-jdsl-hibernate-reactive-jakarta", path = "spring/data-hibernate-reactive-jakarta") - -module(name = ":test-fixture-integration-jakarta", path = "test-fixture/integration-jakarta") -module(name = ":test-fixture-entity-jakarta", path = "test-fixture/entity-jakarta") -module(name = ":test-fixture-integration-reactive-jakarta", path = "test-fixture/integration-reactive-jakarta") -module(name = ":test-fixture-hibernate-reactive-jakarta", path = "test-fixture/hibernate-reactive-jakarta") - -modules.forEach { - include(it.name) - project(it.name).projectDir = file(it.path) -} +module(name = ":executor", path = "executor") +// Version Catalog dependencyResolutionManagement { versionCatalogs { create("libs") { @@ -80,3 +19,16 @@ dependencyResolutionManagement { } } } + +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") + + + + + + +// Util +fun module(name: String, path: String) { + include(name) + project(name).projectDir = file(path) +} diff --git a/spring/README.md b/spring/README.md deleted file mode 100644 index ae5edb762..000000000 --- a/spring/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# Spring Data Kotlin JDSL - -Integrates Kotlin JDSL with Spring Data JPA. - -## Quick start - JPA 2.2 - -Add Spring Data Kotlin JDSL starter and Spring Boot Data JPA - -```kotlin -dependencies { - implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-starter:x.y.z") - implementation("org.springframework.boot:spring-boot-starter-data-jpa:x.y.z") -} -``` - -kotlin-jdsl's spring boot starter is adopted hibernate as the default implementation of kotlin-jdsl, so to use eclipselink, you need to modify the build script as follows. - -```kotlin -dependencies { - implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-starter:x.y.z") { - exclude(group = "com.linecorp.kotlin-jdsl", module = "hibernate-kotlin-jdsl") - } - implementation("com.linecorp.kotlin-jdsl:eclipselink-kotlin-jdsl:x.y.z") - implementation("org.eclipse.persistence:org.eclipse.persistence.jpa:x.y.z") -} -``` - -Inject SpringDataQueryFactory in your service and query using it - -```kotlin -@Service -@Transactional -class Service( - private val queryFactory: SpringDataQueryFactory, -) { - fun findById(id: Long): Book { - return queryFactory.singleQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::id).equal(id)) - } - } -} -``` - -## Quick start - JPA 3.0 - -Add Spring Data Kotlin JDSL starter and Spring Boot Data JPA - -```kotlin -dependencies { - implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-starter-jakarta:x.y.z") - implementation("org.springframework.boot:spring-boot-starter-data-jpa:3.y.z") // up to 3 -} -``` - -kotlin-jdsl's spring boot starter is adopted hibernate as the default implementation of kotlin-jdsl, so to use eclipselink, you need to modify the build script as follows. - -```kotlin -dependencies { - implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-starter-jakarta:x.y.z") { - exclude(group = "com.linecorp.kotlin-jdsl", module = "hibernate-kotlin-jdsl-jakarta") - } - implementation("com.linecorp.kotlin-jdsl:eclipselink-kotlin-jdsl-jakarta:x.y.z") - implementation("org.eclipse.persistence:org.eclipse.persistence.jpa:4.y.z") // up to 4 -} -``` - -Inject SpringDataQueryFactory in your service and query using it - -```kotlin -@Service -@Transactional -class Service( - private val queryFactory: SpringDataQueryFactory, -) { - fun findById(id: Long): Book { - return queryFactory.singleQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::id).equal(id)) - } - } -} -``` diff --git a/spring/batch-infrastructure-jakarta/build.gradle.kts b/spring/batch-infrastructure-jakarta/build.gradle.kts deleted file mode 100644 index 292c9cb13..000000000 --- a/spring/batch-infrastructure-jakarta/build.gradle.kts +++ /dev/null @@ -1,24 +0,0 @@ -apply() - -dependencies { - compileOnly(Modules.coreJakarta) - compileOnly(Modules.springDataCoreJakarta) - compileOnly(libs.jakarta.persistence.api) - compileOnly(libs.spring6.beans) - compileOnly(libs.spring.batch5.infrastructure) - - testImplementation(Modules.coreJakarta) - testImplementation(Modules.springDataCoreJakarta) - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntityJakarta) - testImplementation(libs.jakarta.persistence.api) - testImplementation(libs.h2) - testImplementation(libs.spring6.beans) - testImplementation(libs.spring.batch5.infrastructure) - testImplementation(libs.spring.boot3.jpa) - testImplementation(libs.spring.boot3.test) -} - -coverage { - exclude(project) -} diff --git a/spring/batch-infrastructure-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProvider.kt b/spring/batch-infrastructure-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProvider.kt deleted file mode 100644 index 7ca8b4c5c..000000000 --- a/spring/batch-infrastructure-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProvider.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.batch.item.database.orm - -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreatorImpl -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactory -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactoryImpl -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataCriteriaQueryDsl -import com.linecorp.kotlinjdsl.spring.data.selectQuery -import org.springframework.batch.item.database.orm.JpaQueryProvider -import jakarta.persistence.EntityManager -import jakarta.persistence.Query - -class KotlinJdslQueryProvider( - private val createQuery: (queryFactory: SpringDataQueryFactory) -> Query -) : JpaQueryProvider { - companion object { - inline fun typedQuery( - noinline dsl: SpringDataCriteriaQueryDsl.() -> Unit - ): KotlinJdslQueryProvider { - return KotlinJdslQueryProvider { it.selectQuery(dsl) } - } - } - - private var entityManager: EntityManager? = null - - private val queryFactory: SpringDataQueryFactory by lazy(LazyThreadSafetyMode.NONE) { - if (entityManager == null) { - throw IllegalStateException("There is no entityManager. Please set entityManager before create query") - } - - SpringDataQueryFactoryImpl( - criteriaQueryCreator = CriteriaQueryCreatorImpl(entityManager!!), - subqueryCreator = SubqueryCreatorImpl(), - ) - } - - override fun createQuery(): Query { - return createQuery(queryFactory) - } - - override fun setEntityManager(entityManager: EntityManager) { - this.entityManager = entityManager - } -} diff --git a/spring/batch-infrastructure-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/TestApplication.kt b/spring/batch-infrastructure-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/TestApplication.kt deleted file mode 100644 index a75188eb3..000000000 --- a/spring/batch-infrastructure-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/TestApplication.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.batch - -import org.springframework.boot.autoconfigure.SpringBootApplication - -@SpringBootApplication -class TestApplication diff --git a/spring/batch-infrastructure-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProviderIntegrationTest.kt b/spring/batch-infrastructure-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProviderIntegrationTest.kt deleted file mode 100644 index 13cff3ae5..000000000 --- a/spring/batch-infrastructure-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProviderIntegrationTest.kt +++ /dev/null @@ -1,67 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.batch.item.database.orm - -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.EntityDsl -import com.linecorp.kotlinjdsl.test.entity.order.Order -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.springframework.batch.item.ExecutionContext -import org.springframework.batch.item.database.builder.JpaCursorItemReaderBuilder -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.autoconfigure.domain.EntityScan -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest -import jakarta.persistence.EntityManagerFactory - -@DataJpaTest -@EntityScan("com.linecorp.kotlinjdsl.test.entity") -internal open class KotlinJdslQueryProviderIntegrationTest : EntityDsl, WithKotlinJdslAssertions { - @Autowired - private lateinit var entityManagerFactory: EntityManagerFactory - - private val order1 = order { purchaserId = 1000 } - private val order2 = order { purchaserId = 2000 } - private val order3 = order { purchaserId = 1000 } - private val order4 = order { purchaserId = 1000 } - - @BeforeEach - fun setUp() { - val entityManager = entityManagerFactory.createEntityManager() - - entityManager.transaction.run { - begin() - sequenceOf(order1, order2, order3, order4).forEach { - entityManager.persist(it) - entityManager.flush() - } - commit() - } - - entityManager.close() - } - - @Test - fun test() { - // when - val queryProvider = KotlinJdslQueryProvider.typedQuery { - select(col(Order::id)) - from(Order::class) - where(col(Order::purchaserId).equal(1000)) - orderBy(col(Order::id).asc()) - } - - val reader = JpaCursorItemReaderBuilder() - .entityManagerFactory(entityManagerFactory) - .name("testReader") - .queryProvider(queryProvider) - .build() - - @Suppress("DEPRECATION") - reader.open(ExecutionContext()) - - // then - assertThat(reader.read()!!).isEqualTo(order1.id) - assertThat(reader.read()!!).isEqualTo(order3.id) - assertThat(reader.read()!!).isEqualTo(order4.id) - } -} diff --git a/spring/batch-infrastructure-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProviderTest.kt b/spring/batch-infrastructure-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProviderTest.kt deleted file mode 100644 index 111e4831b..000000000 --- a/spring/batch-infrastructure-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProviderTest.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.batch.item.database.orm - -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactory -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import jakarta.persistence.EntityManager -import jakarta.persistence.Query - -@ExtendWith(MockKExtension::class) -internal class KotlinJdslQueryProviderTest : WithKotlinJdslAssertions { - @MockK - private lateinit var entityManager: EntityManager - - @Test - fun createQuery() { - // given - val query: Query = mockk() - - val createQuery: (SpringDataQueryFactory) -> Query = { - query - } - - // when - val actual = KotlinJdslQueryProvider(createQuery).apply { - setEntityManager(entityManager) - }.createQuery() - - // then - assertThat(actual).isEqualTo(query) - } - - @Test - fun `createQuery - if there is no entityManager before call createQuery then throw exception`() { - // given - val createQuery: (SpringDataQueryFactory) -> Query = { - mockk() - } - - // when - val exception = catchThrowable(IllegalStateException::class) { - KotlinJdslQueryProvider(createQuery).createQuery() - } - - // then - assertThat(exception) - .hasMessageContaining("There is no entityManager. Please set entityManager before create query") - } -} diff --git a/spring/batch-infrastructure/build.gradle.kts b/spring/batch-infrastructure/build.gradle.kts deleted file mode 100644 index de93bd0de..000000000 --- a/spring/batch-infrastructure/build.gradle.kts +++ /dev/null @@ -1,20 +0,0 @@ -apply() - -dependencies { - compileOnly(Modules.core) - compileOnly(Modules.springDataCore) - compileOnly(libs.java.persistence.api) - compileOnly(libs.spring.beans) - compileOnly(libs.spring.batch.infrastructure) - - testImplementation(Modules.core) - testImplementation(Modules.springDataCore) - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntity) - testImplementation(libs.java.persistence.api) - testImplementation(libs.h2) - testImplementation(libs.spring.beans) - testImplementation(libs.spring.batch.infrastructure) - testImplementation(libs.spring.boot.jpa) - testImplementation(libs.spring.boot.test) -} diff --git a/spring/batch-infrastructure/src/main/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProvider.kt b/spring/batch-infrastructure/src/main/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProvider.kt deleted file mode 100644 index bd440819c..000000000 --- a/spring/batch-infrastructure/src/main/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProvider.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.batch.item.database.orm - -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreatorImpl -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactory -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactoryImpl -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataCriteriaQueryDsl -import com.linecorp.kotlinjdsl.spring.data.selectQuery -import org.springframework.batch.item.database.orm.JpaQueryProvider -import javax.persistence.EntityManager -import javax.persistence.Query - -class KotlinJdslQueryProvider( - private val createQuery: (queryFactory: SpringDataQueryFactory) -> Query -) : JpaQueryProvider { - companion object { - inline fun typedQuery( - noinline dsl: SpringDataCriteriaQueryDsl.() -> Unit - ): KotlinJdslQueryProvider { - return KotlinJdslQueryProvider { it.selectQuery(dsl) } - } - } - - private var entityManager: EntityManager? = null - - private val queryFactory: SpringDataQueryFactory by lazy(LazyThreadSafetyMode.NONE) { - if (entityManager == null) { - throw IllegalStateException("There is no entityManager. Please set entityManager before create query") - } - - SpringDataQueryFactoryImpl( - criteriaQueryCreator = CriteriaQueryCreatorImpl(entityManager!!), - subqueryCreator = SubqueryCreatorImpl(), - ) - } - - override fun createQuery(): Query { - return createQuery(queryFactory) - } - - override fun setEntityManager(entityManager: EntityManager) { - this.entityManager = entityManager - } -} diff --git a/spring/batch-infrastructure/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/TestApplication.kt b/spring/batch-infrastructure/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/TestApplication.kt deleted file mode 100644 index ff68aa71e..000000000 --- a/spring/batch-infrastructure/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/TestApplication.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.batch - -import org.springframework.boot.autoconfigure.SpringBootApplication - -@SpringBootApplication -class TestApplication \ No newline at end of file diff --git a/spring/batch-infrastructure/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProviderIntegrationTest.kt b/spring/batch-infrastructure/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProviderIntegrationTest.kt deleted file mode 100644 index 159c51a56..000000000 --- a/spring/batch-infrastructure/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProviderIntegrationTest.kt +++ /dev/null @@ -1,66 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.batch.item.database.orm - -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.EntityDsl -import com.linecorp.kotlinjdsl.test.entity.order.Order -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.springframework.batch.item.ExecutionContext -import org.springframework.batch.item.database.builder.JpaCursorItemReaderBuilder -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.autoconfigure.domain.EntityScan -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest -import javax.persistence.EntityManagerFactory - -@DataJpaTest -@EntityScan("com.linecorp.kotlinjdsl.test.entity") -internal open class KotlinJdslQueryProviderIntegrationTest : EntityDsl, WithKotlinJdslAssertions { - @Autowired - private lateinit var entityManagerFactory: EntityManagerFactory - - private val order1 = order { purchaserId = 1000 } - private val order2 = order { purchaserId = 2000 } - private val order3 = order { purchaserId = 1000 } - private val order4 = order { purchaserId = 1000 } - - @BeforeEach - fun setUp() { - val entityManager = entityManagerFactory.createEntityManager() - - entityManager.transaction.run { - begin() - sequenceOf(order1, order2, order3, order4).forEach { - entityManager.persist(it) - entityManager.flush() - } - commit() - } - - entityManager.close() - } - - @Test - fun test() { - // when - val queryProvider = KotlinJdslQueryProvider.typedQuery { - select(col(Order::id)) - from(Order::class) - where(col(Order::purchaserId).equal(1000)) - orderBy(col(Order::id).asc()) - } - - val reader = JpaCursorItemReaderBuilder() - .entityManagerFactory(entityManagerFactory) - .name("testReader") - .queryProvider(queryProvider) - .build() - - reader.open(ExecutionContext()) - - // then - assertThat(reader.read()!!).isEqualTo(order1.id) - assertThat(reader.read()!!).isEqualTo(order3.id) - assertThat(reader.read()!!).isEqualTo(order4.id) - } -} diff --git a/spring/batch-infrastructure/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProviderTest.kt b/spring/batch-infrastructure/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProviderTest.kt deleted file mode 100644 index 6186da7c2..000000000 --- a/spring/batch-infrastructure/src/test/kotlin/com/linecorp/kotlinjdsl/spring/batch/item/database/orm/KotlinJdslQueryProviderTest.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.batch.item.database.orm - -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactory -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import javax.persistence.EntityManager -import javax.persistence.Query - -@ExtendWith(MockKExtension::class) -internal class KotlinJdslQueryProviderTest : WithKotlinJdslAssertions { - @MockK - private lateinit var entityManager: EntityManager - - @Test - fun createQuery() { - // given - val query: Query = mockk() - - val createQuery: (SpringDataQueryFactory) -> Query = { - query - } - - // when - val actual = KotlinJdslQueryProvider(createQuery).apply { - setEntityManager(entityManager) - }.createQuery() - - // then - assertThat(actual).isEqualTo(query) - } - - @Test - fun `createQuery - if there is no entityManager before call createQuery then throw exception`() { - // given - val createQuery: (SpringDataQueryFactory) -> Query = { - mockk() - } - - // when - val exception = catchThrowable(IllegalStateException::class) { - KotlinJdslQueryProvider(createQuery).createQuery() - } - - // then - assertThat(exception) - .hasMessageContaining("There is no entityManager. Please set entityManager before create query") - } -} \ No newline at end of file diff --git a/spring/data-autoconfigure-jakarta/build.gradle.kts b/spring/data-autoconfigure-jakarta/build.gradle.kts deleted file mode 100644 index 41dec397c..000000000 --- a/spring/data-autoconfigure-jakarta/build.gradle.kts +++ /dev/null @@ -1,12 +0,0 @@ -apply() - -dependencies { - compileOnly(Modules.coreJakarta) - compileOnly(Modules.springDataCoreJakarta) - compileOnly(libs.jakarta.persistence.api) - compileOnly(libs.spring.boot3.autoconfigure) -} - -coverage { - exclude(project) -} diff --git a/spring/data-autoconfigure-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/autoconfigure/QueryCreatorConfiguration.kt b/spring/data-autoconfigure-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/autoconfigure/QueryCreatorConfiguration.kt deleted file mode 100644 index 47b1cd4b3..000000000 --- a/spring/data-autoconfigure-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/autoconfigure/QueryCreatorConfiguration.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.autoconfigure - -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreatorImpl -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import jakarta.persistence.EntityManager - -@Configuration(proxyBeanMethods = false) -@ConditionalOnClass(EntityManager::class) -class QueryCreatorConfiguration { - @Bean - @ConditionalOnMissingBean(CriteriaQueryCreator::class) - fun criteriaQueryCreator(entityManager: EntityManager): CriteriaQueryCreator { - return CriteriaQueryCreatorImpl(entityManager) - } - - @Bean - @ConditionalOnMissingBean(SubqueryCreator::class) - fun subqueryCreator(): SubqueryCreator { - return SubqueryCreatorImpl() - } -} diff --git a/spring/data-autoconfigure-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/autoconfigure/SpringDataQueryFactoryAutoConfiguration.kt b/spring/data-autoconfigure-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/autoconfigure/SpringDataQueryFactoryAutoConfiguration.kt deleted file mode 100644 index b1a51b73d..000000000 --- a/spring/data-autoconfigure-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/autoconfigure/SpringDataQueryFactoryAutoConfiguration.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.autoconfigure - -import com.linecorp.kotlinjdsl.QueryFactory -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactory -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactoryImpl -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Import -import jakarta.persistence.EntityManager - -@Configuration(proxyBeanMethods = false) -@ConditionalOnClass(EntityManager::class) -@Import(QueryCreatorConfiguration::class) -class SpringDataQueryFactoryAutoConfiguration { - @Bean - @ConditionalOnMissingBean(QueryFactory::class) - fun springDataQueryFactory( - criteriaQueryCreator: CriteriaQueryCreator, - subqueryCreator: SubqueryCreator, - ): SpringDataQueryFactory { - return SpringDataQueryFactoryImpl( - criteriaQueryCreator = criteriaQueryCreator, - subqueryCreator = subqueryCreator, - ) - } -} diff --git a/spring/data-autoconfigure-jakarta/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring/data-autoconfigure-jakarta/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 3f42304a6..000000000 --- a/spring/data-autoconfigure-jakarta/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -com.linecorp.kotlinjdsl.spring.data.autoconfigure.SpringDataQueryFactoryAutoConfiguration \ No newline at end of file diff --git a/spring/data-autoconfigure/build.gradle.kts b/spring/data-autoconfigure/build.gradle.kts deleted file mode 100644 index 654c2bf7b..000000000 --- a/spring/data-autoconfigure/build.gradle.kts +++ /dev/null @@ -1,8 +0,0 @@ -apply() - -dependencies { - compileOnly(Modules.core) - compileOnly(Modules.springDataCore) - compileOnly(libs.java.persistence.api) - compileOnly(libs.spring.boot.autoconfigure) -} diff --git a/spring/data-autoconfigure/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/autoconfigure/QueryCreatorConfiguration.kt b/spring/data-autoconfigure/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/autoconfigure/QueryCreatorConfiguration.kt deleted file mode 100644 index aaeff81d7..000000000 --- a/spring/data-autoconfigure/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/autoconfigure/QueryCreatorConfiguration.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.autoconfigure - -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreatorImpl -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import javax.persistence.EntityManager - -@Configuration(proxyBeanMethods = false) -@ConditionalOnClass(EntityManager::class) -class QueryCreatorConfiguration { - @Bean - @ConditionalOnMissingBean(CriteriaQueryCreator::class) - fun criteriaQueryCreator(entityManager: EntityManager): CriteriaQueryCreator { - return CriteriaQueryCreatorImpl(entityManager) - } - - @Bean - @ConditionalOnMissingBean(SubqueryCreator::class) - fun subqueryCreator(): SubqueryCreator { - return SubqueryCreatorImpl() - } -} \ No newline at end of file diff --git a/spring/data-autoconfigure/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/autoconfigure/SpringDataQueryFactoryAutoConfiguration.kt b/spring/data-autoconfigure/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/autoconfigure/SpringDataQueryFactoryAutoConfiguration.kt deleted file mode 100644 index d8c39c273..000000000 --- a/spring/data-autoconfigure/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/autoconfigure/SpringDataQueryFactoryAutoConfiguration.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.autoconfigure - -import com.linecorp.kotlinjdsl.QueryFactory -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactory -import com.linecorp.kotlinjdsl.spring.data.SpringDataQueryFactoryImpl -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Import -import javax.persistence.EntityManager - -@Configuration(proxyBeanMethods = false) -@ConditionalOnClass(EntityManager::class) -@Import(QueryCreatorConfiguration::class) -class SpringDataQueryFactoryAutoConfiguration { - @Bean - @ConditionalOnMissingBean(QueryFactory::class) - fun springDataQueryFactory( - criteriaQueryCreator: CriteriaQueryCreator, - subqueryCreator: SubqueryCreator, - ): SpringDataQueryFactory { - return SpringDataQueryFactoryImpl( - criteriaQueryCreator = criteriaQueryCreator, - subqueryCreator = subqueryCreator, - ) - } -} \ No newline at end of file diff --git a/spring/data-autoconfigure/src/main/resources/META-INF/spring.factories b/spring/data-autoconfigure/src/main/resources/META-INF/spring.factories deleted file mode 100644 index acc1b5cbb..000000000 --- a/spring/data-autoconfigure/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -com.linecorp.kotlinjdsl.spring.data.autoconfigure.SpringDataQueryFactoryAutoConfiguration \ No newline at end of file diff --git a/spring/data-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring/data-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 3f42304a6..000000000 --- a/spring/data-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -com.linecorp.kotlinjdsl.spring.data.autoconfigure.SpringDataQueryFactoryAutoConfiguration \ No newline at end of file diff --git a/spring/data-core-jakarta/build.gradle.kts b/spring/data-core-jakarta/build.gradle.kts deleted file mode 100644 index d0fdabe61..000000000 --- a/spring/data-core-jakarta/build.gradle.kts +++ /dev/null @@ -1,19 +0,0 @@ -apply() - -dependencies { - compileOnly(Modules.coreJakarta) - compileOnly(libs.spring.jpa3) - compileOnly(libs.hibernate6) - - testImplementation(Modules.coreJakarta) - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntityJakarta) - testImplementation(libs.spring.boot3.test) - testImplementation(libs.spring.jpa3) - testImplementation(libs.hibernate6) - testImplementation(libs.h2) -} - -coverage { - exclude(project) -} diff --git a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactory.kt b/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactory.kt deleted file mode 100644 index c24ca3851..000000000 --- a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactory.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.* -import org.springframework.data.domain.Page -import org.springframework.data.domain.Pageable -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery -import kotlin.reflect.KClass - -interface SpringDataQueryFactory { - @Deprecated( - replaceWith = ReplaceWith(expression = "selectQuery"), - message = "This method has been replaced with selectQuery." - ) - fun typedQuery(returnType: Class, dsl: SpringDataCriteriaQueryDsl.() -> Unit): TypedQuery = - selectQuery(returnType, dsl) - - fun selectQuery(returnType: Class, dsl: SpringDataCriteriaQueryDsl.() -> Unit): TypedQuery - fun updateQuery(target: KClass, dsl: SpringDataCriteriaUpdateQueryDsl.() -> Unit): Query - fun deleteQuery(target: KClass, dsl: SpringDataCriteriaDeleteQueryDsl.() -> Unit): Query - fun subquery(returnType: Class, dsl: SpringDataSubqueryDsl.() -> Unit): SubqueryExpressionSpec - fun pageQuery(returnType: Class, pageable: Pageable, dsl: SpringDataPageableQueryDsl.() -> Unit): Page - fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataPageableQueryDsl.() -> Unit, - countProjection: SpringDataPageableQueryDsl.() -> SingleSelectClause - ): Page -} diff --git a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryExtensions.kt b/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryExtensions.kt deleted file mode 100644 index 2aadebd20..000000000 --- a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryExtensions.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.spring.data.querydsl.* -import org.springframework.data.domain.Pageable -import java.util.stream.Stream - -inline fun SpringDataQueryFactory.singleQuery( - noinline dsl: SpringDataCriteriaQueryDsl.() -> Unit -): T = selectQuery(T::class.java, dsl).singleResult - -inline fun SpringDataQueryFactory.listQuery( - noinline dsl: SpringDataCriteriaQueryDsl.() -> Unit -): List = selectQuery(T::class.java, dsl).resultList - -inline fun SpringDataQueryFactory.streamQuery( - noinline dsl: SpringDataCriteriaQueryDsl.() -> Unit -): Stream = selectQuery(T::class.java, dsl).resultStream - -@Deprecated( - replaceWith = ReplaceWith(expression = "selectQuery"), - message = "This method has been replaced with selectQuery." -) -inline fun SpringDataQueryFactory.typedQuery(noinline dsl: SpringDataCriteriaQueryDsl.() -> Unit) = - selectQuery(dsl) - -inline fun SpringDataQueryFactory.selectQuery(noinline dsl: SpringDataCriteriaQueryDsl.() -> Unit) = - selectQuery(T::class.java, dsl) - -inline fun SpringDataQueryFactory.updateQuery(noinline dsl: SpringDataCriteriaUpdateQueryDsl.() -> Unit) = - updateQuery(T::class, dsl) - -inline fun SpringDataQueryFactory.deleteQuery(noinline dsl: SpringDataCriteriaDeleteQueryDsl.() -> Unit) = - deleteQuery(T::class, dsl) - -inline fun SpringDataQueryFactory.subquery(noinline dsl: SpringDataSubqueryDsl.() -> Unit) = - subquery(T::class.java, dsl) - -inline fun SpringDataQueryFactory.pageQuery( - pageable: Pageable, - noinline dsl: SpringDataPageableQueryDsl.() -> Unit -) = pageQuery(T::class.java, pageable, dsl) - -inline fun SpringDataQueryFactory.pageQuery( - pageable: Pageable, - noinline dsl: SpringDataPageableQueryDsl.() -> Unit, - noinline countProjection: SpringDataPageableQueryDsl.() -> SingleSelectClause, -) = pageQuery(T::class.java, pageable, dsl, countProjection) diff --git a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryImpl.kt b/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryImpl.kt deleted file mode 100644 index 4e7c7e1ca..000000000 --- a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryImpl.kt +++ /dev/null @@ -1,94 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.* -import org.springframework.data.domain.Page -import org.springframework.data.domain.Pageable -import org.springframework.data.support.PageableExecutionUtils -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery -import kotlin.reflect.KClass - -class SpringDataQueryFactoryImpl( - private val criteriaQueryCreator: CriteriaQueryCreator, - private val subqueryCreator: SubqueryCreator, -) : SpringDataQueryFactory { - override fun selectQuery( - returnType: Class, - dsl: SpringDataCriteriaQueryDsl.() -> Unit - ): TypedQuery { - val criteriaQuerySpec = SpringDataQueryDslImpl(returnType).apply(dsl).createCriteriaQuerySpec() - - return criteriaQueryCreator.createQuery(criteriaQuerySpec) - } - - override fun updateQuery(target: KClass, dsl: SpringDataCriteriaUpdateQueryDsl.() -> Unit): Query { - val criteriaQuerySpec = SpringDataQueryDslImpl(target.java).apply(dsl).apply { - from(target) - }.createCriteriaUpdateQuerySpec() - - return criteriaQueryCreator.createQuery(criteriaQuerySpec) - } - - override fun deleteQuery(target: KClass, dsl: SpringDataCriteriaDeleteQueryDsl.() -> Unit): Query { - return criteriaQueryCreator.createQuery( - SpringDataQueryDslImpl(target.java).apply(dsl).apply { from(target) }.createCriteriaDeleteQuerySpec() - ) - } - - override fun subquery( - returnType: Class, - dsl: SpringDataSubqueryDsl.() -> Unit - ): SubqueryExpressionSpec { - val subquerySpec = SpringDataQueryDslImpl(returnType).apply(dsl).createSubquerySpec() - - return SubqueryExpressionSpec(subquerySpec, subqueryCreator) - } - - override fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataPageableQueryDsl.() -> Unit - ): Page { - val appliedDsl = SpringDataQueryDslImpl(returnType).apply { dsl(); this.pageable = pageable } - - val pageableQuery = criteriaQueryCreator.createQuery(appliedDsl.createPageableQuerySpec()) - val pageableCountQuery = criteriaQueryCreator.createQuery(appliedDsl.createPageableCountQuerySpec()) - - return PageableExecutionUtils.getPage(pageableQuery.resultList, pageable) { - executeCountQuery(pageableCountQuery) - } - } - - override fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataPageableQueryDsl.() -> Unit, - countProjection: SpringDataPageableQueryDsl.() -> SingleSelectClause, - ): Page { - val appliedDsl = SpringDataQueryDslImpl(returnType).apply { dsl(); this.pageable = pageable } - val countSelectClause = SpringDataQueryDslImpl(Long::class.java).run(countProjection) - - val pageableQuery = criteriaQueryCreator.createQuery(appliedDsl.createPageableQuerySpec()) - val pageableCountQuery = criteriaQueryCreator.createQuery( - appliedDsl.createPageableCountQuerySpec(countSelectClause) - ) - - return PageableExecutionUtils.getPage(pageableQuery.resultList, pageable) { - executeCountQuery(pageableCountQuery) - } - } - - private fun executeCountQuery(query: TypedQuery): Long { - val totals = query.resultList - - return if (totals.size == 1) { - totals.first() - } else { - totals.count().toLong() - } - } -} diff --git a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/limit/SpringDataPageableLimitClause.kt b/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/limit/SpringDataPageableLimitClause.kt deleted file mode 100644 index 8e3c6fa01..000000000 --- a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/limit/SpringDataPageableLimitClause.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.query.clause.limit - -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import org.springframework.data.domain.Pageable -import jakarta.persistence.Query - -data class SpringDataPageableLimitClause( - private val pageable: Pageable -) : QueryLimitClause { - override fun apply(query: Q) { - if (pageable.isPaged) { - query.firstResult = pageable.offset.toInt() - query.maxResults = pageable.pageSize - } - } -} diff --git a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/orderby/SpringDataPageableOrderByClause.kt b/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/orderby/SpringDataPageableOrderByClause.kt deleted file mode 100644 index bae155955..000000000 --- a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/orderby/SpringDataPageableOrderByClause.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import org.springframework.data.domain.Pageable -import org.springframework.data.jpa.repository.query.QueryUtils -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery - -data class SpringDataPageableOrderByClause( - private val pageable: Pageable -) : CriteriaQueryOrderByClause { - override fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) { - query.orderBy(QueryUtils.toOrders(pageable.sort, froms.root, criteriaBuilder)) - } -} diff --git a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaDeleteQueryDsl.kt b/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaDeleteQueryDsl.kt deleted file mode 100644 index e32900beb..000000000 --- a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaDeleteQueryDsl.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.predicate.SpringDataPredicateDsl - -interface SpringDataCriteriaDeleteQueryDsl : CriteriaDeleteQueryDsl, SpringDataPredicateDsl diff --git a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaQueryDsl.kt b/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaQueryDsl.kt deleted file mode 100644 index 00649f401..000000000 --- a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaQueryDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.predicate.SpringDataPredicateDsl - -interface SpringDataCriteriaQueryDsl : - CriteriaQueryDsl, - SpringDataPredicateDsl diff --git a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaUpdateQueryDsl.kt b/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaUpdateQueryDsl.kt deleted file mode 100644 index 913e9bfd2..000000000 --- a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaUpdateQueryDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.predicate.SpringDataPredicateDsl - -interface SpringDataCriteriaUpdateQueryDsl : - CriteriaUpdateQueryDsl, - SpringDataPredicateDsl diff --git a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataPageableQueryDsl.kt b/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataPageableQueryDsl.kt deleted file mode 100644 index d8b98f51d..000000000 --- a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataPageableQueryDsl.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl - -import com.linecorp.kotlinjdsl.querydsl.expression.ExpressionDsl -import com.linecorp.kotlinjdsl.querydsl.from.FromDsl -import com.linecorp.kotlinjdsl.querydsl.from.JoinDsl -import com.linecorp.kotlinjdsl.querydsl.from.RelationDsl -import com.linecorp.kotlinjdsl.querydsl.hint.HintDsl -import com.linecorp.kotlinjdsl.querydsl.select.MultiSelectDsl -import com.linecorp.kotlinjdsl.querydsl.select.SingleSelectDsl -import com.linecorp.kotlinjdsl.querydsl.where.WhereDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.predicate.SpringDataPredicateDsl - -/** - * DSL for Spring Data JPA Pageable - * - * Pageable DSL does not support Fetch and GroupBy clause because they have to load a lot of data to memory. - * To use the Fetch and GroupBy clause for pagination, separate the query. - */ -interface SpringDataPageableQueryDsl : - ExpressionDsl, - SpringDataPredicateDsl, - SingleSelectDsl, - MultiSelectDsl, - FromDsl, - JoinDsl, - RelationDsl, - WhereDsl, - HintDsl diff --git a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataQueryDslImpl.kt b/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataQueryDslImpl.kt deleted file mode 100644 index eb679bcd0..000000000 --- a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataQueryDslImpl.kt +++ /dev/null @@ -1,72 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl - -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.* -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.spring.data.query.clause.limit.SpringDataPageableLimitClause -import com.linecorp.kotlinjdsl.spring.data.query.clause.orderby.SpringDataPageableOrderByClause -import org.springframework.data.domain.Pageable -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery - -/** - * Internal DSL Implementation which is integrated Spring Data JPA - * - * Don't use this directly because it's an **INTERNAL** class. - * It does not support backward compatibility. - */ -class SpringDataQueryDslImpl( - returnType: Class, -) : QueryDslImpl(returnType), - SpringDataCriteriaQueryDsl, SpringDataSubqueryDsl, SpringDataPageableQueryDsl, - SpringDataCriteriaUpdateQueryDsl, SpringDataCriteriaDeleteQueryDsl { - var pageable: Pageable = Pageable.unpaged() - - fun createPageableQuerySpec(): CriteriaQuerySpec> { - return CriteriaQuerySpecImpl( - select = getCriteriaQuerySelectClause(), - from = getFromClause(), - join = getJoinClauseDoesNotHaveFetch(), - where = getWhereClause(), - groupBy = getEmptyGroupByClause(), - having = getEmptyHavingClause(), - orderBy = getPageableOrderByClause(), - limit = getPageableLimitClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - ) - } - - fun createPageableCountQuerySpec(countSelectClause: SingleSelectClause? = null): CriteriaQuerySpec> { - return CriteriaQuerySpecImpl( - select = countSelectClause ?: getCriteriaCountQuerySelectClause(), - from = getFromClause(), - join = getJoinClauseDoesNotHaveFetch(), - where = getWhereClause(), - groupBy = getEmptyGroupByClause(), - having = getEmptyHavingClause(), - orderBy = getEmptyOrderByClause(), - limit = getEmptyLimitClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - ) - } - - private fun getCriteriaCountQuerySelectClause(): CriteriaQuerySelectClause { - return when (val selectClause = getCriteriaQuerySelectClause()) { - is SingleSelectClause -> CountSingleSelectClause(selectClause.distinct, selectClause.expression) - is MultiSelectClause -> CountMultiSelectClause(selectClause.distinct, selectClause.expressions) - else -> throw IllegalStateException("Pageable query does not support $selectClause") - } - } - - private fun getPageableOrderByClause(): CriteriaQueryOrderByClause { - return SpringDataPageableOrderByClause(pageable) - } - - private fun getPageableLimitClause(): QueryLimitClause { - return SpringDataPageableLimitClause(pageable) - } -} diff --git a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataSubqueryDsl.kt b/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataSubqueryDsl.kt deleted file mode 100644 index 14a3d0c4e..000000000 --- a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataSubqueryDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl - -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.predicate.SpringDataPredicateDsl - -interface SpringDataSubqueryDsl : - SubqueryDsl, - SpringDataPredicateDsl diff --git a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/predicate/SpringDataPredicateDsl.kt b/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/predicate/SpringDataPredicateDsl.kt deleted file mode 100644 index df370c339..000000000 --- a/spring/data-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/predicate/SpringDataPredicateDsl.kt +++ /dev/null @@ -1,30 +0,0 @@ -@file:Suppress("RemoveExplicitTypeArguments") - -package com.linecorp.kotlinjdsl.spring.data.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.GreaterThanValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.LessThanValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.predicate.PredicateDsl -import org.springframework.data.domain.Range - -interface SpringDataPredicateDsl : PredicateDsl { - fun ExpressionSpec.greaterThan(bound: Range.Bound) where R : Comparable, R : Any, T : R? = - if (bound.isBounded) { - GreaterThanValueSpec(this, bound.value.get(), bound.isInclusive) - } else { - PredicateSpec.empty - } - - fun ExpressionSpec.lessThan(bound: Range.Bound) where R : Comparable, R : Any, T : R? = - if (bound.isBounded) { - LessThanValueSpec(this, bound.value.get(), bound.isInclusive) - } else { - PredicateSpec.empty - } - - fun ExpressionSpec.between(range: Range) where R : Comparable, R : Any, T : R? = - AndSpec(listOf(greaterThan(range.lowerBound), lessThan(range.upperBound))) -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryExtensionsTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryExtensionsTest.kt deleted file mode 100644 index db8b1577b..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryExtensionsTest.kt +++ /dev/null @@ -1,251 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.data.querydsl.* -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.order.Order -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.Page -import org.springframework.data.domain.PageRequest -import java.util.stream.Stream -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery - -@ExtendWith(MockKExtension::class) -internal class SpringDataQueryFactoryExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var queryFactory: SpringDataQueryFactory - - @MockK - private lateinit var typedQuery: TypedQuery - - @MockK - private lateinit var subqueryExpressionSpec: SubqueryExpressionSpec - - @MockK - private lateinit var page: Page - - @Test - fun singleQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - every { typedQuery.singleResult } returns Data1() - - val dsl: SpringDataCriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: Data1 = queryFactory.singleQuery(dsl) - - // then - assertThat(actual).isEqualTo(Data1()) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - typedQuery.singleResult - } - - confirmVerified(queryFactory, typedQuery) - } - - @Test - fun listQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - every { typedQuery.resultList } returns listOf(Data1()) - - val dsl: SpringDataCriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: List = queryFactory.listQuery(dsl) - - // then - assertThat(actual).isEqualTo(listOf(Data1())) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - typedQuery.resultList - } - - confirmVerified(queryFactory, typedQuery) - } - - @Test - fun selectQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - - val dsl: SpringDataCriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: TypedQuery = queryFactory.selectQuery(dsl) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun updateQuery() { - // given - every { queryFactory.updateQuery(any(), any()) } returns typedQuery - - val dsl: SpringDataCriteriaUpdateQueryDsl.() -> Unit = { - set(col(Data1::id), 1) - where(col(Data1::id).equal(2)) - } - - // when - val actual: Query = queryFactory.updateQuery(dsl) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - queryFactory.updateQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun deleteQuery() { - // given - every { queryFactory.deleteQuery(any(), any()) } returns typedQuery - - val dsl: SpringDataCriteriaDeleteQueryDsl.() -> Unit = { - where(col(Data1::id).equal(1)) - } - - // when - val actual: Query = queryFactory.deleteQuery(dsl) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - queryFactory.deleteQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun subquery() { - // given - every { queryFactory.subquery(any(), any()) } returns subqueryExpressionSpec - - val dsl: SpringDataSubqueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: SubqueryExpressionSpec = queryFactory.subquery(dsl) - - // then - assertThat(actual).isEqualTo(subqueryExpressionSpec) - - verify(exactly = 1) { - queryFactory.subquery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun pageQuery() { - // given - every { queryFactory.pageQuery(any(), any(), any()) } returns page - - val pageable = PageRequest.of(1, 10) - - val dsl: SpringDataPageableQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl) - - // then - assertThat(actual).isEqualTo(page) - - verify(exactly = 1) { - queryFactory.pageQuery(Data1::class.java, pageable, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun streamQuery() { - // given - every { queryFactory.streamQuery(any()) } returns Stream.of(1L, 2L, 3L) - - // when - val actual = queryFactory.streamQuery { - select(col(Order::id)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(1000)) - }.toList() - - // then - assertThat(actual).containsExactly(1L, 2L, 3L) - } - - @Test - fun `pageQuery with countProjection`() { - // given - every { queryFactory.pageQuery(any(), any(), any(), any()) } returns page - - val pageable = PageRequest.of(1, 10) - - val dsl: SpringDataPageableQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - val countProjection: SpringDataPageableQueryDsl.() -> SingleSelectClause = { - select(count(column(Data1::id))) - } - - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl, countProjection) - - // then - assertThat(actual).isEqualTo(page) - - verify(exactly = 1) { - queryFactory.pageQuery(Data1::class.java, pageable, dsl, countProjection) - } - - confirmVerified(queryFactory) - } - - data class Data1( - val id: Int = 100 - ) -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryImplTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryImplTest.kt deleted file mode 100644 index 0e84efa02..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryImplTest.kt +++ /dev/null @@ -1,341 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.EmptySqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.emptySqlHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.LimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CountSingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.CountSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.EqualValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.data.query.clause.limit.SpringDataPageableLimitClause -import com.linecorp.kotlinjdsl.spring.data.query.clause.orderby.SpringDataPageableOrderByClause -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.PageImpl -import org.springframework.data.domain.PageRequest -import jakarta.persistence.Query -import jakarta.persistence.TypedQuery - -@ExtendWith(MockKExtension::class) -internal class SpringDataQueryFactoryImplTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: SpringDataQueryFactoryImpl - - @MockK - private lateinit var criteriaQueryCreator: CriteriaQueryCreator - - @MockK - private lateinit var subqueryCreator: SubqueryCreator - - @Test - fun selectQuery() { - // given - val typedQuery: TypedQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>()) } returns typedQuery - - // when - val actual = sut.selectQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - @Suppress("DEPRECATION") - val actualTypedQuery = sut.typedQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - assertThat(actual).isEqualTo(typedQuery) - assertThat(actualTypedQuery).isEqualTo(typedQuery) - - verify(exactly = 2) { - criteriaQueryCreator.createQuery( - QueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java), - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = LimitClause.empty(), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun updateQuery() { - // given - val query: Query = mockk() - - every { criteriaQueryCreator.createQuery(any>()) } returns query - - // when - val actual = sut.updateQuery(Data1::class) { - where(col(Data1::id).equal(1)) - set(col(Data1::id), 2) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - QueryDslImpl.CriteriaUpdateQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = EmptySqlQueryHintClause, - set = SetClause(mapOf(ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) to 2)), - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun deleteQuery() { - // given - val query: Query = mockk() - - every { criteriaQueryCreator.createQuery(any>()) } returns query - - // when - val actual = sut.deleteQuery(Data1::class) { - where(col(Data1::id).equal(1)) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - QueryDslImpl.CriteriaDeleteQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = EmptySqlQueryHintClause, - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun subquery() { - // when - val actual = sut.subquery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - val subquerySpec = QueryDslImpl.SubquerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - ) - - assertThat(actual).isEqualTo(SubqueryExpressionSpec(subquerySpec, subqueryCreator)) - } - - @Test - fun pageQuery() { - // given - val pageable = PageRequest.of(0, 5) - - val expectedPageableSpec = QueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = SpringDataPageableOrderByClause(pageable), - limit = SpringDataPageableLimitClause(pageable), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val expectedPageableCountSpec = QueryDslImpl.CriteriaQuerySpecImpl( - select = CountSingleSelectClause( - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = LimitClause.empty(), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val pageableQuery: TypedQuery = mockk { - every { resultList } returns listOf(Data1(1), Data1(2), Data1(3), Data1(4), Data1(5)) - } - - val pageableCountQuery: TypedQuery = mockk { - every { resultList } returns listOf(50L) - } - - every { criteriaQueryCreator.createQuery(expectedPageableSpec) } returns pageableQuery - every { criteriaQueryCreator.createQuery(expectedPageableCountSpec) } returns pageableCountQuery - - // when - val actual = sut.pageQuery(Data1::class.java, pageable) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - assertThat(actual).isEqualTo(PageImpl(listOf(Data1(1), Data1(2), Data1(3), Data1(4), Data1(5)), pageable, 50)) - - verify(exactly = 1) { - criteriaQueryCreator.createQuery(expectedPageableSpec) - criteriaQueryCreator.createQuery(expectedPageableCountSpec) - - pageableQuery.resultList - pageableCountQuery.resultList - } - - confirmVerified(pageableQuery, pageableCountQuery, criteriaQueryCreator) - } - - @Test - fun `pageQuery with countProjection`() { - // given - val pageable = PageRequest.of(0, 5) - - val expectedPageableSpec = QueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = SpringDataPageableOrderByClause(pageable), - limit = SpringDataPageableLimitClause(pageable), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val expectedPageableCountSpec = QueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - returnType = Long::class.java, - distinct = false, - expression = CountSpec( - distinct = false, - expression = ColumnSpec(EntitySpec(Data1::class.java), "id") - ) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = LimitClause.empty(), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val pageableQuery: TypedQuery = mockk { - every { resultList } returns listOf(Data1(1), Data1(2), Data1(3), Data1(4), Data1(5)) - } - - val pageableCountQuery: TypedQuery = mockk { - every { resultList } returns listOf(50L) - } - - every { criteriaQueryCreator.createQuery(expectedPageableSpec) } returns pageableQuery - every { criteriaQueryCreator.createQuery(expectedPageableCountSpec) } returns pageableCountQuery - - // when - val actual = sut.pageQuery(Data1::class.java, pageable, dsl = { - select(entity(Data1::class)) - from(entity(Data1::class)) - }, countProjection = { - select(count(column(Data1::id))) - }) - - // then - assertThat(actual).isEqualTo(PageImpl(listOf(Data1(1), Data1(2), Data1(3), Data1(4), Data1(5)), pageable, 50)) - - verify(exactly = 1) { - criteriaQueryCreator.createQuery(expectedPageableSpec) - criteriaQueryCreator.createQuery(expectedPageableCountSpec) - - pageableQuery.resultList - pageableCountQuery.resultList - } - - confirmVerified(pageableQuery, pageableCountQuery, criteriaQueryCreator) - } - - data class Data1( - val id: Int = 1 - ) -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryIntegrationTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryIntegrationTest.kt deleted file mode 100644 index eccd5479f..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryIntegrationTest.kt +++ /dev/null @@ -1,92 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data - -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreatorImpl -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.querydsl.where.WhereDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataCriteriaQueryDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataPageableQueryDsl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.EntityDsl -import com.linecorp.kotlinjdsl.test.entity.order.Order -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.autoconfigure.domain.EntityScan -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest -import org.springframework.data.domain.Page -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Sort -import jakarta.persistence.EntityManager - -@DataJpaTest -@EntityScan(basePackages = ["com.linecorp.kotlinjdsl.test.entity"]) -internal class SpringDataQueryFactoryIntegrationTest : EntityDsl, WithKotlinJdslAssertions { - @Autowired - private lateinit var entityManager: EntityManager - - private lateinit var queryFactory: SpringDataQueryFactory - - private val order1 = order { purchaserId = 1000 } - private val order2 = order { purchaserId = 1000 } - private val order3 = order { purchaserId = 1000 } - private val order4 = order { purchaserId = 2000 } - - @BeforeEach - fun setUp() { - queryFactory = SpringDataQueryFactoryImpl( - criteriaQueryCreator = CriteriaQueryCreatorImpl(entityManager), - subqueryCreator = SubqueryCreatorImpl() - ) - sequenceOf(order1, order2, order3, order4).forEach { - entityManager.persist(it) - entityManager.flush() - entityManager.clear() - } - } - - @Test - fun pageQuery() { - // when - val actual = queryFactory.pageQuery(PageRequest.of(1, 2, Sort.by("id"))) { - select(col(Order::id)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(1000)) - } - - // then - assertThat(actual.content).isEqualTo(listOf(order3.id)) - - assertThat(actual.totalElements).isEqualTo(3) - assertThat(actual.totalPages).isEqualTo(2) - assertThat(actual.number).isEqualTo(1) - } - - @Test - fun pageExtractWhereQuery() { - // given - val pageable = PageRequest.of(0, 10) - fun WhereDsl.equalValueSpec() = column(Order::purchaserId).equal(1000L) - - val dsl: SpringDataPageableQueryDsl.() -> Unit = { - select(entity(Order::class)) - from(entity(Order::class)) - where(equalValueSpec()) - } - - val dslCriteria: SpringDataCriteriaQueryDsl.() -> Unit = { - select(entity(Order::class)) - from(entity(Order::class)) - where(equalValueSpec()) - } - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl) - val actualList: List = queryFactory.listQuery(dslCriteria) - - // then - assertThat(actual.content.size).isEqualTo(3) - assertThat(actual.map { it.id }).containsExactlyInAnyOrder(order1.id, order2.id, order3.id) - assertThat(actualList.map { it.id }).containsExactlyInAnyOrder(order1.id, order2.id, order3.id) - } -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/TestApplication.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/TestApplication.kt deleted file mode 100644 index e8caaa1a3..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/TestApplication.kt +++ /dev/null @@ -1,8 +0,0 @@ -@file:Suppress("unused") - -package com.linecorp.kotlinjdsl.spring.data - -import org.springframework.boot.autoconfigure.SpringBootApplication - -@SpringBootApplication -class TestApplication diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/limit/SpringDataPageableLimitClauseTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/limit/SpringDataPageableLimitClauseTest.kt deleted file mode 100644 index ea44c8f97..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/limit/SpringDataPageableLimitClauseTest.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.query.clause.limit - -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable -import jakarta.persistence.Query - -@ExtendWith(MockKExtension::class) -internal class SpringDataPageableLimitClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: Query - - @Test - fun apply() { - // given - val pageable = PageRequest.of(1, 10) - - every { query.setFirstResult(10) } returns query - every { query.setMaxResults(10) } returns query - - // when - SpringDataPageableLimitClause(pageable).apply(query) - - // then - verify(exactly = 1) { - query.firstResult = 10 - query.maxResults = 10 - } - - confirmVerified(query) - } - - @Test - fun `apply - unPaged`() { - // given - val pageable = Pageable.unpaged() - - // when - SpringDataPageableLimitClause(pageable).apply(query) - - // then - confirmVerified(query) - } -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/orderby/SpringDataPageableOrderByClauseTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/orderby/SpringDataPageableOrderByClauseTest.kt deleted file mode 100644 index d5d86950c..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/orderby/SpringDataPageableOrderByClauseTest.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Sort -import org.springframework.data.jpa.repository.query.QueryUtils -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Order -import jakarta.persistence.criteria.Root - -@ExtendWith(MockKExtension::class) -internal class SpringDataPageableOrderByClauseTest : WithAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: CriteriaQuery<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun apply() { - // given - mockkStatic(QueryUtils::class) - - val sort = Sort.by(Sort.Direction.ASC, "test") - val pageable = PageRequest.of(1, 10, sort) - - val root: Root<*> = mockk() - val order: Order = mockk() - - every { froms.root } returns root - every { QueryUtils.toOrders(sort, root, criteriaBuilder) } returns listOf(order) - every { query.orderBy(listOf(order)) } returns query - - // when - SpringDataPageableOrderByClause(pageable).apply(froms, query, criteriaBuilder) - - // then - verify(exactly = 1) { - froms.root - QueryUtils.toOrders(sort, root, criteriaBuilder) - query.orderBy(listOf(order)) - } - - clearStaticMockk(QueryUtils::class) - } -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/expression/SpringDataQueryDslImplExpressionTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/expression/SpringDataQueryDslImplExpressionTest.kt deleted file mode 100644 index 9103afab5..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/expression/SpringDataQueryDslImplExpressionTest.kt +++ /dev/null @@ -1,366 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.* -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.expression.WhenDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplExpressionTest : WithKotlinJdslAssertions { - @Test - fun entity() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class) - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java)) - } - - @Test - fun entityWithAlias() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class, "data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun alias() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = Data1::class.alias("data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun literal() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = literal(10) - } - - assertThat(actual).isEqualTo(LiteralSpec(10)) - } - - @Test - fun nullLiteral() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = nullLiteral(Int::class.java) - } - - assertThat(actual).isEqualTo(NullLiteralSpec(Int::class.java)) - } - - @Test - fun col() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = col(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun column() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = column(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun max() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = max(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MaxSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun min() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = min(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MinSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun avg() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = avg(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - AvgSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun sum() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = sum(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - SumSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun count() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = count(distinct = true, col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countNonDistinct() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = count(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countDistinct() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = countDistinct(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun greatest() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = greatest(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - GreatestSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun least() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = least(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - LeastSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun caseList() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = case( - listOf( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - ), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun caseVararg() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = case( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun `when`() { - val predicate1: PredicateSpec = mockk() - val expression1: ExpressionSpec = mockk() - - val actual: CaseSpec.WhenSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1, expression1) - } - - assertThat(actual).isEqualTo(CaseSpec.WhenSpec(predicate1, expression1)) - } - - @Test - fun whenWithPredicate() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1) - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - @Test - fun whenWithLambda() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = `when` { predicate1 } - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - - @Test - fun functionVarArg() { - // when - val actual: FunctionSpec - SpringDataQueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - @Test - fun functionList() { - // when - val actual: FunctionSpec - SpringDataQueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - listOf( - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - class Data1 { - val id: Int = 10 - } -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplFetchTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplFetchTest.kt deleted file mode 100644 index 32ad976a8..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplFetchTest.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.spec.FetchJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import jakarta.persistence.criteria.JoinType - -internal class SpringDataQueryDslImplFetchTest : WithKotlinJdslAssertions { - @Test - fun fetch() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - fetch(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val fetchSpec = FetchJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(fetchSpec, fetchSpec, fetchSpec, fetchSpec)) - ) - - val exception1 = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception1).hasMessageContaining("This query does not support fetch") - - val exception2 = catchThrowable(IllegalStateException::class) { - actual.createPageableQuerySpec() - } - - assertThat(exception2).hasMessageContaining("This query does not support fetch") - - val exception3 = catchThrowable(IllegalStateException::class) { - actual.createPageableCountQuerySpec() - } - - assertThat(exception3).hasMessageContaining("This query does not support fetch") - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplFromTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplFromTest.kt deleted file mode 100644 index 41f796e80..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplFromTest.kt +++ /dev/null @@ -1,113 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplFromTest : WithKotlinJdslAssertions { - @Test - fun fromJavaClass() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromKotlinClass() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromEntitySpec() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class, "data1")) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - } - - class Data1 -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplJoinTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplJoinTest.kt deleted file mode 100644 index d6c980fa1..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplJoinTest.kt +++ /dev/null @@ -1,260 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.CrossJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleAssociatedJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test -import jakarta.persistence.criteria.JoinType - -internal class SpringDataQueryDslImplJoinTest : WithKotlinJdslAssertions { - @Test - fun on() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = on(predicateSpec) - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun onLambda() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = on { predicateSpec } - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun join() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun associate() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun updateAssociate() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaUpdateQuerySpec() - - assertThat(criteriaQuerySpec.associate).isEqualTo( - SimpleAssociatedJoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun updateAssociateOnlyAllowsSimpleAssociatedJoinSpec() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2)) - } - - val result = catchThrowable(IllegalStateException::class) { actual.createCriteriaUpdateQuerySpec() } - - assertThat(result).hasMessage("This query only support associate") - } - - @Test - fun crossJoin() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(Data2::class, on(predicateSpec1)) - join(entity(Data2::class), on(predicateSpec1)) - where(predicateSpec2) - } - - // then - val joinSpec = CrossJoinSpec(EntitySpec(Data2::class.java)) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplRelationTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplRelationTest.kt deleted file mode 100644 index d65c7550b..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplRelationTest.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.from - -import com.linecorp.kotlinjdsl.querydsl.from.Relation -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplRelationTest : WithKotlinJdslAssertions { - @Test - fun on() { - val actual: Relation - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2) - } - - assertThat(actual).isEqualTo(Relation("data2")) - } - - @Test - fun onCollection() { - val actual: Relation - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2List) - } - - assertThat(actual).isEqualTo(Relation("data2List")) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/groupby/SpringDataQueryDslImplGroupByTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/groupby/SpringDataQueryDslImplGroupByTest.kt deleted file mode 100644 index 0d1a65ad3..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/groupby/SpringDataQueryDslImplGroupByTest.kt +++ /dev/null @@ -1,124 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.groupby - -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplGroupByTest : WithKotlinJdslAssertions { - @Test - fun noGroupBy() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - @Test - fun groupByVararg() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(columnSpec1, columnSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - @Test - fun groupByList() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(listOf(columnSpec1, columnSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - class Data1 -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/having/SpringDataQueryDslImplHavingTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/having/SpringDataQueryDslImplHavingTest.kt deleted file mode 100644 index db9949745..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/having/SpringDataQueryDslImplHavingTest.kt +++ /dev/null @@ -1,125 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.having - -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplHavingTest : WithKotlinJdslAssertions { - @Test - fun noHaving() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - @Test - fun having() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - @Test - fun multipleHaving() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec1) - having(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - class Data1 -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/hint/SpringDataQueryDslImplHintTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/hint/SpringDataQueryDslImplHintTest.kt deleted file mode 100644 index 1d0992bb3..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/hint/SpringDataQueryDslImplHintTest.kt +++ /dev/null @@ -1,111 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.hint - -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClauseImpl -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import jakarta.persistence.Query - -internal class SpringDataQueryDslImplHintTest : WithKotlinJdslAssertions { - @Test - fun noHints() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaQueryHintClauseImpl(emptyMap()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.jpaHint).isEqualTo( - JpaQueryHintClauseImpl(emptyMap()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.jpaHint).isEqualTo( - JpaQueryHintClauseImpl(emptyMap()) - ) - } - - @Test - fun hintsVararg() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints("hint1" to true, "hint2" to "comment") - } - - // then - val hintClause = JpaQueryHintClauseImpl( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.jpaHint).isEqualTo( - hintClause - ) - } - - @Test - fun hintsMap() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints(mapOf("hint1" to true, "hint2" to "comment")) - } - - // then - val hintClause = JpaQueryHintClauseImpl( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.jpaHint).isEqualTo( - hintClause - ) - } - - class Data1 -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/limit/SpringDataQueryDslImplLimitTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/limit/SpringDataQueryDslImplLimitTest.kt deleted file mode 100644 index c12430319..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/limit/SpringDataQueryDslImplLimitTest.kt +++ /dev/null @@ -1,190 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.limit - -import com.linecorp.kotlinjdsl.query.clause.limit.LimitClause -import com.linecorp.kotlinjdsl.spring.data.query.clause.limit.SpringDataPageableLimitClause -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable -import jakarta.persistence.Query - -internal class SpringDataQueryDslImplLimitTest : WithKotlinJdslAssertions { - @Test - fun noLimit() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = null, maxResults = null) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataPageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - } - - @Test - fun offset() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - offset(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = 10, maxResults = null) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataPageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - } - - @Test - fun maxResults() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - maxResults(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = null, maxResults = 10) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataPageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - } - - @Test - fun limitMaxResults() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = null, maxResults = 10) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataPageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - } - - @Test - fun limitOffsetAndMaxResults() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(1, 10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = 1, maxResults = 10) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataPageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - } - - @Test - fun pageable() { - // given - val pageable = PageRequest.of(1, 10) - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - this.pageable = pageable - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataPageableLimitClause(pageable) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - } - - class Data1 -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/orderby/SpringDataQueryDslImplOrderByWhereTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/orderby/SpringDataQueryDslImplOrderByWhereTest.kt deleted file mode 100644 index c8c5a6ab8..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/orderby/SpringDataQueryDslImplOrderByWhereTest.kt +++ /dev/null @@ -1,169 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.orderby - -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.spec.ExpressionOrderSpec -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.spring.data.query.clause.orderby.SpringDataPageableOrderByClause -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable - -internal class SpringDataQueryDslImplOrderByWhereTest : WithKotlinJdslAssertions { - @Test - fun noOrderBy() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataPageableOrderByClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun orderByVararg() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(orderSpec1, orderSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataPageableOrderByClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun orderByList() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(listOf(orderSpec1, orderSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataPageableOrderByClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun pageable() { - // given - val pageable = PageRequest.of(10, 10) - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - this.pageable = pageable - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataPageableOrderByClause(pageable) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun asc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.asc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, true)) - } - - @Test - fun desc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.desc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, false)) - } - - class Data1 -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/predicate/SpringDataQueryDslImplPredicateTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/predicate/SpringDataQueryDslImplPredicateTest.kt deleted file mode 100644 index 1ecdb2ce8..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/predicate/SpringDataQueryDslImplPredicateTest.kt +++ /dev/null @@ -1,567 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.* -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test -import org.springframework.data.domain.Range - -internal class SpringDataQueryDslImplPredicateTest : WithKotlinJdslAssertions { - @Test - fun not() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = not(predicateSpec) - } - - assertThat(actual).isEqualTo(NotSpec(predicateSpec)) - } - - @Test - fun andVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = and(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun andList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = and(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = or(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = or(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun equalValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.equal(value) - } - - assertThat(actual).isEqualTo(EqualValueSpec(expressionSpec, value)) - } - - @Test - fun equalExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.equal(expressionSpec2) - } - - assertThat(actual).isEqualTo(EqualExpressionSpec(expressionSpec1, expressionSpec2)) - } - - @Test - fun notEqualValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.notEqual(value) - } - - assertThat(actual).isEqualTo(NotSpec(EqualValueSpec(expressionSpec, value))) - } - - @Test - fun notEqualExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.notEqual(expressionSpec2) - } - - assertThat(actual).isEqualTo(NotSpec(EqualExpressionSpec(expressionSpec1, expressionSpec2))) - } - - @Test - fun inValueVararg() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(value1, value2) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inValueList() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(listOf(value1, value2)) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inExpressionVararg() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun inExpressionList() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(listOf(expressionSpec2, expressionSpec3)) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun greaterThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun greaterThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun greaterThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun greaterThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun greaterThanBound() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.inclusive("test") - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(bound) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, "test", true)) - } - - @Test - fun greaterThanBoundEmpty() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.unbounded() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(bound) - } - - assertThat(actual).isEqualTo(PredicateSpec.empty) - } - - @Test - fun lessThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun lessThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun lessThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanBound() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.inclusive("test") - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(bound) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, "test", true)) - } - - @Test - fun lessThanBoundEmpty() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.unbounded() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(bound) - } - - assertThat(actual).isEqualTo(PredicateSpec.empty) - } - - @Test - fun betweenValue() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(value1, value2) - } - - assertThat(actual).isEqualTo(BetweenValueSpec(expressionSpec, value1, value2)) - } - - @Test - fun betweenExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.between(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(BetweenExpressionSpec(expressionSpec1, expressionSpec2, expressionSpec3)) - } - - @Test - fun betweenRange() { - val expressionSpec: ExpressionSpec = mockk() - val range = Range.leftOpen("test1", "test2") - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(range) - } - - assertThat(actual).isEqualTo( - AndSpec( - listOf( - GreaterThanValueSpec(expressionSpec, "test1", false), - LessThanValueSpec(expressionSpec, "test2", true) - ) - ) - ) - } - - @Test - fun betweenRangeEmpty() { - val expressionSpec: ExpressionSpec = mockk() - val range = Range.unbounded() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(range) - } - - assertThat(actual).isEqualTo( - AndSpec(listOf(PredicateSpec.empty, PredicateSpec.empty)) - ) - } - - @Test - fun isTrue() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isTrue() - } - - assertThat(actual).isEqualTo(IsTrueSpec(expressionSpec)) - } - - @Test - fun isFalse() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isFalse() - } - - assertThat(actual).isEqualTo(IsFalseSpec(expressionSpec)) - } - - @Test - fun isNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNull() - } - - assertThat(actual).isEqualTo(IsNullSpec(expressionSpec)) - } - - @Test - fun isNotNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNotNull() - } - - assertThat(actual).isEqualTo(NotSpec(IsNullSpec(expressionSpec))) - } - - @Test - fun like() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.like(value) - } - - assertThat(actual).isEqualTo(LikeSpec(expressionSpec, value)) - } - - @Test - fun notLike() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.notLike(value) - } - - assertThat(actual).isEqualTo(NotSpec(LikeSpec(expressionSpec, value))) - } -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/select/SpringDataQueryDslImplMultiSelectTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/select/SpringDataQueryDslImplMultiSelectTest.kt deleted file mode 100644 index 3d1a19172..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/select/SpringDataQueryDslImplMultiSelectTest.kt +++ /dev/null @@ -1,454 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.CountMultiSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplMultiSelectTest : WithKotlinJdslAssertions { - @Test - fun select() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - select(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectNonDistinct() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - select(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectDistinct() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - selectDistinct(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMulti() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - selectMulti(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiNonDistinctVararg() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - selectMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiNonDistinctList() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - selectMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiDistinctVararg() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - selectDistinctMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiDistinctList() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - selectDistinctMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - data class Row( - val id: String, - val name: String, - ) - - class Data1 { - val id: String = "test" - val name: String = "test_name" - } -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/select/SpringDataQueryDslImplSingleSelectTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/select/SpringDataQueryDslImplSingleSelectTest.kt deleted file mode 100644 index 09a7f7d22..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/select/SpringDataQueryDslImplSingleSelectTest.kt +++ /dev/null @@ -1,284 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.CountSingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.CountSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplSingleSelectTest : WithKotlinJdslAssertions { - @Test - fun noSelect() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - from(entity(Data1::class)) - } - - // then - val exception1 = catchThrowable(IllegalStateException::class) { - actual.createCriteriaQuerySpec() - } - - assertThat(exception1).hasMessageContaining("There is no select clause in query") - - val exception2 = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception2).hasMessageContaining("There is no select clause in query") - - val exception3 = catchThrowable(IllegalStateException::class) { - actual.createPageableQuerySpec() - } - - assertThat(exception3).hasMessageContaining("There is no select clause in query") - - val exception4 = catchThrowable(IllegalStateException::class) { - actual.createPageableCountQuerySpec() - } - - assertThat(exception4).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectEntity() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectExpression() { - // when - val actual = SpringDataQueryDslImpl(String::class.java).apply { - select(distinct = true, column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectNonDistinctEntity() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = false, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectNonDistinctExpression() { - // when - val actual = SpringDataQueryDslImpl(String::class.java).apply { - select(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectDistinctEntity() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - selectDistinct(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectDistinctExpression() { - // when - val actual = SpringDataQueryDslImpl(String::class.java).apply { - selectDistinct(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun `inject countSelectClause`() { - val countSelectClause: SingleSelectClause - - // when - val actual = SpringDataQueryDslImpl(String::class.java).apply { - selectDistinct(column(Data1::id)) - from(entity(Data1::class)) - } - - SpringDataQueryDslImpl(Long::class.java).apply { - countSelectClause = select(count(column(Data1::name))) - } - - // then - val pageableCountQuerySpec = actual.createPageableCountQuerySpec(countSelectClause) - - assertThat(pageableCountQuerySpec.select).isEqualTo( - SingleSelectClause( - returnType = Long::class.java, - distinct = false, - expression = CountSpec( - distinct = false, - expression = ColumnSpec(EntitySpec(Data1::class.java), "name") - ) - ) - ) - } - - class Data1 { - val id: String = "test" - val name: String = "name" - } -} diff --git a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/where/SpringDataQueryDslImplWhereTest.kt b/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/where/SpringDataQueryDslImplWhereTest.kt deleted file mode 100644 index ff8bcb442..000000000 --- a/spring/data-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/where/SpringDataQueryDslImplWhereTest.kt +++ /dev/null @@ -1,125 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.where - -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplWhereTest : WithKotlinJdslAssertions { - @Test - fun noWhere() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - } - - @Test - fun where() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - } - - @Test - fun wheres() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec1) - where(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - class Data1 -} diff --git a/spring/data-core/build.gradle.kts b/spring/data-core/build.gradle.kts deleted file mode 100644 index 15c51ba65..000000000 --- a/spring/data-core/build.gradle.kts +++ /dev/null @@ -1,15 +0,0 @@ -apply() - -dependencies { - compileOnly(Modules.core) - compileOnly(libs.spring.jpa) - compileOnly(libs.hibernate) - - testImplementation(Modules.core) - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntity) - testImplementation(libs.spring.boot.test) - testImplementation(libs.spring.jpa) - testImplementation(libs.hibernate) - testImplementation(libs.h2) -} diff --git a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactory.kt b/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactory.kt deleted file mode 100644 index de0f7f944..000000000 --- a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactory.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.* -import org.springframework.data.domain.Page -import org.springframework.data.domain.Pageable -import javax.persistence.Query -import javax.persistence.TypedQuery -import kotlin.reflect.KClass - -interface SpringDataQueryFactory { - @Deprecated( - replaceWith = ReplaceWith(expression = "selectQuery"), - message = "This method has been replaced with selectQuery." - ) - fun typedQuery(returnType: Class, dsl: SpringDataCriteriaQueryDsl.() -> Unit): TypedQuery = - selectQuery(returnType, dsl) - - fun selectQuery(returnType: Class, dsl: SpringDataCriteriaQueryDsl.() -> Unit): TypedQuery - fun updateQuery(target: KClass, dsl: SpringDataCriteriaUpdateQueryDsl.() -> Unit): Query - fun deleteQuery(target: KClass, dsl: SpringDataCriteriaDeleteQueryDsl.() -> Unit): Query - fun subquery(returnType: Class, dsl: SpringDataSubqueryDsl.() -> Unit): SubqueryExpressionSpec - fun pageQuery(returnType: Class, pageable: Pageable, dsl: SpringDataPageableQueryDsl.() -> Unit): Page - fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataPageableQueryDsl.() -> Unit, - countProjection: SpringDataPageableQueryDsl.() -> SingleSelectClause - ): Page -} diff --git a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryExtensions.kt b/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryExtensions.kt deleted file mode 100644 index 2aadebd20..000000000 --- a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryExtensions.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.spring.data.querydsl.* -import org.springframework.data.domain.Pageable -import java.util.stream.Stream - -inline fun SpringDataQueryFactory.singleQuery( - noinline dsl: SpringDataCriteriaQueryDsl.() -> Unit -): T = selectQuery(T::class.java, dsl).singleResult - -inline fun SpringDataQueryFactory.listQuery( - noinline dsl: SpringDataCriteriaQueryDsl.() -> Unit -): List = selectQuery(T::class.java, dsl).resultList - -inline fun SpringDataQueryFactory.streamQuery( - noinline dsl: SpringDataCriteriaQueryDsl.() -> Unit -): Stream = selectQuery(T::class.java, dsl).resultStream - -@Deprecated( - replaceWith = ReplaceWith(expression = "selectQuery"), - message = "This method has been replaced with selectQuery." -) -inline fun SpringDataQueryFactory.typedQuery(noinline dsl: SpringDataCriteriaQueryDsl.() -> Unit) = - selectQuery(dsl) - -inline fun SpringDataQueryFactory.selectQuery(noinline dsl: SpringDataCriteriaQueryDsl.() -> Unit) = - selectQuery(T::class.java, dsl) - -inline fun SpringDataQueryFactory.updateQuery(noinline dsl: SpringDataCriteriaUpdateQueryDsl.() -> Unit) = - updateQuery(T::class, dsl) - -inline fun SpringDataQueryFactory.deleteQuery(noinline dsl: SpringDataCriteriaDeleteQueryDsl.() -> Unit) = - deleteQuery(T::class, dsl) - -inline fun SpringDataQueryFactory.subquery(noinline dsl: SpringDataSubqueryDsl.() -> Unit) = - subquery(T::class.java, dsl) - -inline fun SpringDataQueryFactory.pageQuery( - pageable: Pageable, - noinline dsl: SpringDataPageableQueryDsl.() -> Unit -) = pageQuery(T::class.java, pageable, dsl) - -inline fun SpringDataQueryFactory.pageQuery( - pageable: Pageable, - noinline dsl: SpringDataPageableQueryDsl.() -> Unit, - noinline countProjection: SpringDataPageableQueryDsl.() -> SingleSelectClause, -) = pageQuery(T::class.java, pageable, dsl, countProjection) diff --git a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryImpl.kt b/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryImpl.kt deleted file mode 100644 index b9f3754d9..000000000 --- a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryImpl.kt +++ /dev/null @@ -1,94 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.* -import org.springframework.data.domain.Page -import org.springframework.data.domain.Pageable -import org.springframework.data.support.PageableExecutionUtils -import javax.persistence.Query -import javax.persistence.TypedQuery -import kotlin.reflect.KClass - -class SpringDataQueryFactoryImpl( - private val criteriaQueryCreator: CriteriaQueryCreator, - private val subqueryCreator: SubqueryCreator, -) : SpringDataQueryFactory { - override fun selectQuery( - returnType: Class, - dsl: SpringDataCriteriaQueryDsl.() -> Unit - ): TypedQuery { - val criteriaQuerySpec = SpringDataQueryDslImpl(returnType).apply(dsl).createCriteriaQuerySpec() - - return criteriaQueryCreator.createQuery(criteriaQuerySpec) - } - - override fun updateQuery(target: KClass, dsl: SpringDataCriteriaUpdateQueryDsl.() -> Unit): Query { - val criteriaQuerySpec = SpringDataQueryDslImpl(target.java).apply(dsl).apply { - from(target) - }.createCriteriaUpdateQuerySpec() - - return criteriaQueryCreator.createQuery(criteriaQuerySpec) - } - - override fun deleteQuery(target: KClass, dsl: SpringDataCriteriaDeleteQueryDsl.() -> Unit): Query { - return criteriaQueryCreator.createQuery( - SpringDataQueryDslImpl(target.java).apply(dsl).apply { from(target) }.createCriteriaDeleteQuerySpec() - ) - } - - override fun subquery( - returnType: Class, - dsl: SpringDataSubqueryDsl.() -> Unit - ): SubqueryExpressionSpec { - val subquerySpec = SpringDataQueryDslImpl(returnType).apply(dsl).createSubquerySpec() - - return SubqueryExpressionSpec(subquerySpec, subqueryCreator) - } - - override fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataPageableQueryDsl.() -> Unit - ): Page { - val appliedDsl = SpringDataQueryDslImpl(returnType).apply { dsl(); this.pageable = pageable } - - val pageableQuery = criteriaQueryCreator.createQuery(appliedDsl.createPageableQuerySpec()) - val pageableCountQuery = criteriaQueryCreator.createQuery(appliedDsl.createPageableCountQuerySpec()) - - return PageableExecutionUtils.getPage(pageableQuery.resultList, pageable) { - executeCountQuery(pageableCountQuery) - } - } - - override fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataPageableQueryDsl.() -> Unit, - countProjection: SpringDataPageableQueryDsl.() -> SingleSelectClause, - ): Page { - val appliedDsl = SpringDataQueryDslImpl(returnType).apply { dsl(); this.pageable = pageable } - val countSelectClause = SpringDataQueryDslImpl(Long::class.java).run(countProjection) - - val pageableQuery = criteriaQueryCreator.createQuery(appliedDsl.createPageableQuerySpec()) - val pageableCountQuery = criteriaQueryCreator.createQuery( - appliedDsl.createPageableCountQuerySpec(countSelectClause) - ) - - return PageableExecutionUtils.getPage(pageableQuery.resultList, pageable) { - executeCountQuery(pageableCountQuery) - } - } - - private fun executeCountQuery(query: TypedQuery): Long { - val totals = query.resultList - - return if (totals.size == 1) { - totals.first() - } else { - totals.count().toLong() - } - } -} diff --git a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/limit/SpringDataPageableLimitClause.kt b/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/limit/SpringDataPageableLimitClause.kt deleted file mode 100644 index 3dc004296..000000000 --- a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/limit/SpringDataPageableLimitClause.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.query.clause.limit - -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import org.springframework.data.domain.Pageable -import javax.persistence.Query - -data class SpringDataPageableLimitClause( - private val pageable: Pageable -) : QueryLimitClause { - override fun apply(query: Q) { - if (pageable.isPaged) { - query.firstResult = pageable.offset.toInt() - query.maxResults = pageable.pageSize - } - } -} diff --git a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/orderby/SpringDataPageableOrderByClause.kt b/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/orderby/SpringDataPageableOrderByClause.kt deleted file mode 100644 index a51ad06ca..000000000 --- a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/orderby/SpringDataPageableOrderByClause.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import org.springframework.data.domain.Pageable -import org.springframework.data.jpa.repository.query.QueryUtils -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery - -data class SpringDataPageableOrderByClause( - private val pageable: Pageable -) : CriteriaQueryOrderByClause { - override fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) { - query.orderBy(QueryUtils.toOrders(pageable.sort, froms.root, criteriaBuilder)) - } -} diff --git a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaDeleteQueryDsl.kt b/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaDeleteQueryDsl.kt deleted file mode 100644 index e32900beb..000000000 --- a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaDeleteQueryDsl.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.predicate.SpringDataPredicateDsl - -interface SpringDataCriteriaDeleteQueryDsl : CriteriaDeleteQueryDsl, SpringDataPredicateDsl diff --git a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaQueryDsl.kt b/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaQueryDsl.kt deleted file mode 100644 index f2c9763ff..000000000 --- a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaQueryDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.predicate.SpringDataPredicateDsl - -interface SpringDataCriteriaQueryDsl : - CriteriaQueryDsl, - SpringDataPredicateDsl \ No newline at end of file diff --git a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaUpdateQueryDsl.kt b/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaUpdateQueryDsl.kt deleted file mode 100644 index 913e9bfd2..000000000 --- a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataCriteriaUpdateQueryDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.predicate.SpringDataPredicateDsl - -interface SpringDataCriteriaUpdateQueryDsl : - CriteriaUpdateQueryDsl, - SpringDataPredicateDsl diff --git a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataPageableQueryDsl.kt b/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataPageableQueryDsl.kt deleted file mode 100644 index 3f6637b60..000000000 --- a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataPageableQueryDsl.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl - -import com.linecorp.kotlinjdsl.querydsl.expression.ExpressionDsl -import com.linecorp.kotlinjdsl.querydsl.from.FromDsl -import com.linecorp.kotlinjdsl.querydsl.from.JoinDsl -import com.linecorp.kotlinjdsl.querydsl.from.RelationDsl -import com.linecorp.kotlinjdsl.querydsl.hint.HintDsl -import com.linecorp.kotlinjdsl.querydsl.select.MultiSelectDsl -import com.linecorp.kotlinjdsl.querydsl.select.SingleSelectDsl -import com.linecorp.kotlinjdsl.querydsl.where.WhereDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.predicate.SpringDataPredicateDsl - -/** - * DSL for Spring Data JPA Pageable - * - * Pageable DSL does not support Fetch and GroupBy clause because they have to load a lot of data to memory. - * To use the Fetch and GroupBy clause for pagination, separate the query. - */ -interface SpringDataPageableQueryDsl : - ExpressionDsl, - SpringDataPredicateDsl, - SingleSelectDsl, - MultiSelectDsl, - FromDsl, - JoinDsl, - RelationDsl, - WhereDsl, - HintDsl \ No newline at end of file diff --git a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataQueryDslImpl.kt b/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataQueryDslImpl.kt deleted file mode 100644 index de0e64040..000000000 --- a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataQueryDslImpl.kt +++ /dev/null @@ -1,72 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl - -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.* -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.spring.data.query.clause.limit.SpringDataPageableLimitClause -import com.linecorp.kotlinjdsl.spring.data.query.clause.orderby.SpringDataPageableOrderByClause -import org.springframework.data.domain.Pageable -import javax.persistence.Query -import javax.persistence.TypedQuery - -/** - * Internal DSL Implementation which is integrated Spring Data JPA - * - * Don't use this directly because it's an **INTERNAL** class. - * It does not support backward compatibility. - */ -class SpringDataQueryDslImpl( - returnType: Class, -) : QueryDslImpl(returnType), - SpringDataCriteriaQueryDsl, SpringDataSubqueryDsl, SpringDataPageableQueryDsl, - SpringDataCriteriaUpdateQueryDsl, SpringDataCriteriaDeleteQueryDsl { - var pageable: Pageable = Pageable.unpaged() - - fun createPageableQuerySpec(): CriteriaQuerySpec> { - return CriteriaQuerySpecImpl( - select = getCriteriaQuerySelectClause(), - from = getFromClause(), - join = getJoinClauseDoesNotHaveFetch(), - where = getWhereClause(), - groupBy = getEmptyGroupByClause(), - having = getEmptyHavingClause(), - orderBy = getPageableOrderByClause(), - limit = getPageableLimitClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - ) - } - - fun createPageableCountQuerySpec(countSelectClause: SingleSelectClause? = null): CriteriaQuerySpec> { - return CriteriaQuerySpecImpl( - select = countSelectClause ?: getCriteriaCountQuerySelectClause(), - from = getFromClause(), - join = getJoinClauseDoesNotHaveFetch(), - where = getWhereClause(), - groupBy = getEmptyGroupByClause(), - having = getEmptyHavingClause(), - orderBy = getEmptyOrderByClause(), - limit = getEmptyLimitClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - ) - } - - private fun getCriteriaCountQuerySelectClause(): CriteriaQuerySelectClause { - return when (val selectClause = getCriteriaQuerySelectClause()) { - is SingleSelectClause -> CountSingleSelectClause(selectClause.distinct, selectClause.expression) - is MultiSelectClause -> CountMultiSelectClause(selectClause.distinct, selectClause.expressions) - else -> throw IllegalStateException("Pageable query does not support $selectClause") - } - } - - private fun getPageableOrderByClause(): CriteriaQueryOrderByClause { - return SpringDataPageableOrderByClause(pageable) - } - - private fun getPageableLimitClause(): QueryLimitClause { - return SpringDataPageableLimitClause(pageable) - } -} diff --git a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataSubqueryDsl.kt b/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataSubqueryDsl.kt deleted file mode 100644 index 136574d88..000000000 --- a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/SpringDataSubqueryDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl - -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.predicate.SpringDataPredicateDsl - -interface SpringDataSubqueryDsl : - SubqueryDsl, - SpringDataPredicateDsl \ No newline at end of file diff --git a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/predicate/SpringDataPredicateDsl.kt b/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/predicate/SpringDataPredicateDsl.kt deleted file mode 100644 index 35e94c991..000000000 --- a/spring/data-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/predicate/SpringDataPredicateDsl.kt +++ /dev/null @@ -1,30 +0,0 @@ -@file:Suppress("RemoveExplicitTypeArguments") - -package com.linecorp.kotlinjdsl.spring.data.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.GreaterThanValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.LessThanValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.predicate.PredicateDsl -import org.springframework.data.domain.Range - -interface SpringDataPredicateDsl : PredicateDsl { - fun ExpressionSpec.greaterThan(bound: Range.Bound) where R : Comparable, R : Any, T : R? = - if (bound.isBounded) { - GreaterThanValueSpec(this, bound.value.get(), bound.isInclusive) - } else { - PredicateSpec.empty - } - - fun ExpressionSpec.lessThan(bound: Range.Bound) where R : Comparable, R : Any, T : R? = - if (bound.isBounded) { - LessThanValueSpec(this, bound.value.get(), bound.isInclusive) - } else { - PredicateSpec.empty - } - - fun ExpressionSpec.between(range: Range) where R : Comparable, R : Any, T : R? = - AndSpec(listOf(greaterThan(range.lowerBound), lessThan(range.upperBound))) -} \ No newline at end of file diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryExtensionsTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryExtensionsTest.kt deleted file mode 100644 index 453275250..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryExtensionsTest.kt +++ /dev/null @@ -1,252 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.data.querydsl.* -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.order.Order -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.Page -import org.springframework.data.domain.PageRequest -import java.util.stream.Stream -import javax.persistence.Query -import javax.persistence.TypedQuery -import kotlin.streams.toList - -@ExtendWith(MockKExtension::class) -internal class SpringDataQueryFactoryExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var queryFactory: SpringDataQueryFactory - - @MockK - private lateinit var typedQuery: TypedQuery - - @MockK - private lateinit var subqueryExpressionSpec: SubqueryExpressionSpec - - @MockK - private lateinit var page: Page - - @Test - fun singleQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - every { typedQuery.singleResult } returns Data1() - - val dsl: SpringDataCriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: Data1 = queryFactory.singleQuery(dsl) - - // then - assertThat(actual).isEqualTo(Data1()) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - typedQuery.singleResult - } - - confirmVerified(queryFactory, typedQuery) - } - - @Test - fun listQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - every { typedQuery.resultList } returns listOf(Data1()) - - val dsl: SpringDataCriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: List = queryFactory.listQuery(dsl) - - // then - assertThat(actual).isEqualTo(listOf(Data1())) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - typedQuery.resultList - } - - confirmVerified(queryFactory, typedQuery) - } - - @Test - fun selectQuery() { - // given - every { queryFactory.selectQuery(any(), any()) } returns typedQuery - - val dsl: SpringDataCriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: TypedQuery = queryFactory.selectQuery(dsl) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun updateQuery() { - // given - every { queryFactory.updateQuery(any(), any()) } returns typedQuery - - val dsl: SpringDataCriteriaUpdateQueryDsl.() -> Unit = { - set(col(Data1::id), 1) - where(col(Data1::id).equal(2)) - } - - // when - val actual: Query = queryFactory.updateQuery(dsl) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - queryFactory.updateQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun deleteQuery() { - // given - every { queryFactory.deleteQuery(any(), any()) } returns typedQuery - - val dsl: SpringDataCriteriaDeleteQueryDsl.() -> Unit = { - where(col(Data1::id).equal(1)) - } - - // when - val actual: Query = queryFactory.deleteQuery(dsl) - - // then - assertThat(actual).isEqualTo(typedQuery) - - verify(exactly = 1) { - queryFactory.deleteQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun subquery() { - // given - every { queryFactory.subquery(any(), any()) } returns subqueryExpressionSpec - - val dsl: SpringDataSubqueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: SubqueryExpressionSpec = queryFactory.subquery(dsl) - - // then - assertThat(actual).isEqualTo(subqueryExpressionSpec) - - verify(exactly = 1) { - queryFactory.subquery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun pageQuery() { - // given - every { queryFactory.pageQuery(any(), any(), any()) } returns page - - val pageable = PageRequest.of(1, 10) - - val dsl: SpringDataPageableQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl) - - // then - assertThat(actual).isEqualTo(page) - - verify(exactly = 1) { - queryFactory.pageQuery(Data1::class.java, pageable, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun streamQuery() { - // given - every { queryFactory.streamQuery(any()) } returns Stream.of(1L, 2L, 3L) - - // when - val actual = queryFactory.streamQuery { - select(col(Order::id)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(1000)) - }.toList() - - // then - assertThat(actual).containsExactly(1L, 2L, 3L) - } - - @Test - fun `pageQuery with countProjection`() { - // given - every { queryFactory.pageQuery(any(), any(), any(), any()) } returns page - - val pageable = PageRequest.of(1, 10) - - val dsl: SpringDataPageableQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - val countProjection: SpringDataPageableQueryDsl.() -> SingleSelectClause = { - select(count(column(Data1::id))) - } - - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl, countProjection) - - // then - assertThat(actual).isEqualTo(page) - - verify(exactly = 1) { - queryFactory.pageQuery(Data1::class.java, pageable, dsl, countProjection) - } - - confirmVerified(queryFactory) - } - - data class Data1( - val id: Int = 100 - ) -} diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryImplTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryImplTest.kt deleted file mode 100644 index 9721429a2..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryImplTest.kt +++ /dev/null @@ -1,341 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.EmptySqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.emptySqlHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.LimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CountSingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.CountSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.EqualValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.QueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.data.query.clause.limit.SpringDataPageableLimitClause -import com.linecorp.kotlinjdsl.spring.data.query.clause.orderby.SpringDataPageableOrderByClause -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.mockk -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.PageImpl -import org.springframework.data.domain.PageRequest -import javax.persistence.Query -import javax.persistence.TypedQuery - -@ExtendWith(MockKExtension::class) -internal class SpringDataQueryFactoryImplTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: SpringDataQueryFactoryImpl - - @MockK - private lateinit var criteriaQueryCreator: CriteriaQueryCreator - - @MockK - private lateinit var subqueryCreator: SubqueryCreator - - @Test - fun selectQuery() { - // given - val typedQuery: TypedQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>()) } returns typedQuery - - // when - val actual = sut.selectQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - @Suppress("DEPRECATION") - val actualTypedQuery = sut.typedQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - assertThat(actual).isEqualTo(typedQuery) - assertThat(actualTypedQuery).isEqualTo(typedQuery) - - verify(exactly = 2) { - criteriaQueryCreator.createQuery( - QueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java), - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = LimitClause.empty(), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun updateQuery() { - // given - val query: Query = mockk() - - every { criteriaQueryCreator.createQuery(any>()) } returns query - - // when - val actual = sut.updateQuery(Data1::class) { - where(col(Data1::id).equal(1)) - set(col(Data1::id), 2) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - QueryDslImpl.CriteriaUpdateQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = EmptySqlQueryHintClause, - set = SetClause(mapOf(ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) to 2)), - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun deleteQuery() { - // given - val query: Query = mockk() - - every { criteriaQueryCreator.createQuery(any>()) } returns query - - // when - val actual = sut.deleteQuery(Data1::class) { - where(col(Data1::id).equal(1)) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - QueryDslImpl.CriteriaDeleteQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = EmptySqlQueryHintClause, - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun subquery() { - // when - val actual = sut.subquery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - val subquerySpec = QueryDslImpl.SubquerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - ) - - assertThat(actual).isEqualTo(SubqueryExpressionSpec(subquerySpec, subqueryCreator)) - } - - @Test - fun pageQuery() { - // given - val pageable = PageRequest.of(0, 5) - - val expectedPageableSpec = QueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = SpringDataPageableOrderByClause(pageable), - limit = SpringDataPageableLimitClause(pageable), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val expectedPageableCountSpec = QueryDslImpl.CriteriaQuerySpecImpl( - select = CountSingleSelectClause( - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = LimitClause.empty(), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val pageableQuery: TypedQuery = mockk { - every { resultList } returns listOf(Data1(1), Data1(2), Data1(3), Data1(4), Data1(5)) - } - - val pageableCountQuery: TypedQuery = mockk { - every { resultList } returns listOf(50L) - } - - every { criteriaQueryCreator.createQuery(expectedPageableSpec) } returns pageableQuery - every { criteriaQueryCreator.createQuery(expectedPageableCountSpec) } returns pageableCountQuery - - // when - val actual = sut.pageQuery(Data1::class.java, pageable) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - assertThat(actual).isEqualTo(PageImpl(listOf(Data1(1), Data1(2), Data1(3), Data1(4), Data1(5)), pageable, 50)) - - verify(exactly = 1) { - criteriaQueryCreator.createQuery(expectedPageableSpec) - criteriaQueryCreator.createQuery(expectedPageableCountSpec) - - pageableQuery.resultList - pageableCountQuery.resultList - } - - confirmVerified(pageableQuery, pageableCountQuery, criteriaQueryCreator) - } - - @Test - fun `pageQuery with countProjection`() { - // given - val pageable = PageRequest.of(0, 5) - - val expectedPageableSpec = QueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = SpringDataPageableOrderByClause(pageable), - limit = SpringDataPageableLimitClause(pageable), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val expectedPageableCountSpec = QueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - returnType = Long::class.java, - distinct = false, - expression = CountSpec( - distinct = false, - expression = ColumnSpec(EntitySpec(Data1::class.java), "id") - ) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = LimitClause.empty(), - jpaHint = JpaQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val pageableQuery: TypedQuery = mockk { - every { resultList } returns listOf(Data1(1), Data1(2), Data1(3), Data1(4), Data1(5)) - } - - val pageableCountQuery: TypedQuery = mockk { - every { resultList } returns listOf(50L) - } - - every { criteriaQueryCreator.createQuery(expectedPageableSpec) } returns pageableQuery - every { criteriaQueryCreator.createQuery(expectedPageableCountSpec) } returns pageableCountQuery - - // when - val actual = sut.pageQuery(Data1::class.java, pageable, dsl = { - select(entity(Data1::class)) - from(entity(Data1::class)) - }, countProjection = { - select(count(column(Data1::id))) - }) - - // then - assertThat(actual).isEqualTo(PageImpl(listOf(Data1(1), Data1(2), Data1(3), Data1(4), Data1(5)), pageable, 50)) - - verify(exactly = 1) { - criteriaQueryCreator.createQuery(expectedPageableSpec) - criteriaQueryCreator.createQuery(expectedPageableCountSpec) - - pageableQuery.resultList - pageableCountQuery.resultList - } - - confirmVerified(pageableQuery, pageableCountQuery, criteriaQueryCreator) - } - - data class Data1( - val id: Int = 1 - ) -} diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryIntegrationTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryIntegrationTest.kt deleted file mode 100644 index df4f58848..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/SpringDataQueryFactoryIntegrationTest.kt +++ /dev/null @@ -1,92 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data - -import com.linecorp.kotlinjdsl.query.creator.CriteriaQueryCreatorImpl -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.querydsl.where.WhereDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataCriteriaQueryDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataPageableQueryDsl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.EntityDsl -import com.linecorp.kotlinjdsl.test.entity.order.Order -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.autoconfigure.domain.EntityScan -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest -import org.springframework.data.domain.Page -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Sort -import javax.persistence.EntityManager - -@DataJpaTest -@EntityScan(basePackages = ["com.linecorp.kotlinjdsl.test.entity"]) -internal class SpringDataQueryFactoryIntegrationTest : EntityDsl, WithKotlinJdslAssertions { - @Autowired - private lateinit var entityManager: EntityManager - - private lateinit var queryFactory: SpringDataQueryFactory - - private val order1 = order { purchaserId = 1000 } - private val order2 = order { purchaserId = 1000 } - private val order3 = order { purchaserId = 1000 } - private val order4 = order { purchaserId = 2000 } - - @BeforeEach - fun setUp() { - queryFactory = SpringDataQueryFactoryImpl( - criteriaQueryCreator = CriteriaQueryCreatorImpl(entityManager), - subqueryCreator = SubqueryCreatorImpl() - ) - sequenceOf(order1, order2, order3, order4).forEach { - entityManager.persist(it) - entityManager.flush() - entityManager.clear() - } - } - - @Test - fun pageQuery() { - // when - val actual = queryFactory.pageQuery(PageRequest.of(1, 2, Sort.by("id"))) { - select(col(Order::id)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(1000)) - } - - // then - assertThat(actual.content).isEqualTo(listOf(order3.id)) - - assertThat(actual.totalElements).isEqualTo(3) - assertThat(actual.totalPages).isEqualTo(2) - assertThat(actual.number).isEqualTo(1) - } - - @Test - fun pageExtractWhereQuery() { - // given - val pageable = PageRequest.of(0, 10) - fun WhereDsl.equalValueSpec() = column(Order::purchaserId).equal(1000L) - - val dsl: SpringDataPageableQueryDsl.() -> Unit = { - select(entity(Order::class)) - from(entity(Order::class)) - where(equalValueSpec()) - } - - val dslCriteria: SpringDataCriteriaQueryDsl.() -> Unit = { - select(entity(Order::class)) - from(entity(Order::class)) - where(equalValueSpec()) - } - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl) - val actualList: List = queryFactory.listQuery(dslCriteria) - - // then - assertThat(actual.content.size).isEqualTo(3) - assertThat(actual.map { it.id }).containsExactlyInAnyOrder(order1.id, order2.id, order3.id) - assertThat(actualList.map { it.id }).containsExactlyInAnyOrder(order1.id, order2.id, order3.id) - } -} diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/TestApplication.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/TestApplication.kt deleted file mode 100644 index 543e53909..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/TestApplication.kt +++ /dev/null @@ -1,8 +0,0 @@ -@file:Suppress("unused") - -package com.linecorp.kotlinjdsl.spring.data - -import org.springframework.boot.autoconfigure.SpringBootApplication - -@SpringBootApplication -class TestApplication \ No newline at end of file diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/limit/SpringDataPageableLimitClauseTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/limit/SpringDataPageableLimitClauseTest.kt deleted file mode 100644 index f94619716..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/limit/SpringDataPageableLimitClauseTest.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.query.clause.limit - -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable -import javax.persistence.Query - -@ExtendWith(MockKExtension::class) -internal class SpringDataPageableLimitClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: Query - - @Test - fun apply() { - // given - val pageable = PageRequest.of(1, 10) - - every { query.setFirstResult(10) } returns query - every { query.setMaxResults(10) } returns query - - // when - SpringDataPageableLimitClause(pageable).apply(query) - - // then - verify(exactly = 1) { - query.firstResult = 10 - query.maxResults = 10 - } - - confirmVerified(query) - } - - @Test - fun `apply - unPaged`() { - // given - val pageable = Pageable.unpaged() - - // when - SpringDataPageableLimitClause(pageable).apply(query) - - // then - confirmVerified(query) - } -} diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/orderby/SpringDataPageableOrderByClauseTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/orderby/SpringDataPageableOrderByClauseTest.kt deleted file mode 100644 index 038b00407..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/query/clause/orderby/SpringDataPageableOrderByClauseTest.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Sort -import org.springframework.data.jpa.repository.query.QueryUtils -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Order -import javax.persistence.criteria.Root - -@ExtendWith(MockKExtension::class) -internal class SpringDataPageableOrderByClauseTest : WithAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: CriteriaQuery<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun apply() { - // given - mockkStatic(QueryUtils::class) - - val sort = Sort.by(Sort.Direction.ASC, "test") - val pageable = PageRequest.of(1, 10, sort) - - val root: Root<*> = mockk() - val order: Order = mockk() - - every { froms.root } returns root - every { QueryUtils.toOrders(sort, root, criteriaBuilder) } returns listOf(order) - every { query.orderBy(listOf(order)) } returns query - - // when - SpringDataPageableOrderByClause(pageable).apply(froms, query, criteriaBuilder) - - // then - verify(exactly = 1) { - froms.root - QueryUtils.toOrders(sort, root, criteriaBuilder) - query.orderBy(listOf(order)) - } - - clearStaticMockk(QueryUtils::class) - } -} \ No newline at end of file diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/expression/SpringDataQueryDslImplExpressionTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/expression/SpringDataQueryDslImplExpressionTest.kt deleted file mode 100644 index 9103afab5..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/expression/SpringDataQueryDslImplExpressionTest.kt +++ /dev/null @@ -1,366 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.* -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.expression.WhenDsl -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplExpressionTest : WithKotlinJdslAssertions { - @Test - fun entity() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class) - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java)) - } - - @Test - fun entityWithAlias() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class, "data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun alias() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = Data1::class.alias("data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun literal() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = literal(10) - } - - assertThat(actual).isEqualTo(LiteralSpec(10)) - } - - @Test - fun nullLiteral() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = nullLiteral(Int::class.java) - } - - assertThat(actual).isEqualTo(NullLiteralSpec(Int::class.java)) - } - - @Test - fun col() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = col(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun column() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = column(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun max() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = max(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MaxSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun min() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = min(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MinSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun avg() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = avg(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - AvgSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun sum() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = sum(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - SumSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun count() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = count(distinct = true, col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countNonDistinct() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = count(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countDistinct() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = countDistinct(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun greatest() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = greatest(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - GreatestSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun least() { - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = least(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - LeastSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun caseList() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = case( - listOf( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - ), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun caseVararg() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = case( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun `when`() { - val predicate1: PredicateSpec = mockk() - val expression1: ExpressionSpec = mockk() - - val actual: CaseSpec.WhenSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1, expression1) - } - - assertThat(actual).isEqualTo(CaseSpec.WhenSpec(predicate1, expression1)) - } - - @Test - fun whenWithPredicate() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1) - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - @Test - fun whenWithLambda() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = `when` { predicate1 } - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - - @Test - fun functionVarArg() { - // when - val actual: FunctionSpec - SpringDataQueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - @Test - fun functionList() { - // when - val actual: FunctionSpec - SpringDataQueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - listOf( - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - class Data1 { - val id: Int = 10 - } -} diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplFetchTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplFetchTest.kt deleted file mode 100644 index 86853554c..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplFetchTest.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.spec.FetchJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import javax.persistence.criteria.JoinType - -internal class SpringDataQueryDslImplFetchTest : WithKotlinJdslAssertions { - @Test - fun fetch() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - fetch(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val fetchSpec = FetchJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(fetchSpec, fetchSpec, fetchSpec, fetchSpec)) - ) - - val exception1 = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception1).hasMessageContaining("This query does not support fetch") - - val exception2 = catchThrowable(IllegalStateException::class) { - actual.createPageableQuerySpec() - } - - assertThat(exception2).hasMessageContaining("This query does not support fetch") - - val exception3 = catchThrowable(IllegalStateException::class) { - actual.createPageableCountQuerySpec() - } - - assertThat(exception3).hasMessageContaining("This query does not support fetch") - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} \ No newline at end of file diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplFromTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplFromTest.kt deleted file mode 100644 index fe430cc1d..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplFromTest.kt +++ /dev/null @@ -1,113 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplFromTest : WithKotlinJdslAssertions { - @Test - fun fromJavaClass() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromKotlinClass() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromEntitySpec() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class, "data1")) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - } - - class Data1 -} \ No newline at end of file diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplJoinTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplJoinTest.kt deleted file mode 100644 index c852242c5..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplJoinTest.kt +++ /dev/null @@ -1,260 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.CrossJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleAssociatedJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test -import javax.persistence.criteria.JoinType - -internal class SpringDataQueryDslImplJoinTest : WithKotlinJdslAssertions { - @Test - fun on() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = on(predicateSpec) - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun onLambda() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = on { predicateSpec } - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun join() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun associate() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun updateAssociate() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaUpdateQuerySpec() - - assertThat(criteriaQuerySpec.associate).isEqualTo( - SimpleAssociatedJoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun updateAssociateOnlyAllowsSimpleAssociatedJoinSpec() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2)) - } - - val result = catchThrowable(IllegalStateException::class) { actual.createCriteriaUpdateQuerySpec() } - - assertThat(result).hasMessage("This query only support associate") - } - - @Test - fun crossJoin() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(Data2::class, on(predicateSpec1)) - join(entity(Data2::class), on(predicateSpec1)) - where(predicateSpec2) - } - - // then - val joinSpec = CrossJoinSpec(EntitySpec(Data2::class.java)) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplRelationTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplRelationTest.kt deleted file mode 100644 index 134a0d861..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/from/SpringDataQueryDslImplRelationTest.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.from - -import com.linecorp.kotlinjdsl.querydsl.from.Relation -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplRelationTest : WithKotlinJdslAssertions { - @Test - fun on() { - val actual: Relation - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2) - } - - assertThat(actual).isEqualTo(Relation("data2")) - } - - @Test - fun onCollection() { - val actual: Relation - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2List) - } - - assertThat(actual).isEqualTo(Relation("data2List")) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} \ No newline at end of file diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/groupby/SpringDataQueryDslImplGroupByTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/groupby/SpringDataQueryDslImplGroupByTest.kt deleted file mode 100644 index da2227a85..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/groupby/SpringDataQueryDslImplGroupByTest.kt +++ /dev/null @@ -1,124 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.groupby - -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplGroupByTest : WithKotlinJdslAssertions { - @Test - fun noGroupBy() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - @Test - fun groupByVararg() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(columnSpec1, columnSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - @Test - fun groupByList() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(listOf(columnSpec1, columnSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - class Data1 -} \ No newline at end of file diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/having/SpringDataQueryDslImplHavingTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/having/SpringDataQueryDslImplHavingTest.kt deleted file mode 100644 index 0dfded111..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/having/SpringDataQueryDslImplHavingTest.kt +++ /dev/null @@ -1,125 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.having - -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplHavingTest : WithKotlinJdslAssertions { - @Test - fun noHaving() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - @Test - fun having() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - @Test - fun multipleHaving() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec1) - having(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - class Data1 -} \ No newline at end of file diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/hint/SpringDataQueryDslImplHintTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/hint/SpringDataQueryDslImplHintTest.kt deleted file mode 100644 index c5220fc69..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/hint/SpringDataQueryDslImplHintTest.kt +++ /dev/null @@ -1,111 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.hint - -import com.linecorp.kotlinjdsl.query.clause.hint.JpaQueryHintClauseImpl -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import javax.persistence.Query - -internal class SpringDataQueryDslImplHintTest : WithKotlinJdslAssertions { - @Test - fun noHints() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaQueryHintClauseImpl(emptyMap()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.jpaHint).isEqualTo( - JpaQueryHintClauseImpl(emptyMap()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.jpaHint).isEqualTo( - JpaQueryHintClauseImpl(emptyMap()) - ) - } - - @Test - fun hintsVararg() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints("hint1" to true, "hint2" to "comment") - } - - // then - val hintClause = JpaQueryHintClauseImpl( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.jpaHint).isEqualTo( - hintClause - ) - } - - @Test - fun hintsMap() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints(mapOf("hint1" to true, "hint2" to "comment")) - } - - // then - val hintClause = JpaQueryHintClauseImpl( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.jpaHint).isEqualTo( - hintClause - ) - } - - class Data1 -} diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/limit/SpringDataQueryDslImplLimitTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/limit/SpringDataQueryDslImplLimitTest.kt deleted file mode 100644 index 859c29e3f..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/limit/SpringDataQueryDslImplLimitTest.kt +++ /dev/null @@ -1,190 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.limit - -import com.linecorp.kotlinjdsl.query.clause.limit.LimitClause -import com.linecorp.kotlinjdsl.spring.data.query.clause.limit.SpringDataPageableLimitClause -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable -import javax.persistence.Query - -internal class SpringDataQueryDslImplLimitTest : WithKotlinJdslAssertions { - @Test - fun noLimit() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = null, maxResults = null) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataPageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - } - - @Test - fun offset() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - offset(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = 10, maxResults = null) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataPageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - } - - @Test - fun maxResults() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - maxResults(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = null, maxResults = 10) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataPageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - } - - @Test - fun limitMaxResults() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = null, maxResults = 10) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataPageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - } - - @Test - fun limitOffsetAndMaxResults() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(1, 10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause(offset = 1, maxResults = 10) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataPageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - } - - @Test - fun pageable() { - // given - val pageable = PageRequest.of(1, 10) - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - this.pageable = pageable - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataPageableLimitClause(pageable) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - LimitClause.empty - ) - } - - class Data1 -} diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/orderby/SpringDataQueryDslImplOrderByWhereTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/orderby/SpringDataQueryDslImplOrderByWhereTest.kt deleted file mode 100644 index f05e13f3c..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/orderby/SpringDataQueryDslImplOrderByWhereTest.kt +++ /dev/null @@ -1,169 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.orderby - -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.spec.ExpressionOrderSpec -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.spring.data.query.clause.orderby.SpringDataPageableOrderByClause -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable - -internal class SpringDataQueryDslImplOrderByWhereTest : WithKotlinJdslAssertions { - @Test - fun noOrderBy() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataPageableOrderByClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun orderByVararg() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(orderSpec1, orderSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataPageableOrderByClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun orderByList() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(listOf(orderSpec1, orderSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataPageableOrderByClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun pageable() { - // given - val pageable = PageRequest.of(10, 10) - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - this.pageable = pageable - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataPageableOrderByClause(pageable) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun asc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.asc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, true)) - } - - @Test - fun desc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - SpringDataQueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.desc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, false)) - } - - class Data1 -} \ No newline at end of file diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/predicate/SpringDataQueryDslImplPredicateTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/predicate/SpringDataQueryDslImplPredicateTest.kt deleted file mode 100644 index 5de9aee60..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/predicate/SpringDataQueryDslImplPredicateTest.kt +++ /dev/null @@ -1,567 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.* -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test -import org.springframework.data.domain.Range - -internal class SpringDataQueryDslImplPredicateTest : WithKotlinJdslAssertions { - @Test - fun not() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = not(predicateSpec) - } - - assertThat(actual).isEqualTo(NotSpec(predicateSpec)) - } - - @Test - fun andVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = and(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun andList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = and(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = or(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = or(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun equalValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.equal(value) - } - - assertThat(actual).isEqualTo(EqualValueSpec(expressionSpec, value)) - } - - @Test - fun equalExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.equal(expressionSpec2) - } - - assertThat(actual).isEqualTo(EqualExpressionSpec(expressionSpec1, expressionSpec2)) - } - - @Test - fun notEqualValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.notEqual(value) - } - - assertThat(actual).isEqualTo(NotSpec(EqualValueSpec(expressionSpec, value))) - } - - @Test - fun notEqualExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.notEqual(expressionSpec2) - } - - assertThat(actual).isEqualTo(NotSpec(EqualExpressionSpec(expressionSpec1, expressionSpec2))) - } - - @Test - fun inValueVararg() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(value1, value2) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inValueList() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(listOf(value1, value2)) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inExpressionVararg() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun inExpressionList() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(listOf(expressionSpec2, expressionSpec3)) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun greaterThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun greaterThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun greaterThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun greaterThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun greaterThanBound() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.inclusive("test") - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(bound) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, "test", true)) - } - - @Test - fun greaterThanBoundEmpty() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.unbounded() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(bound) - } - - assertThat(actual).isEqualTo(PredicateSpec.empty) - } - - @Test - fun lessThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun lessThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun lessThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanBound() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.inclusive("test") - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(bound) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, "test", true)) - } - - @Test - fun lessThanBoundEmpty() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.unbounded() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(bound) - } - - assertThat(actual).isEqualTo(PredicateSpec.empty) - } - - @Test - fun betweenValue() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(value1, value2) - } - - assertThat(actual).isEqualTo(BetweenValueSpec(expressionSpec, value1, value2)) - } - - @Test - fun betweenExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.between(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(BetweenExpressionSpec(expressionSpec1, expressionSpec2, expressionSpec3)) - } - - @Test - fun betweenRange() { - val expressionSpec: ExpressionSpec = mockk() - val range = Range.leftOpen("test1", "test2") - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(range) - } - - assertThat(actual).isEqualTo( - AndSpec( - listOf( - GreaterThanValueSpec(expressionSpec, "test1", false), - LessThanValueSpec(expressionSpec, "test2", true) - ) - ) - ) - } - - @Test - fun betweenRangeEmpty() { - val expressionSpec: ExpressionSpec = mockk() - val range = Range.unbounded() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(range) - } - - assertThat(actual).isEqualTo( - AndSpec(listOf(PredicateSpec.empty, PredicateSpec.empty)) - ) - } - - @Test - fun isTrue() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isTrue() - } - - assertThat(actual).isEqualTo(IsTrueSpec(expressionSpec)) - } - - @Test - fun isFalse() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isFalse() - } - - assertThat(actual).isEqualTo(IsFalseSpec(expressionSpec)) - } - - @Test - fun isNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNull() - } - - assertThat(actual).isEqualTo(IsNullSpec(expressionSpec)) - } - - @Test - fun isNotNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNotNull() - } - - assertThat(actual).isEqualTo(NotSpec(IsNullSpec(expressionSpec))) - } - - @Test - fun like() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.like(value) - } - - assertThat(actual).isEqualTo(LikeSpec(expressionSpec, value)) - } - - @Test - fun notLike() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataQueryDslImpl(String::class.java).apply { - actual = expressionSpec.notLike(value) - } - - assertThat(actual).isEqualTo(NotSpec(LikeSpec(expressionSpec, value))) - } -} \ No newline at end of file diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/select/SpringDataQueryDslImplMultiSelectTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/select/SpringDataQueryDslImplMultiSelectTest.kt deleted file mode 100644 index 5aa5bc373..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/select/SpringDataQueryDslImplMultiSelectTest.kt +++ /dev/null @@ -1,454 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.CountMultiSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplMultiSelectTest : WithKotlinJdslAssertions { - @Test - fun select() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - select(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectNonDistinct() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - select(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectDistinct() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - selectDistinct(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMulti() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - selectMulti(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiNonDistinctVararg() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - selectMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiNonDistinctList() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - selectMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiDistinctVararg() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - selectDistinctMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiDistinctList() { - // when - val actual = SpringDataQueryDslImpl(Row::class.java).apply { - selectDistinctMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - data class Row( - val id: String, - val name: String, - ) - - class Data1 { - val id: String = "test" - val name: String = "test_name" - } -} \ No newline at end of file diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/select/SpringDataQueryDslImplSingleSelectTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/select/SpringDataQueryDslImplSingleSelectTest.kt deleted file mode 100644 index 09a7f7d22..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/select/SpringDataQueryDslImplSingleSelectTest.kt +++ /dev/null @@ -1,284 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.CountSingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.CountSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplSingleSelectTest : WithKotlinJdslAssertions { - @Test - fun noSelect() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - from(entity(Data1::class)) - } - - // then - val exception1 = catchThrowable(IllegalStateException::class) { - actual.createCriteriaQuerySpec() - } - - assertThat(exception1).hasMessageContaining("There is no select clause in query") - - val exception2 = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception2).hasMessageContaining("There is no select clause in query") - - val exception3 = catchThrowable(IllegalStateException::class) { - actual.createPageableQuerySpec() - } - - assertThat(exception3).hasMessageContaining("There is no select clause in query") - - val exception4 = catchThrowable(IllegalStateException::class) { - actual.createPageableCountQuerySpec() - } - - assertThat(exception4).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectEntity() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectExpression() { - // when - val actual = SpringDataQueryDslImpl(String::class.java).apply { - select(distinct = true, column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectNonDistinctEntity() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = false, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectNonDistinctExpression() { - // when - val actual = SpringDataQueryDslImpl(String::class.java).apply { - select(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectDistinctEntity() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - selectDistinct(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectDistinctExpression() { - // when - val actual = SpringDataQueryDslImpl(String::class.java).apply { - selectDistinct(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun `inject countSelectClause`() { - val countSelectClause: SingleSelectClause - - // when - val actual = SpringDataQueryDslImpl(String::class.java).apply { - selectDistinct(column(Data1::id)) - from(entity(Data1::class)) - } - - SpringDataQueryDslImpl(Long::class.java).apply { - countSelectClause = select(count(column(Data1::name))) - } - - // then - val pageableCountQuerySpec = actual.createPageableCountQuerySpec(countSelectClause) - - assertThat(pageableCountQuerySpec.select).isEqualTo( - SingleSelectClause( - returnType = Long::class.java, - distinct = false, - expression = CountSpec( - distinct = false, - expression = ColumnSpec(EntitySpec(Data1::class.java), "name") - ) - ) - ) - } - - class Data1 { - val id: String = "test" - val name: String = "name" - } -} diff --git a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/where/SpringDataQueryDslImplWhereTest.kt b/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/where/SpringDataQueryDslImplWhereTest.kt deleted file mode 100644 index 95f6017bd..000000000 --- a/spring/data-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/querydsl/where/SpringDataQueryDslImplWhereTest.kt +++ /dev/null @@ -1,125 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.querydsl.where - -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.spring.data.querydsl.SpringDataQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataQueryDslImplWhereTest : WithKotlinJdslAssertions { - @Test - fun noWhere() { - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - } - - @Test - fun where() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - } - - @Test - fun wheres() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = SpringDataQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec1) - where(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - class Data1 -} \ No newline at end of file diff --git a/spring/data-hibernate-reactive-jakarta/build.gradle.kts b/spring/data-hibernate-reactive-jakarta/build.gradle.kts deleted file mode 100644 index 718615b2b..000000000 --- a/spring/data-hibernate-reactive-jakarta/build.gradle.kts +++ /dev/null @@ -1,27 +0,0 @@ -apply() - -coverage { - exclude(project) -} - -dependencies { - compileOnly(libs.spring.jpa3) - compileOnly(libs.hibernate.reactive.jakarta) - compileOnly(libs.bundles.mutiny) - - api(Modules.reactiveCoreJakarta) - api(Modules.hibernateReactiveJakarta) - api(Modules.springDataReactiveCoreJakarta) - implementation(libs.jakarta.persistence.api) - - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntityJakarta) - testImplementation(Modules.testFixtureHibernateReactiveJakarta) - testImplementation(Modules.testFixtureIntegrationReactiveJakarta) - testImplementation(libs.bundles.mutiny) - testImplementation(libs.spring.boot3.test) - testImplementation(libs.spring.jpa3) - testImplementation(libs.hibernate.reactive.jakarta) - testImplementation(libs.h2) - testImplementation(libs.coroutine.jdk8) -} diff --git a/spring/data-hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/SpringDataHibernateMutinyReactiveQueryFactory.kt b/spring/data-hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/SpringDataHibernateMutinyReactiveQueryFactory.kt deleted file mode 100644 index e3994a619..000000000 --- a/spring/data-hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/SpringDataHibernateMutinyReactiveQueryFactory.kt +++ /dev/null @@ -1,74 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.query - -import com.linecorp.kotlinjdsl.query.creator.MutinyReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.MutinyStatelessReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.spring.reactive.SpringDataReactiveQueryFactory -import com.linecorp.kotlinjdsl.spring.reactive.SpringDataReactiveQueryFactoryImpl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveSubqueryDsl -import io.smallrye.mutiny.coroutines.asUni -import io.smallrye.mutiny.coroutines.awaitSuspending -import kotlinx.coroutines.* -import org.hibernate.reactive.mutiny.Mutiny -import kotlin.coroutines.CoroutineContext - -class SpringDataHibernateMutinyReactiveQueryFactory( - /** - * When methods such as withSession and withTransaction are executed, the scope responsible for the actual DB processing must always be executed in the thread where the withXXX method is executed. - * For this, we will use Unconfined Dispatcher by default. - * However, we prevent hard-coding the dispatcher and inject and process executeQueryContext so that we can change it to a separate CoroutineContext when we want to change it. - */ - private val executeQueryContext: CoroutineContext = Dispatchers.Unconfined, - private val sessionFactory: Mutiny.SessionFactory, - private val subqueryCreator: SubqueryCreator -) { - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun withFactory(block: suspend (SpringDataReactiveQueryFactory) -> T): T = - sessionFactory.withSession { makeFactory(it).let { makeScope().async { block(it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun statelessWithFactory(block: suspend (SpringDataReactiveQueryFactory) -> T): T = - sessionFactory.withStatelessSession { makeFactory(it).let { makeScope().async { block(it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun withFactory(block: suspend (Mutiny.Session, SpringDataReactiveQueryFactory) -> T): T = - sessionFactory.withSession { session -> makeFactory(session).let { makeScope().async { block(session, it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun transactionWithFactory(block: suspend (SpringDataReactiveQueryFactory) -> T): T = - sessionFactory.withTransaction { session -> makeFactory(session).let { makeScope().async { block(it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun transactionWithFactory(block: suspend (Mutiny.Session, SpringDataReactiveQueryFactory) -> T): T = - sessionFactory.withTransaction { session -> makeFactory(session).let { makeScope().async { block(session, it) } }.asUni() } - .awaitSuspending() - - fun subquery(classType: Class, dsl: SpringDataReactiveSubqueryDsl.() -> Unit) = - SubqueryExpressionSpec( - spec = SpringDataReactiveReactiveQueryDslImpl(classType).apply(dsl).createSubquerySpec(), - subqueryCreator = subqueryCreator - ) - - private fun makeScope() = CoroutineScope(SupervisorJob() + executeQueryContext) - - private fun makeFactory(it: Mutiny.Session) = SpringDataReactiveQueryFactoryImpl( - subqueryCreator = subqueryCreator, - criteriaQueryCreator = MutinyReactiveCriteriaQueryCreator(sessionFactory.criteriaBuilder, it) - ) - - private fun makeFactory(it: Mutiny.StatelessSession) = SpringDataReactiveQueryFactoryImpl( - subqueryCreator = subqueryCreator, - criteriaQueryCreator = MutinyStatelessReactiveCriteriaQueryCreator(sessionFactory.criteriaBuilder, it) - ) -} diff --git a/spring/data-hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/SpringDataHibernateMutinyReactiveQueryFactoryExtensions.kt b/spring/data-hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/SpringDataHibernateMutinyReactiveQueryFactoryExtensions.kt deleted file mode 100644 index 92b015d5d..000000000 --- a/spring/data-hibernate-reactive-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/SpringDataHibernateMutinyReactiveQueryFactoryExtensions.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.query - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.* -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveCriteriaQueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactivePageableQueryDsl -import org.springframework.data.domain.Pageable - - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.singleQuery( - noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit -) = statelessWithFactory { factory -> factory.singleQuery(dsl) } - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.singleQueryOrNull( - noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit -) = statelessWithFactory { factory -> factory.singleQueryOrNull(dsl) } - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.listQuery( - noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit -) = statelessWithFactory { factory -> factory.listQuery(dsl) } - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.updateQuery( - noinline dsl: CriteriaUpdateQueryDsl.() -> Unit -) = statelessWithFactory { factory -> factory.updateQuery(dsl).executeUpdate() } - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.deleteQuery( - noinline dsl: CriteriaDeleteQueryDsl.() -> Unit -) = statelessWithFactory { factory -> factory.deleteQuery(dsl).executeUpdate() } - -inline fun SpringDataHibernateMutinyReactiveQueryFactory.subquery( - noinline dsl: SubqueryDsl.() -> Unit -) = subquery(T::class.java, dsl) - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.pageQuery( - pageable: Pageable, - noinline dsl: SpringDataReactivePageableQueryDsl.() -> Unit -) = statelessWithFactory { factory -> factory.pageQuery(T::class.java, pageable, dsl) } - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.pageQuery( - pageable: Pageable, - noinline dsl: SpringDataReactivePageableQueryDsl.() -> Unit, - noinline countProjection: SpringDataReactivePageableQueryDsl.() -> SingleSelectClause -) = statelessWithFactory { factory -> factory.pageQuery(T::class.java, pageable, dsl, countProjection) } diff --git a/spring/data-hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataMutinyReactiveQueryFactoryIntegrationTest.kt b/spring/data-hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataMutinyReactiveQueryFactoryIntegrationTest.kt deleted file mode 100644 index a1a945deb..000000000 --- a/spring/data-hibernate-reactive-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataMutinyReactiveQueryFactoryIntegrationTest.kt +++ /dev/null @@ -1,304 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.querydsl.from.associate -import com.linecorp.kotlinjdsl.querydsl.from.fetch -import com.linecorp.kotlinjdsl.querydsl.where.WhereDsl -import com.linecorp.kotlinjdsl.spring.data.reactive.query.* -import com.linecorp.kotlinjdsl.spring.reactive.listQuery -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveCriteriaQueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactivePageableQueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.singleQuery -import com.linecorp.kotlinjdsl.spring.reactive.updateQuery -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.EntityDsl -import com.linecorp.kotlinjdsl.test.entity.order.Order -import com.linecorp.kotlinjdsl.test.entity.order.OrderGroup -import com.linecorp.kotlinjdsl.test.entity.order.OrderItem -import com.linecorp.kotlinjdsl.test.reactive.MutinySessionFactoryExtension -import com.linecorp.kotlinjdsl.test.reactive.runBlocking -import io.smallrye.mutiny.coroutines.awaitSuspending -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.Page -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Sort - -@ExtendWith(MutinySessionFactoryExtension::class) -internal class SpringDataMutinyReactiveQueryFactoryIntegrationTest : EntityDsl, WithKotlinJdslAssertions { - private lateinit var sessionFactory: Mutiny.SessionFactory - - private lateinit var queryFactory: SpringDataHibernateMutinyReactiveQueryFactory - - private val order1 = order { purchaserId = 1000 } - private val order2 = order { purchaserId = 1000 } - private val order3 = order { purchaserId = 1000 } - private val order4 = order { purchaserId = 2000 } - - @BeforeEach - fun setUp() { - queryFactory = SpringDataHibernateMutinyReactiveQueryFactory( - sessionFactory = sessionFactory, - subqueryCreator = SubqueryCreatorImpl() - ) - sequenceOf(order1, order2, order3, order4).forEach { - runBlocking { - sessionFactory.withSession { session -> session.persist(it).flatMap { session.flush() } } - .awaitSuspending() - } - } - } - - @Test - fun executeSessionWithFactory() = runBlocking { - val order = order { purchaserId = 5000 } - val actual = queryFactory.withFactory { session, factory -> - session.persist(order).awaitSuspending() - session.flush().awaitSuspending() - - factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(5000)) - } - } - - assertThat(actual.id).isEqualTo(order.id) - } - - @Test - fun executeWithFactory() = runBlocking { - val actual = queryFactory.withFactory { factory -> - factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(2000)) - } - } - - assertThat(actual.id).isEqualTo(order4.id) - } - - @Test - fun singleQuery() = runBlocking { - // when - val actual = queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(2000)) - } - - // then - assertThat(actual.id).isEqualTo(order4.id) - } - - @Test - fun `singleQueryOrNull return null`() = runBlocking { - // when - val actual = queryFactory.singleQueryOrNull { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(3000)) - } - - // then - assertThat(actual).isNull() - } - - @Test - fun singleQueryOrNull() = runBlocking { - // when - val actual = queryFactory.singleQueryOrNull { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(2000)) - }!! - - // then - assertThat(actual.id).isEqualTo(order4.id) - } - - @Test - fun listQuery() = runBlocking { - // when - val actual = queryFactory.listQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - } - - // then - assertThat(actual).containsExactlyInAnyOrder(order1, order2, order3, order4) - } - - @Test - fun subquery() = runBlocking { - val subquery = queryFactory.subquery { - val order = entity(Order::class, "o") - - select(count(col(order, Order::id))) - from(order) - where( - col(order, Order::purchaserId).equal(col(Order::purchaserId)), - ) - } - - // then - assertThat(queryFactory.listQuery { - select(subquery) - from(entity(Order::class)) - orderBy(col(Order::id).asc()) - }).isEqualTo(listOf(order3.id, order3.id, order3.id, order1.id)) - } - - - @Test - fun updateQuery() = runBlocking { - // when - queryFactory.updateQuery { - where(col(Order::purchaserId).equal(2000)) - set(col(Order::purchaserId), 3000) - } - - // then - val actual = queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(3000)) - } - assertThat(actual.id).isEqualTo(order4.id) - - assertThat(actual.purchaserId).isEqualTo(3000) - } - - @Test - fun transaction() = runBlocking { - // when - try { - queryFactory.transactionWithFactory { session, queryFactory -> - session.merge(order1).awaitSuspending() - - val orders = queryFactory.listQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - } - - queryFactory.updateQuery { - where(col(Order::id).equal(orders.first().id)) - set(col(Order::purchaserId), orders.first().purchaserId + 1) - }.executeUpdate() - - queryFactory.updateQuery { - throw IllegalStateException("transaction rollback") - }.executeUpdate() - } - } catch (e: IllegalStateException) { - assertThat(e).hasMessage("transaction rollback") - } - - assertThat(queryFactory.transactionWithFactory { queryFactory -> - queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).equal(order1.id)) - } - }).isEqualTo(order1) - } - - @Test - fun deleteQuery() = runBlocking { - // when - queryFactory.deleteQuery { - where(col(OrderItem::id).equal(order1.groups.first().items.first().id)) - } - - // then - val actual = queryFactory.listQuery { - select(entity(OrderItem::class)) - from(entity(OrderItem::class)) - where(col(Order::id).equal(order1.id)) - associate(OrderItem::group) - associate(OrderGroup::order) - } - assertThat(actual).isEmpty() - } - - @Test - fun pageQuery() = runBlocking { - // when - val actual = queryFactory.pageQuery(PageRequest.of(1, 2, Sort.by("id"))) { - select(col(Order::id)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(1000)) - } - - // then - assertThat(actual.content).isEqualTo(listOf(order3.id)) - - assertThat(actual.totalElements).isEqualTo(3) - assertThat(actual.totalPages).isEqualTo(2) - assertThat(actual.number).isEqualTo(1) - } - - @Test - fun pageExtractWhereQuery() = runBlocking { - // given - val pageable = PageRequest.of(0, 10) - fun WhereDsl.equalValueSpec() = column(Order::purchaserId).equal(1000L) - - val dsl: SpringDataReactivePageableQueryDsl.() -> Unit = { - select(entity(Order::class)) - from(entity(Order::class)) - where(equalValueSpec()) - } - - val dslCriteria: SpringDataReactiveCriteriaQueryDsl.() -> Unit = { - select(entity(Order::class)) - from(entity(Order::class)) - where(equalValueSpec()) - } - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl) - val actualList: List = queryFactory.listQuery(dslCriteria) - - // then - assertThat(actual.content.size).isEqualTo(3) - assertThat(actual.map { it.id }).containsExactlyInAnyOrder(order1.id, order2.id, order3.id) - assertThat(actualList.map { it.id }).containsExactlyInAnyOrder(order1.id, order2.id, order3.id) - } - - @Test - fun `pageQuery with countProjection`() = runBlocking { - // given - val pageable = PageRequest.of(0, 1, Sort.by(Sort.Direction.DESC, Order::id.name)) - - val dsl: SpringDataReactivePageableQueryDsl.() -> Unit = { - select(entity(Order::class)) - from(entity(Order::class)) - } - - val countProjection: SpringDataReactivePageableQueryDsl.() -> SingleSelectClause = { - select(count(column(Order::purchaserId))) - } - - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl, countProjection) - - // then - assertThat(actual).hasSize(1) - assertThat(actual.content.first().id).isEqualTo(order4.id) - } -} diff --git a/spring/data-hibernate-reactive/build.gradle.kts b/spring/data-hibernate-reactive/build.gradle.kts deleted file mode 100644 index e966fd7a3..000000000 --- a/spring/data-hibernate-reactive/build.gradle.kts +++ /dev/null @@ -1,23 +0,0 @@ -apply() - -dependencies { - compileOnly(libs.spring.jpa) - compileOnly(libs.hibernate.reactive) - compileOnly(libs.bundles.mutiny) - - api(Modules.reactiveCore) - api(Modules.hibernateReactive) - api(Modules.springDataReactiveCore) - implementation(libs.java.persistence.api) - - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntity) - testImplementation(Modules.testFixtureHibernateReactive) - testImplementation(Modules.testFixtureIntegrationReactive) - testImplementation(libs.bundles.mutiny) - testImplementation(libs.spring.boot.test) - testImplementation(libs.spring.jpa) - testImplementation(libs.hibernate.reactive) - testImplementation(libs.h2) - testImplementation(libs.coroutine.jdk8) -} diff --git a/spring/data-hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/SpringDataHibernateMutinyReactiveQueryFactory.kt b/spring/data-hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/SpringDataHibernateMutinyReactiveQueryFactory.kt deleted file mode 100644 index e3994a619..000000000 --- a/spring/data-hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/SpringDataHibernateMutinyReactiveQueryFactory.kt +++ /dev/null @@ -1,74 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.query - -import com.linecorp.kotlinjdsl.query.creator.MutinyReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.MutinyStatelessReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.spring.reactive.SpringDataReactiveQueryFactory -import com.linecorp.kotlinjdsl.spring.reactive.SpringDataReactiveQueryFactoryImpl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveSubqueryDsl -import io.smallrye.mutiny.coroutines.asUni -import io.smallrye.mutiny.coroutines.awaitSuspending -import kotlinx.coroutines.* -import org.hibernate.reactive.mutiny.Mutiny -import kotlin.coroutines.CoroutineContext - -class SpringDataHibernateMutinyReactiveQueryFactory( - /** - * When methods such as withSession and withTransaction are executed, the scope responsible for the actual DB processing must always be executed in the thread where the withXXX method is executed. - * For this, we will use Unconfined Dispatcher by default. - * However, we prevent hard-coding the dispatcher and inject and process executeQueryContext so that we can change it to a separate CoroutineContext when we want to change it. - */ - private val executeQueryContext: CoroutineContext = Dispatchers.Unconfined, - private val sessionFactory: Mutiny.SessionFactory, - private val subqueryCreator: SubqueryCreator -) { - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun withFactory(block: suspend (SpringDataReactiveQueryFactory) -> T): T = - sessionFactory.withSession { makeFactory(it).let { makeScope().async { block(it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun statelessWithFactory(block: suspend (SpringDataReactiveQueryFactory) -> T): T = - sessionFactory.withStatelessSession { makeFactory(it).let { makeScope().async { block(it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun withFactory(block: suspend (Mutiny.Session, SpringDataReactiveQueryFactory) -> T): T = - sessionFactory.withSession { session -> makeFactory(session).let { makeScope().async { block(session, it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun transactionWithFactory(block: suspend (SpringDataReactiveQueryFactory) -> T): T = - sessionFactory.withTransaction { session -> makeFactory(session).let { makeScope().async { block(it) } }.asUni() } - .awaitSuspending() - - @Suppress("EXPERIMENTAL_IS_NOT_ENABLED") - @OptIn(ExperimentalCoroutinesApi::class) - suspend fun transactionWithFactory(block: suspend (Mutiny.Session, SpringDataReactiveQueryFactory) -> T): T = - sessionFactory.withTransaction { session -> makeFactory(session).let { makeScope().async { block(session, it) } }.asUni() } - .awaitSuspending() - - fun subquery(classType: Class, dsl: SpringDataReactiveSubqueryDsl.() -> Unit) = - SubqueryExpressionSpec( - spec = SpringDataReactiveReactiveQueryDslImpl(classType).apply(dsl).createSubquerySpec(), - subqueryCreator = subqueryCreator - ) - - private fun makeScope() = CoroutineScope(SupervisorJob() + executeQueryContext) - - private fun makeFactory(it: Mutiny.Session) = SpringDataReactiveQueryFactoryImpl( - subqueryCreator = subqueryCreator, - criteriaQueryCreator = MutinyReactiveCriteriaQueryCreator(sessionFactory.criteriaBuilder, it) - ) - - private fun makeFactory(it: Mutiny.StatelessSession) = SpringDataReactiveQueryFactoryImpl( - subqueryCreator = subqueryCreator, - criteriaQueryCreator = MutinyStatelessReactiveCriteriaQueryCreator(sessionFactory.criteriaBuilder, it) - ) -} diff --git a/spring/data-hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/SpringDataHibernateMutinyReactiveQueryFactoryExtensions.kt b/spring/data-hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/SpringDataHibernateMutinyReactiveQueryFactoryExtensions.kt deleted file mode 100644 index 92b015d5d..000000000 --- a/spring/data-hibernate-reactive/src/main/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/SpringDataHibernateMutinyReactiveQueryFactoryExtensions.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.query - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.* -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveCriteriaQueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactivePageableQueryDsl -import org.springframework.data.domain.Pageable - - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.singleQuery( - noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit -) = statelessWithFactory { factory -> factory.singleQuery(dsl) } - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.singleQueryOrNull( - noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit -) = statelessWithFactory { factory -> factory.singleQueryOrNull(dsl) } - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.listQuery( - noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit -) = statelessWithFactory { factory -> factory.listQuery(dsl) } - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.updateQuery( - noinline dsl: CriteriaUpdateQueryDsl.() -> Unit -) = statelessWithFactory { factory -> factory.updateQuery(dsl).executeUpdate() } - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.deleteQuery( - noinline dsl: CriteriaDeleteQueryDsl.() -> Unit -) = statelessWithFactory { factory -> factory.deleteQuery(dsl).executeUpdate() } - -inline fun SpringDataHibernateMutinyReactiveQueryFactory.subquery( - noinline dsl: SubqueryDsl.() -> Unit -) = subquery(T::class.java, dsl) - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.pageQuery( - pageable: Pageable, - noinline dsl: SpringDataReactivePageableQueryDsl.() -> Unit -) = statelessWithFactory { factory -> factory.pageQuery(T::class.java, pageable, dsl) } - -suspend inline fun SpringDataHibernateMutinyReactiveQueryFactory.pageQuery( - pageable: Pageable, - noinline dsl: SpringDataReactivePageableQueryDsl.() -> Unit, - noinline countProjection: SpringDataReactivePageableQueryDsl.() -> SingleSelectClause -) = statelessWithFactory { factory -> factory.pageQuery(T::class.java, pageable, dsl, countProjection) } diff --git a/spring/data-hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataMutinyReactiveQueryFactoryIntegrationTest.kt b/spring/data-hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataMutinyReactiveQueryFactoryIntegrationTest.kt deleted file mode 100644 index a1a945deb..000000000 --- a/spring/data-hibernate-reactive/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataMutinyReactiveQueryFactoryIntegrationTest.kt +++ /dev/null @@ -1,304 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreatorImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.querydsl.from.associate -import com.linecorp.kotlinjdsl.querydsl.from.fetch -import com.linecorp.kotlinjdsl.querydsl.where.WhereDsl -import com.linecorp.kotlinjdsl.spring.data.reactive.query.* -import com.linecorp.kotlinjdsl.spring.reactive.listQuery -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveCriteriaQueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactivePageableQueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.singleQuery -import com.linecorp.kotlinjdsl.spring.reactive.updateQuery -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import com.linecorp.kotlinjdsl.test.entity.EntityDsl -import com.linecorp.kotlinjdsl.test.entity.order.Order -import com.linecorp.kotlinjdsl.test.entity.order.OrderGroup -import com.linecorp.kotlinjdsl.test.entity.order.OrderItem -import com.linecorp.kotlinjdsl.test.reactive.MutinySessionFactoryExtension -import com.linecorp.kotlinjdsl.test.reactive.runBlocking -import io.smallrye.mutiny.coroutines.awaitSuspending -import org.hibernate.reactive.mutiny.Mutiny -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.Page -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Sort - -@ExtendWith(MutinySessionFactoryExtension::class) -internal class SpringDataMutinyReactiveQueryFactoryIntegrationTest : EntityDsl, WithKotlinJdslAssertions { - private lateinit var sessionFactory: Mutiny.SessionFactory - - private lateinit var queryFactory: SpringDataHibernateMutinyReactiveQueryFactory - - private val order1 = order { purchaserId = 1000 } - private val order2 = order { purchaserId = 1000 } - private val order3 = order { purchaserId = 1000 } - private val order4 = order { purchaserId = 2000 } - - @BeforeEach - fun setUp() { - queryFactory = SpringDataHibernateMutinyReactiveQueryFactory( - sessionFactory = sessionFactory, - subqueryCreator = SubqueryCreatorImpl() - ) - sequenceOf(order1, order2, order3, order4).forEach { - runBlocking { - sessionFactory.withSession { session -> session.persist(it).flatMap { session.flush() } } - .awaitSuspending() - } - } - } - - @Test - fun executeSessionWithFactory() = runBlocking { - val order = order { purchaserId = 5000 } - val actual = queryFactory.withFactory { session, factory -> - session.persist(order).awaitSuspending() - session.flush().awaitSuspending() - - factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(5000)) - } - } - - assertThat(actual.id).isEqualTo(order.id) - } - - @Test - fun executeWithFactory() = runBlocking { - val actual = queryFactory.withFactory { factory -> - factory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(2000)) - } - } - - assertThat(actual.id).isEqualTo(order4.id) - } - - @Test - fun singleQuery() = runBlocking { - // when - val actual = queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(2000)) - } - - // then - assertThat(actual.id).isEqualTo(order4.id) - } - - @Test - fun `singleQueryOrNull return null`() = runBlocking { - // when - val actual = queryFactory.singleQueryOrNull { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(3000)) - } - - // then - assertThat(actual).isNull() - } - - @Test - fun singleQueryOrNull() = runBlocking { - // when - val actual = queryFactory.singleQueryOrNull { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(2000)) - }!! - - // then - assertThat(actual.id).isEqualTo(order4.id) - } - - @Test - fun listQuery() = runBlocking { - // when - val actual = queryFactory.listQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - } - - // then - assertThat(actual).containsExactlyInAnyOrder(order1, order2, order3, order4) - } - - @Test - fun subquery() = runBlocking { - val subquery = queryFactory.subquery { - val order = entity(Order::class, "o") - - select(count(col(order, Order::id))) - from(order) - where( - col(order, Order::purchaserId).equal(col(Order::purchaserId)), - ) - } - - // then - assertThat(queryFactory.listQuery { - select(subquery) - from(entity(Order::class)) - orderBy(col(Order::id).asc()) - }).isEqualTo(listOf(order3.id, order3.id, order3.id, order1.id)) - } - - - @Test - fun updateQuery() = runBlocking { - // when - queryFactory.updateQuery { - where(col(Order::purchaserId).equal(2000)) - set(col(Order::purchaserId), 3000) - } - - // then - val actual = queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(3000)) - } - assertThat(actual.id).isEqualTo(order4.id) - - assertThat(actual.purchaserId).isEqualTo(3000) - } - - @Test - fun transaction() = runBlocking { - // when - try { - queryFactory.transactionWithFactory { session, queryFactory -> - session.merge(order1).awaitSuspending() - - val orders = queryFactory.listQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - } - - queryFactory.updateQuery { - where(col(Order::id).equal(orders.first().id)) - set(col(Order::purchaserId), orders.first().purchaserId + 1) - }.executeUpdate() - - queryFactory.updateQuery { - throw IllegalStateException("transaction rollback") - }.executeUpdate() - } - } catch (e: IllegalStateException) { - assertThat(e).hasMessage("transaction rollback") - } - - assertThat(queryFactory.transactionWithFactory { queryFactory -> - queryFactory.singleQuery { - select(entity(Order::class)) - from(entity(Order::class)) - fetch(Order::groups) - fetch(OrderGroup::items) - fetch(OrderGroup::address) - where(col(Order::id).equal(order1.id)) - } - }).isEqualTo(order1) - } - - @Test - fun deleteQuery() = runBlocking { - // when - queryFactory.deleteQuery { - where(col(OrderItem::id).equal(order1.groups.first().items.first().id)) - } - - // then - val actual = queryFactory.listQuery { - select(entity(OrderItem::class)) - from(entity(OrderItem::class)) - where(col(Order::id).equal(order1.id)) - associate(OrderItem::group) - associate(OrderGroup::order) - } - assertThat(actual).isEmpty() - } - - @Test - fun pageQuery() = runBlocking { - // when - val actual = queryFactory.pageQuery(PageRequest.of(1, 2, Sort.by("id"))) { - select(col(Order::id)) - from(entity(Order::class)) - where(col(Order::purchaserId).equal(1000)) - } - - // then - assertThat(actual.content).isEqualTo(listOf(order3.id)) - - assertThat(actual.totalElements).isEqualTo(3) - assertThat(actual.totalPages).isEqualTo(2) - assertThat(actual.number).isEqualTo(1) - } - - @Test - fun pageExtractWhereQuery() = runBlocking { - // given - val pageable = PageRequest.of(0, 10) - fun WhereDsl.equalValueSpec() = column(Order::purchaserId).equal(1000L) - - val dsl: SpringDataReactivePageableQueryDsl.() -> Unit = { - select(entity(Order::class)) - from(entity(Order::class)) - where(equalValueSpec()) - } - - val dslCriteria: SpringDataReactiveCriteriaQueryDsl.() -> Unit = { - select(entity(Order::class)) - from(entity(Order::class)) - where(equalValueSpec()) - } - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl) - val actualList: List = queryFactory.listQuery(dslCriteria) - - // then - assertThat(actual.content.size).isEqualTo(3) - assertThat(actual.map { it.id }).containsExactlyInAnyOrder(order1.id, order2.id, order3.id) - assertThat(actualList.map { it.id }).containsExactlyInAnyOrder(order1.id, order2.id, order3.id) - } - - @Test - fun `pageQuery with countProjection`() = runBlocking { - // given - val pageable = PageRequest.of(0, 1, Sort.by(Sort.Direction.DESC, Order::id.name)) - - val dsl: SpringDataReactivePageableQueryDsl.() -> Unit = { - select(entity(Order::class)) - from(entity(Order::class)) - } - - val countProjection: SpringDataReactivePageableQueryDsl.() -> SingleSelectClause = { - select(count(column(Order::purchaserId))) - } - - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl, countProjection) - - // then - assertThat(actual).hasSize(1) - assertThat(actual.content.first().id).isEqualTo(order4.id) - } -} diff --git a/spring/data-reactive-core-jakarta/build.gradle.kts b/spring/data-reactive-core-jakarta/build.gradle.kts deleted file mode 100644 index 7135078e8..000000000 --- a/spring/data-reactive-core-jakarta/build.gradle.kts +++ /dev/null @@ -1,18 +0,0 @@ -apply() - -coverage { - exclude(project) -} - -dependencies { - compileOnly(libs.spring.jpa3) - implementation(Modules.reactiveCoreJakarta) - implementation(libs.jakarta.persistence.api) - - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntityJakarta) - testImplementation(libs.spring.boot3.test) - testImplementation(libs.spring.jpa3) - testImplementation(libs.h2) - testImplementation(libs.coroutine.jdk8) -} diff --git a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactory.kt b/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactory.kt deleted file mode 100644 index 1eaca94ac..000000000 --- a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactory.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.* -import org.springframework.data.domain.Page -import org.springframework.data.domain.Pageable -import kotlin.reflect.KClass - -interface SpringDataReactiveQueryFactory { - fun selectQuery( - returnType: Class, - dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit - ): ReactiveQuery - - fun updateQuery( - target: KClass, - dsl: SpringDataReactiveCriteriaUpdateQueryDsl.() -> Unit - ): ReactiveQuery - - fun deleteQuery( - target: KClass, - dsl: SpringDataReactiveCriteriaDeleteQueryDsl.() -> Unit - ): ReactiveQuery - - fun subquery( - returnType: Class, - dsl: SpringDataReactiveSubqueryDsl.() -> Unit - ): SubqueryExpressionSpec - - suspend fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataReactivePageableQueryDsl.() -> Unit - ): Page - - suspend fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataReactivePageableQueryDsl.() -> Unit, - countProjection: SpringDataReactivePageableQueryDsl.() -> SingleSelectClause - ): Page -} diff --git a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactoryExtensions.kt b/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactoryExtensions.kt deleted file mode 100644 index e6956931a..000000000 --- a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactoryExtensions.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.* -import org.springframework.data.domain.Pageable - -suspend inline fun SpringDataReactiveQueryFactory.singleQuery( - noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit -) = selectQuery(dsl).singleResult() - -suspend inline fun SpringDataReactiveQueryFactory.singleQueryOrNull( - noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit -) = selectQuery(dsl).singleResultOrNull() - -suspend inline fun SpringDataReactiveQueryFactory.listQuery( - noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit -) = selectQuery(dsl).resultList() - -inline fun SpringDataReactiveQueryFactory.selectQuery(noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit) = - selectQuery(T::class.java, dsl) - -inline fun SpringDataReactiveQueryFactory.updateQuery(noinline dsl: SpringDataReactiveCriteriaUpdateQueryDsl.() -> Unit) = - updateQuery(T::class, dsl) - -inline fun SpringDataReactiveQueryFactory.deleteQuery(noinline dsl: SpringDataReactiveCriteriaDeleteQueryDsl.() -> Unit) = - deleteQuery(T::class, dsl) - -inline fun SpringDataReactiveQueryFactory.subquery(noinline dsl: SpringDataReactiveSubqueryDsl.() -> Unit) = - subquery(T::class.java, dsl) - -suspend inline fun SpringDataReactiveQueryFactory.pageQuery( - pageable: Pageable, - noinline dsl: SpringDataReactivePageableQueryDsl.() -> Unit -) = pageQuery(T::class.java, pageable, dsl) - -suspend inline fun SpringDataReactiveQueryFactory.pageQuery( - pageable: Pageable, - noinline dsl: SpringDataReactivePageableQueryDsl.() -> Unit, - noinline countProjection: SpringDataReactivePageableQueryDsl.() -> SingleSelectClause, -) = pageQuery(T::class.java, pageable, dsl, countProjection) diff --git a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactoryImpl.kt b/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactoryImpl.kt deleted file mode 100644 index 5e9b6b993..000000000 --- a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactoryImpl.kt +++ /dev/null @@ -1,102 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.creator.ReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.* -import org.springframework.data.domain.Page -import org.springframework.data.domain.Pageable -import org.springframework.data.support.PageableExecutionUtils -import kotlin.reflect.KClass - -class SpringDataReactiveQueryFactoryImpl( - private val criteriaQueryCreator: ReactiveCriteriaQueryCreator, - private val subqueryCreator: SubqueryCreator, -) : SpringDataReactiveQueryFactory { - override fun selectQuery( - returnType: Class, - dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit - ): ReactiveQuery { - val criteriaQuerySpec = SpringDataReactiveReactiveQueryDslImpl(returnType).apply(dsl).createCriteriaQuerySpec() - - return criteriaQueryCreator.createQuery(criteriaQuerySpec) - } - - override fun updateQuery( - target: KClass, - dsl: SpringDataReactiveCriteriaUpdateQueryDsl.() -> Unit - ): ReactiveQuery { - val criteriaQuerySpec = SpringDataReactiveReactiveQueryDslImpl(target.java).apply(dsl).apply { - from(target) - }.createCriteriaUpdateQuerySpec() - - return criteriaQueryCreator.createQuery(criteriaQuerySpec) - } - - override fun deleteQuery( - target: KClass, - dsl: SpringDataReactiveCriteriaDeleteQueryDsl.() -> Unit - ): ReactiveQuery { - return criteriaQueryCreator.createQuery( - SpringDataReactiveReactiveQueryDslImpl(target.java).apply(dsl).apply { from(target) } - .createCriteriaDeleteQuerySpec() - ) - } - - override fun subquery( - returnType: Class, - dsl: SpringDataReactiveSubqueryDsl.() -> Unit - ): SubqueryExpressionSpec { - val subquerySpec = SpringDataReactiveReactiveQueryDslImpl(returnType).apply(dsl).createSubquerySpec() - - return SubqueryExpressionSpec(subquerySpec, subqueryCreator) - } - - override suspend fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataReactivePageableQueryDsl.() -> Unit - ): Page { - val appliedDsl = SpringDataReactiveReactiveQueryDslImpl(returnType).apply { dsl(); this.pageable = pageable } - - val pageableQuery = criteriaQueryCreator.createQuery(appliedDsl.createPageableQuerySpec()) - return pageableQuery.resultList().let { pageList -> - criteriaQueryCreator.createQuery(appliedDsl.createPageableCountQuerySpec()).resultList() - .let { pageableCountTotals -> - PageableExecutionUtils.getPage(pageList, pageable) { - executeCountQuery(pageableCountTotals) - } - } - } - } - - override suspend fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataReactivePageableQueryDsl.() -> Unit, - countProjection: SpringDataReactivePageableQueryDsl.() -> SingleSelectClause, - ): Page { - val appliedDsl = SpringDataReactiveReactiveQueryDslImpl(returnType).apply { dsl(); this.pageable = pageable } - val countSelectClause = SpringDataReactiveReactiveQueryDslImpl(Long::class.java).run(countProjection) - - val pageableQuery = criteriaQueryCreator.createQuery(appliedDsl.createPageableQuerySpec()) - return pageableQuery.resultList().let { pageList -> - criteriaQueryCreator.createQuery(appliedDsl.createPageableCountQuerySpec(countSelectClause)).resultList() - .let { pageableCountTotals -> - PageableExecutionUtils.getPage(pageList, pageable) { - executeCountQuery(pageableCountTotals) - } - } - } - } - - private fun executeCountQuery(totals: List): Long { - return if (totals.size == 1) { - totals.first() - } else { - totals.count().toLong() - } - } -} diff --git a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/query/clause/limit/SpringDataReactivePageableLimitClause.kt b/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/query/clause/limit/SpringDataReactivePageableLimitClause.kt deleted file mode 100644 index 7f49714a3..000000000 --- a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/query/clause/limit/SpringDataReactivePageableLimitClause.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.query.clause.limit - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import org.springframework.data.domain.Pageable - -data class SpringDataReactivePageableLimitClause( - private val pageable: Pageable -) : QueryLimitClause> { - override fun apply(query: ReactiveQuery) { - if (pageable.isPaged) { - query.setFirstResult(pageable.offset.toInt()) - query.setMaxResults(pageable.pageSize) - } - } -} diff --git a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/query/clause/orderby/SpringDataReactivePageableOrderByClause.kt b/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/query/clause/orderby/SpringDataReactivePageableOrderByClause.kt deleted file mode 100644 index 105f30049..000000000 --- a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/query/clause/orderby/SpringDataReactivePageableOrderByClause.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import org.springframework.data.domain.Pageable -import org.springframework.data.jpa.repository.query.QueryUtils -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery - -data class SpringDataReactivePageableOrderByClause( - private val pageable: Pageable -) : CriteriaQueryOrderByClause { - override fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) { - query.orderBy(QueryUtils.toOrders(pageable.sort, froms.root, criteriaBuilder)) - } -} diff --git a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaDeleteQueryDsl.kt b/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaDeleteQueryDsl.kt deleted file mode 100644 index 3f24d9c03..000000000 --- a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaDeleteQueryDsl.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.querydsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.predicate.SpringDataReactivePredicateDsl - -interface SpringDataReactiveCriteriaDeleteQueryDsl : CriteriaDeleteQueryDsl, SpringDataReactivePredicateDsl diff --git a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaQueryDsl.kt b/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaQueryDsl.kt deleted file mode 100644 index 1429372fb..000000000 --- a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaQueryDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.querydsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.predicate.SpringDataReactivePredicateDsl - -interface SpringDataReactiveCriteriaQueryDsl : - CriteriaQueryDsl, - SpringDataReactivePredicateDsl diff --git a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaUpdateQueryDsl.kt b/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaUpdateQueryDsl.kt deleted file mode 100644 index df2abca2e..000000000 --- a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaUpdateQueryDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.querydsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.predicate.SpringDataReactivePredicateDsl - -interface SpringDataReactiveCriteriaUpdateQueryDsl : - CriteriaUpdateQueryDsl, - SpringDataReactivePredicateDsl diff --git a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactivePageableQueryDsl.kt b/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactivePageableQueryDsl.kt deleted file mode 100644 index 7840b5324..000000000 --- a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactivePageableQueryDsl.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.querydsl - -import com.linecorp.kotlinjdsl.querydsl.expression.ExpressionDsl -import com.linecorp.kotlinjdsl.querydsl.from.FromDsl -import com.linecorp.kotlinjdsl.querydsl.from.JoinDsl -import com.linecorp.kotlinjdsl.querydsl.from.RelationDsl -import com.linecorp.kotlinjdsl.querydsl.hint.HintDsl -import com.linecorp.kotlinjdsl.querydsl.select.MultiSelectDsl -import com.linecorp.kotlinjdsl.querydsl.select.SingleSelectDsl -import com.linecorp.kotlinjdsl.querydsl.where.WhereDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.predicate.SpringDataReactivePredicateDsl - -/** - * DSL for Spring Data JPA Pageable - * - * Pageable DSL does not support Fetch and GroupBy clause because they have to load a lot of data to memory. - * To use the Fetch and GroupBy clause for pagination, separate the query. - */ -interface SpringDataReactivePageableQueryDsl : - ExpressionDsl, - SpringDataReactivePredicateDsl, - SingleSelectDsl, - MultiSelectDsl, - FromDsl, - JoinDsl, - RelationDsl, - WhereDsl, - HintDsl diff --git a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveReactiveQueryDslImpl.kt b/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveReactiveQueryDslImpl.kt deleted file mode 100644 index 933259968..000000000 --- a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveReactiveQueryDslImpl.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.querydsl - -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.hint.JpaReactiveQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.limit.ReactiveLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.* -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.limit.SpringDataReactivePageableLimitClause -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.orderby.SpringDataReactivePageableOrderByClause -import org.springframework.data.domain.Pageable - -/** - * Internal DSL Implementation which is integrated Spring Data JPA - * - * Don't use this directly because it's an **INTERNAL** class. - * It does not support backward compatibility. - */ -class SpringDataReactiveReactiveQueryDslImpl( - returnType: Class, -) : ReactiveQueryDslImpl(returnType), - SpringDataReactiveCriteriaQueryDsl, SpringDataReactiveSubqueryDsl, SpringDataReactivePageableQueryDsl, - SpringDataReactiveCriteriaUpdateQueryDsl, SpringDataReactiveCriteriaDeleteQueryDsl { - var pageable: Pageable = Pageable.unpaged() - - fun createPageableQuerySpec(): CriteriaQuerySpec> { - return CriteriaQuerySpecImpl( - select = getCriteriaQuerySelectClause(), - from = getFromClause(), - join = getJoinClauseDoesNotHaveFetch(), - where = getWhereClause(), - groupBy = getEmptyGroupByClause(), - having = getEmptyHavingClause(), - orderBy = getPageableOrderByClause(), - limit = getPageableLimitClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - ) - } - - @Suppress("UNCHECKED_CAST") - fun createPageableCountQuerySpec(countSelectClause: SingleSelectClause? = null): CriteriaQuerySpec> { - return CriteriaQuerySpecImpl( - select = countSelectClause ?: getCriteriaCountQuerySelectClause(), - from = getFromClause(), - join = getJoinClauseDoesNotHaveFetch(), - where = getWhereClause(), - groupBy = getEmptyGroupByClause(), - having = getEmptyHavingClause(), - orderBy = getEmptyOrderByClause(), - limit = getEmptyLimitClause() as ReactiveLimitClause, - jpaHint = getJpaQueryHintClause() as JpaReactiveQueryHintClauseImpl, - sqlHint = getSqlQueryHintClause() as SqlQueryHintClause>, - ) - } - - private fun getCriteriaCountQuerySelectClause(): CriteriaQuerySelectClause { - return when (val selectClause = getCriteriaQuerySelectClause()) { - is SingleSelectClause -> CountSingleSelectClause(selectClause.distinct, selectClause.expression) - is MultiSelectClause -> CountMultiSelectClause(selectClause.distinct, selectClause.expressions) - else -> throw IllegalStateException("Pageable query does not support $selectClause") - } - } - - private fun getPageableOrderByClause(): CriteriaQueryOrderByClause { - return SpringDataReactivePageableOrderByClause(pageable) - } - - private fun getPageableLimitClause(): QueryLimitClause> { - return SpringDataReactivePageableLimitClause(pageable) - } -} diff --git a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveSubqueryDsl.kt b/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveSubqueryDsl.kt deleted file mode 100644 index 161e0d96e..000000000 --- a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveSubqueryDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.querydsl - -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.predicate.SpringDataReactivePredicateDsl - -interface SpringDataReactiveSubqueryDsl : - SubqueryDsl, - SpringDataReactivePredicateDsl diff --git a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/predicate/SpringDataReactivePredicateDsl.kt b/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/predicate/SpringDataReactivePredicateDsl.kt deleted file mode 100644 index 432f1cea2..000000000 --- a/spring/data-reactive-core-jakarta/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/predicate/SpringDataReactivePredicateDsl.kt +++ /dev/null @@ -1,30 +0,0 @@ -@file:Suppress("RemoveExplicitTypeArguments") - -package com.linecorp.kotlinjdsl.spring.reactive.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.GreaterThanValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.LessThanValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.predicate.PredicateDsl -import org.springframework.data.domain.Range - -interface SpringDataReactivePredicateDsl : PredicateDsl { - fun ExpressionSpec.greaterThan(bound: Range.Bound) where R : Comparable, R : Any, T : R? = - if (bound.isBounded) { - GreaterThanValueSpec(this, bound.value.get(), bound.isInclusive) - } else { - PredicateSpec.empty - } - - fun ExpressionSpec.lessThan(bound: Range.Bound) where R : Comparable, R : Any, T : R? = - if (bound.isBounded) { - LessThanValueSpec(this, bound.value.get(), bound.isInclusive) - } else { - PredicateSpec.empty - } - - fun ExpressionSpec.between(range: Range) where R : Comparable, R : Any, T : R? = - AndSpec(listOf(greaterThan(range.lowerBound), lessThan(range.upperBound))) -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataReactiveQueryFactoryExtensionsTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataReactiveQueryFactoryExtensionsTest.kt deleted file mode 100644 index 348b4eed5..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataReactiveQueryFactoryExtensionsTest.kt +++ /dev/null @@ -1,238 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.reactive.* -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.* -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import kotlinx.coroutines.runBlocking -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.Page -import org.springframework.data.domain.PageRequest - -@ExtendWith(MockKExtension::class) -internal class SpringDataReactiveQueryFactoryExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var queryFactory: SpringDataReactiveQueryFactory - - @MockK - private lateinit var reactiveQuery: ReactiveQuery - - @MockK - private lateinit var subqueryExpressionSpec: SubqueryExpressionSpec - - @MockK - private lateinit var page: Page - - @Test - fun singleQuery(): Unit = runBlocking { - // given - every { queryFactory.selectQuery(any(), any()) } returns reactiveQuery - coEvery { reactiveQuery.singleResult() } returns Data1() - - val dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: Data1 = queryFactory.singleQuery(dsl) - - // then - assertThat(actual).isEqualTo(Data1()) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - coVerify(exactly = 1) { - reactiveQuery.singleResult() - } - - confirmVerified(queryFactory, reactiveQuery) - } - - @Test - fun listQuery(): Unit = runBlocking { - // given - every { queryFactory.selectQuery(any(), any()) } returns reactiveQuery - coEvery { reactiveQuery.resultList() } returns listOf(Data1()) - - val dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: List = queryFactory.listQuery(dsl) - - // then - assertThat(actual).isEqualTo(listOf(Data1())) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - coVerify(exactly = 1) { - reactiveQuery.resultList() - } - - confirmVerified(queryFactory, reactiveQuery) - } - - @Test - fun selectQuery(): Unit = runBlocking { - // given - every { queryFactory.selectQuery(any(), any()) } returns reactiveQuery - - val dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual = queryFactory.selectQuery(dsl) - - // then - assertThat(actual).isEqualTo(reactiveQuery) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun updateQuery() { - // given - every { queryFactory.updateQuery(any(), any()) } returns reactiveQuery - - val dsl: SpringDataReactiveCriteriaUpdateQueryDsl.() -> Unit = { - set(col(Data1::id), 1) - where(col(Data1::id).equal(2)) - } - - // when - val actual = queryFactory.updateQuery(dsl) - - // then - assertThat(actual).isEqualTo(reactiveQuery) - - verify(exactly = 1) { - queryFactory.updateQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun deleteQuery() { - // given - every { queryFactory.deleteQuery(any(), any()) } returns reactiveQuery - - val dsl: SpringDataReactiveCriteriaDeleteQueryDsl.() -> Unit = { - where(col(Data1::id).equal(1)) - } - - // when - val actual = queryFactory.deleteQuery(dsl) - - // then - assertThat(actual).isEqualTo(reactiveQuery) - - verify(exactly = 1) { - queryFactory.deleteQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun subquery() { - // given - every { queryFactory.subquery(any(), any()) } returns subqueryExpressionSpec - - val dsl: SpringDataReactiveSubqueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: SubqueryExpressionSpec = queryFactory.subquery(dsl) - - // then - assertThat(actual).isEqualTo(subqueryExpressionSpec) - - verify(exactly = 1) { - queryFactory.subquery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun pageQuery() = runBlocking { - // given - coEvery { queryFactory.pageQuery(any(), any(), any()) } returns page - - val pageable = PageRequest.of(1, 10) - - val dsl: SpringDataReactivePageableQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl) - - // then - assertThat(actual).isEqualTo(page) - - coVerify(exactly = 1) { - queryFactory.pageQuery(Data1::class.java, pageable, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun `pageQuery with countProjection`() = runBlocking { - // given - coEvery { queryFactory.pageQuery(any(), any(), any(), any()) } returns page - - val pageable = PageRequest.of(1, 10) - - val dsl: SpringDataReactivePageableQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - val countProjection: SpringDataReactivePageableQueryDsl.() -> SingleSelectClause = { - select(count(column(Data1::id))) - } - - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl, countProjection) - - // then - assertThat(actual).isEqualTo(page) - - coVerify(exactly = 1) { - queryFactory.pageQuery(Data1::class.java, pageable, dsl, countProjection) - } - - confirmVerified(queryFactory) - } - - data class Data1( - val id: Int = 100 - ) -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataReactiveQueryFactoryImplTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataReactiveQueryFactoryImplTest.kt deleted file mode 100644 index ce00ff64b..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataReactiveQueryFactoryImplTest.kt +++ /dev/null @@ -1,351 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive - -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaReactiveQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.emptySqlHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.ReactiveLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CountSingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.creator.ReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.CountSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.EqualValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.reactive.SpringDataReactiveQueryFactoryImpl -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.limit.SpringDataReactivePageableLimitClause -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.orderby.SpringDataReactivePageableOrderByClause -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import kotlinx.coroutines.runBlocking -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.PageImpl -import org.springframework.data.domain.PageRequest - -@ExtendWith(MockKExtension::class) -internal class SpringDataReactiveQueryFactoryImplTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: SpringDataReactiveQueryFactoryImpl - - @MockK - private lateinit var criteriaQueryCreator: ReactiveCriteriaQueryCreator - - @MockK - private lateinit var subqueryCreator: SubqueryCreator - - @Test - fun selectQuery() { - // given - val query: ReactiveQuery = mockk() - - val data = ReactiveQueryDslImpl.CriteriaQuerySpecImpl>( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java), - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = ReactiveLimitClause.empty(), - sqlHint = emptySqlHintClause(), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - ) - - every { criteriaQueryCreator.createQuery(any>>()) } returns query - - // when - val actual = sut.selectQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - assertThat(actual).isEqualTo(query) - - verify { - criteriaQueryCreator.createQuery(data) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun updateQuery() { - // given - val query: ReactiveQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>>()) } returns query - - // when - val actual = sut.updateQuery(Data1::class) { - where(col(Data1::id).equal(1)) - set(col(Data1::id), 2) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl.CriteriaUpdateQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - set = SetClause(mapOf(ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) to 2)), - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun deleteQuery() { - // given - val query: ReactiveQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>>()) } returns query - - // when - val actual = sut.deleteQuery(Data1::class) { - where(col(Data1::id).equal(1)) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl.CriteriaDeleteQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun subquery() { - // when - val actual = sut.subquery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - val subquerySpec = ReactiveQueryDslImpl.SubquerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - ) - - assertThat(actual).isEqualTo(SubqueryExpressionSpec(subquerySpec, subqueryCreator)) - } - - @Test - fun pageQuery() = runBlocking { - // given - val pageable = PageRequest.of(0, 5) - - val expectedPageableSpec: CriteriaQuerySpec> = - ReactiveQueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = SpringDataReactivePageableOrderByClause(pageable), - limit = SpringDataReactivePageableLimitClause(pageable), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val expectedPageableCountSpec = ReactiveQueryDslImpl.CriteriaQuerySpecImpl( - select = CountSingleSelectClause( - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = ReactiveLimitClause.empty>(), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val pageableQuery: ReactiveQuery = mockk { - coEvery { resultList() } returns ( - listOf( - Data1(1), - Data1(2), - Data1(3), - Data1(4), - Data1(5) - ) - ) - } - - val pageableCountQuery: ReactiveQuery = mockk { - coEvery { resultList() } returns listOf(50L) - } - - coEvery { criteriaQueryCreator.createQuery(expectedPageableSpec) } returns pageableQuery - coEvery { criteriaQueryCreator.createQuery(expectedPageableCountSpec) } returns pageableCountQuery - - // when - val actual = sut.pageQuery(Data1::class.java, pageable) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - assertThat(actual).isEqualTo(PageImpl(listOf(Data1(1), Data1(2), Data1(3), Data1(4), Data1(5)), pageable, 50)) - - coVerify(exactly = 1) { - criteriaQueryCreator.createQuery(expectedPageableSpec) - criteriaQueryCreator.createQuery(expectedPageableCountSpec) - - pageableQuery.resultList() - pageableCountQuery.resultList() - } - - confirmVerified(pageableQuery, pageableCountQuery, criteriaQueryCreator) - } - - @Test - fun `pageQuery with countProjection`() = runBlocking { - // given - val pageable = PageRequest.of(0, 5) - - val expectedPageableSpec: CriteriaQuerySpec> = - ReactiveQueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = SpringDataReactivePageableOrderByClause(pageable), - limit = SpringDataReactivePageableLimitClause(pageable), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val expectedPageableCountSpec: CriteriaQuerySpec> = - ReactiveQueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - returnType = Long::class.java, - distinct = false, - expression = CountSpec( - distinct = false, - expression = ColumnSpec(EntitySpec(Data1::class.java), "id") - ) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = ReactiveLimitClause.empty(), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val pageableQuery: ReactiveQuery = mockk { - coEvery { resultList() } returns ( - listOf( - Data1(1), - Data1(2), - Data1(3), - Data1(4), - Data1(5) - ) - ) - } - - val pageableCountQuery: ReactiveQuery = mockk { - coEvery { resultList() } returns listOf(50L) - } - - every { criteriaQueryCreator.createQuery(expectedPageableSpec) } returns pageableQuery - every { criteriaQueryCreator.createQuery(expectedPageableCountSpec) } returns pageableCountQuery - - // when - val actual = sut.pageQuery(Data1::class.java, pageable, dsl = { - select(entity(Data1::class)) - from(entity(Data1::class)) - }, countProjection = { - select(count(column(Data1::id))) - }) - - // then - assertThat(actual).isEqualTo(PageImpl(listOf(Data1(1), Data1(2), Data1(3), Data1(4), Data1(5)), pageable, 50)) - - coVerify(exactly = 1) { - criteriaQueryCreator.createQuery(expectedPageableSpec) - criteriaQueryCreator.createQuery(expectedPageableCountSpec) - - pageableQuery.resultList() - pageableCountQuery.resultList() - } - - confirmVerified(pageableQuery, pageableCountQuery, criteriaQueryCreator) - } - - data class Data1( - val id: Int = 1 - ) -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/clause/limit/SpringDataReactivePageableLimitClauseTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/clause/limit/SpringDataReactivePageableLimitClauseTest.kt deleted file mode 100644 index 402c4a1dd..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/clause/limit/SpringDataReactivePageableLimitClauseTest.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.query.clause.limit - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.limit.SpringDataReactivePageableLimitClause -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable - -@ExtendWith(MockKExtension::class) -internal class SpringDataReactivePageableLimitClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: ReactiveQuery - - @Test - fun apply() { - // given - val pageable = PageRequest.of(1, 10) - - every { query.setFirstResult(10) } returns query - every { query.setMaxResults(10) } returns query - - // when - SpringDataReactivePageableLimitClause(pageable).apply(query) - - // then - verify(exactly = 1) { - query.setFirstResult(10) - query.setMaxResults(10) - } - - confirmVerified(query) - } - - @Test - fun `apply - unPaged`() { - // given - val pageable = Pageable.unpaged() - - // when - SpringDataReactivePageableLimitClause(pageable).apply(query) - - // then - confirmVerified(query) - } -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/clause/orderby/SpringDataReactivePageableOrderByClauseTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/clause/orderby/SpringDataReactivePageableOrderByClauseTest.kt deleted file mode 100644 index b5d1990e0..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/clause/orderby/SpringDataReactivePageableOrderByClauseTest.kt +++ /dev/null @@ -1,57 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.orderby.SpringDataReactivePageableOrderByClause -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Sort -import org.springframework.data.jpa.repository.query.QueryUtils -import jakarta.persistence.criteria.CriteriaBuilder -import jakarta.persistence.criteria.CriteriaQuery -import jakarta.persistence.criteria.Order -import jakarta.persistence.criteria.Root - -@ExtendWith(MockKExtension::class) -internal class SpringDataReactivePageableOrderByClauseTest : WithAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: CriteriaQuery<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun apply() { - // given - mockkStatic(QueryUtils::class) - - val sort = Sort.by(Sort.Direction.ASC, "test") - val pageable = PageRequest.of(1, 10, sort) - - val root: Root<*> = mockk() - val order: Order = mockk() - - every { froms.root } returns root - every { QueryUtils.toOrders(sort, root, criteriaBuilder) } returns listOf(order) - every { query.orderBy(listOf(order)) } returns query - - // when - SpringDataReactivePageableOrderByClause(pageable).apply(froms, query, criteriaBuilder) - - // then - verify(exactly = 1) { - froms.root - QueryUtils.toOrders(sort, root, criteriaBuilder) - query.orderBy(listOf(order)) - } - - clearStaticMockk(QueryUtils::class) - } -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/expression/SpringDataReactiveQueryDslImplExpressionTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/expression/SpringDataReactiveQueryDslImplExpressionTest.kt deleted file mode 100644 index fefdf7d34..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/expression/SpringDataReactiveQueryDslImplExpressionTest.kt +++ /dev/null @@ -1,366 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.* -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.expression.WhenDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplExpressionTest : WithKotlinJdslAssertions { - @Test - fun entity() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class) - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java)) - } - - @Test - fun entityWithAlias() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class, "data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun alias() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = Data1::class.alias("data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun literal() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = literal(10) - } - - assertThat(actual).isEqualTo(LiteralSpec(10)) - } - - @Test - fun nullLiteral() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = nullLiteral(Int::class.java) - } - - assertThat(actual).isEqualTo(NullLiteralSpec(Int::class.java)) - } - - @Test - fun col() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = col(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun column() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = column(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun max() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = max(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MaxSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun min() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = min(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MinSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun avg() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = avg(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - AvgSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun sum() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = sum(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - SumSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun count() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = count(distinct = true, col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countNonDistinct() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = count(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countDistinct() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = countDistinct(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun greatest() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = greatest(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - GreatestSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun least() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = least(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - LeastSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun caseList() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = case( - listOf( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - ), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun caseVararg() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = case( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun `when`() { - val predicate1: PredicateSpec = mockk() - val expression1: ExpressionSpec = mockk() - - val actual: CaseSpec.WhenSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1, expression1) - } - - assertThat(actual).isEqualTo(CaseSpec.WhenSpec(predicate1, expression1)) - } - - @Test - fun whenWithPredicate() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1) - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - @Test - fun whenWithLambda() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = `when` { predicate1 } - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - - @Test - fun functionVarArg() { - // when - val actual: FunctionSpec - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - @Test - fun functionList() { - // when - val actual: FunctionSpec - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - listOf( - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - class Data1 { - val id: Int = 10 - } -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplFetchTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplFetchTest.kt deleted file mode 100644 index 70fdb68b6..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplFetchTest.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.spec.FetchJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import jakarta.persistence.criteria.JoinType - -internal class SpringDataReactiveQueryDslImplFetchTest : WithKotlinJdslAssertions { - @Test - fun fetch() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - fetch(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val fetchSpec = FetchJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(fetchSpec, fetchSpec, fetchSpec, fetchSpec)) - ) - - val exception1 = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception1).hasMessageContaining("This query does not support fetch") - - val exception2 = catchThrowable(IllegalStateException::class) { - actual.createPageableQuerySpec() - } - - assertThat(exception2).hasMessageContaining("This query does not support fetch") - - val exception3 = catchThrowable(IllegalStateException::class) { - actual.createPageableCountQuerySpec() - } - - assertThat(exception3).hasMessageContaining("This query does not support fetch") - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplFromTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplFromTest.kt deleted file mode 100644 index 78cd81511..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplFromTest.kt +++ /dev/null @@ -1,113 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplFromTest : WithKotlinJdslAssertions { - @Test - fun fromJavaClass() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromKotlinClass() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromEntitySpec() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class, "data1")) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - } - - class Data1 -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplJoinTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplJoinTest.kt deleted file mode 100644 index 31da6de28..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplJoinTest.kt +++ /dev/null @@ -1,260 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.CrossJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleAssociatedJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test -import jakarta.persistence.criteria.JoinType - -internal class SpringDataReactiveQueryDslImplJoinTest : WithKotlinJdslAssertions { - @Test - fun on() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = on(predicateSpec) - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun onLambda() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = on { predicateSpec } - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun join() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun associate() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun updateAssociate() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaUpdateQuerySpec() - - assertThat(criteriaQuerySpec.associate).isEqualTo( - SimpleAssociatedJoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun updateAssociateOnlyAllowsSimpleAssociatedJoinSpec() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2)) - } - - val result = catchThrowable(IllegalStateException::class) { actual.createCriteriaUpdateQuerySpec() } - - assertThat(result).hasMessage("This query only support associate") - } - - @Test - fun crossJoin() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(Data2::class, on(predicateSpec1)) - join(entity(Data2::class), on(predicateSpec1)) - where(predicateSpec2) - } - - // then - val joinSpec = CrossJoinSpec(EntitySpec(Data2::class.java)) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplRelationTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplRelationTest.kt deleted file mode 100644 index db25b1056..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplRelationTest.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.from - -import com.linecorp.kotlinjdsl.querydsl.from.Relation -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplRelationTest : WithKotlinJdslAssertions { - @Test - fun on() { - val actual: Relation - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2) - } - - assertThat(actual).isEqualTo(Relation("data2")) - } - - @Test - fun onCollection() { - val actual: Relation - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2List) - } - - assertThat(actual).isEqualTo(Relation("data2List")) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/groupby/SpringDataReactiveQueryDslImplGroupByTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/groupby/SpringDataReactiveQueryDslImplGroupByTest.kt deleted file mode 100644 index aaf3797a5..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/groupby/SpringDataReactiveQueryDslImplGroupByTest.kt +++ /dev/null @@ -1,124 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.groupby - -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplGroupByTest : WithKotlinJdslAssertions { - @Test - fun noGroupBy() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - @Test - fun groupByVararg() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(columnSpec1, columnSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - @Test - fun groupByList() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(listOf(columnSpec1, columnSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - class Data1 -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/having/SpringDataReactiveQueryDslImplHavingTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/having/SpringDataReactiveQueryDslImplHavingTest.kt deleted file mode 100644 index 11a0e5556..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/having/SpringDataReactiveQueryDslImplHavingTest.kt +++ /dev/null @@ -1,125 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.having - -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplHavingTest : WithKotlinJdslAssertions { - @Test - fun noHaving() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - @Test - fun having() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - @Test - fun multipleHaving() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec1) - having(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - class Data1 -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/hint/SpringDataReactiveQueryDslImplHintTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/hint/SpringDataReactiveQueryDslImplHintTest.kt deleted file mode 100644 index 60059c917..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/hint/SpringDataReactiveQueryDslImplHintTest.kt +++ /dev/null @@ -1,111 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.hint - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.hint.JpaReactiveQueryHintClauseImpl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplHintTest : WithKotlinJdslAssertions { - @Test - fun noHints() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaReactiveQueryHintClauseImpl>(emptyMap()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.jpaHint).isEqualTo( - JpaReactiveQueryHintClauseImpl>(emptyMap()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.jpaHint).isEqualTo( - JpaReactiveQueryHintClauseImpl>(emptyMap()) - ) - } - - @Test - fun hintsVararg() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints("hint1" to true, "hint2" to "comment") - } - - // then - val hintClause = JpaReactiveQueryHintClauseImpl>( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.jpaHint).isEqualTo( - hintClause - ) - } - - @Test - fun hintsMap() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints(mapOf("hint1" to true, "hint2" to "comment")) - } - - // then - val hintClause = JpaReactiveQueryHintClauseImpl>( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.jpaHint).isEqualTo( - hintClause - ) - } - - class Data1 -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/limit/SpringDataReactiveQueryDslImplLimitTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/limit/SpringDataReactiveQueryDslImplLimitTest.kt deleted file mode 100644 index 08a2192ae..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/limit/SpringDataReactiveQueryDslImplLimitTest.kt +++ /dev/null @@ -1,190 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.limit - -import com.linecorp.kotlinjdsl.query.clause.limit.ReactiveLimitClause -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.limit.SpringDataReactivePageableLimitClause -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable -import jakarta.persistence.Query - -internal class SpringDataReactiveQueryDslImplLimitTest : WithKotlinJdslAssertions { - @Test - fun noLimit() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = null, maxResults = null) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataReactivePageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - } - - @Test - fun offset() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - offset(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = 10, maxResults = null) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataReactivePageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - } - - @Test - fun maxResults() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - maxResults(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = null, maxResults = 10) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataReactivePageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - } - - @Test - fun limitMaxResults() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = null, maxResults = 10) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataReactivePageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - } - - @Test - fun limitOffsetAndMaxResults() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(1, 10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = 1, maxResults = 10) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataReactivePageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - } - - @Test - fun pageable() { - // given - val pageable = PageRequest.of(1, 10) - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - this.pageable = pageable - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataReactivePageableLimitClause(pageable) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - } - - class Data1 -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/orderby/SpringDataReactiveQueryDslImplOrderByWhereTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/orderby/SpringDataReactiveQueryDslImplOrderByWhereTest.kt deleted file mode 100644 index f92f164d2..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/orderby/SpringDataReactiveQueryDslImplOrderByWhereTest.kt +++ /dev/null @@ -1,169 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.orderby - -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.spec.ExpressionOrderSpec -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.orderby.SpringDataReactivePageableOrderByClause -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable - -internal class SpringDataReactiveQueryDslImplOrderByWhereTest : WithKotlinJdslAssertions { - @Test - fun noOrderBy() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataReactivePageableOrderByClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun orderByVararg() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(orderSpec1, orderSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataReactivePageableOrderByClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun orderByList() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(listOf(orderSpec1, orderSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataReactivePageableOrderByClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun pageable() { - // given - val pageable = PageRequest.of(10, 10) - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - this.pageable = pageable - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataReactivePageableOrderByClause(pageable) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun asc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.asc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, true)) - } - - @Test - fun desc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.desc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, false)) - } - - class Data1 -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/predicate/SpringDataReactiveQueryDslImplPredicateTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/predicate/SpringDataReactiveQueryDslImplPredicateTest.kt deleted file mode 100644 index c2f48fa20..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/predicate/SpringDataReactiveQueryDslImplPredicateTest.kt +++ /dev/null @@ -1,567 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.* -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test -import org.springframework.data.domain.Range - -internal class SpringDataReactiveQueryDslImplPredicateTest : WithKotlinJdslAssertions { - @Test - fun not() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = not(predicateSpec) - } - - assertThat(actual).isEqualTo(NotSpec(predicateSpec)) - } - - @Test - fun andVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = and(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun andList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = and(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = or(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = or(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun equalValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.equal(value) - } - - assertThat(actual).isEqualTo(EqualValueSpec(expressionSpec, value)) - } - - @Test - fun equalExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.equal(expressionSpec2) - } - - assertThat(actual).isEqualTo(EqualExpressionSpec(expressionSpec1, expressionSpec2)) - } - - @Test - fun notEqualValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.notEqual(value) - } - - assertThat(actual).isEqualTo(NotSpec(EqualValueSpec(expressionSpec, value))) - } - - @Test - fun notEqualExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.notEqual(expressionSpec2) - } - - assertThat(actual).isEqualTo(NotSpec(EqualExpressionSpec(expressionSpec1, expressionSpec2))) - } - - @Test - fun inValueVararg() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(value1, value2) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inValueList() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(listOf(value1, value2)) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inExpressionVararg() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun inExpressionList() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(listOf(expressionSpec2, expressionSpec3)) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun greaterThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun greaterThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun greaterThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun greaterThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun greaterThanBound() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.inclusive("test") - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(bound) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, "test", true)) - } - - @Test - fun greaterThanBoundEmpty() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.unbounded() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(bound) - } - - assertThat(actual).isEqualTo(PredicateSpec.empty) - } - - @Test - fun lessThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun lessThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun lessThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanBound() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.inclusive("test") - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(bound) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, "test", true)) - } - - @Test - fun lessThanBoundEmpty() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.unbounded() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(bound) - } - - assertThat(actual).isEqualTo(PredicateSpec.empty) - } - - @Test - fun betweenValue() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(value1, value2) - } - - assertThat(actual).isEqualTo(BetweenValueSpec(expressionSpec, value1, value2)) - } - - @Test - fun betweenExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.between(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(BetweenExpressionSpec(expressionSpec1, expressionSpec2, expressionSpec3)) - } - - @Test - fun betweenRange() { - val expressionSpec: ExpressionSpec = mockk() - val range = Range.leftOpen("test1", "test2") - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(range) - } - - assertThat(actual).isEqualTo( - AndSpec( - listOf( - GreaterThanValueSpec(expressionSpec, "test1", false), - LessThanValueSpec(expressionSpec, "test2", true) - ) - ) - ) - } - - @Test - fun betweenRangeEmpty() { - val expressionSpec: ExpressionSpec = mockk() - val range = Range.unbounded() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(range) - } - - assertThat(actual).isEqualTo( - AndSpec(listOf(PredicateSpec.empty, PredicateSpec.empty)) - ) - } - - @Test - fun isTrue() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isTrue() - } - - assertThat(actual).isEqualTo(IsTrueSpec(expressionSpec)) - } - - @Test - fun isFalse() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isFalse() - } - - assertThat(actual).isEqualTo(IsFalseSpec(expressionSpec)) - } - - @Test - fun isNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNull() - } - - assertThat(actual).isEqualTo(IsNullSpec(expressionSpec)) - } - - @Test - fun isNotNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNotNull() - } - - assertThat(actual).isEqualTo(NotSpec(IsNullSpec(expressionSpec))) - } - - @Test - fun like() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.like(value) - } - - assertThat(actual).isEqualTo(LikeSpec(expressionSpec, value)) - } - - @Test - fun notLike() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.notLike(value) - } - - assertThat(actual).isEqualTo(NotSpec(LikeSpec(expressionSpec, value))) - } -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/select/SpringDataReactiveQueryDslImplMultiSelectTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/select/SpringDataReactiveQueryDslImplMultiSelectTest.kt deleted file mode 100644 index d7ea982c6..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/select/SpringDataReactiveQueryDslImplMultiSelectTest.kt +++ /dev/null @@ -1,454 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.CountMultiSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplMultiSelectTest : WithKotlinJdslAssertions { - @Test - fun select() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - select(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectNonDistinct() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - select(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectDistinct() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - selectDistinct(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMulti() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - selectMulti(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiNonDistinctVararg() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - selectMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiNonDistinctList() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - selectMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiDistinctVararg() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - selectDistinctMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiDistinctList() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - selectDistinctMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - data class Row( - val id: String, - val name: String, - ) - - class Data1 { - val id: String = "test" - val name: String = "test_name" - } -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/select/SpringDataReactiveQueryDslImplSingleSelectTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/select/SpringDataReactiveQueryDslImplSingleSelectTest.kt deleted file mode 100644 index 401043980..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/select/SpringDataReactiveQueryDslImplSingleSelectTest.kt +++ /dev/null @@ -1,284 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.CountSingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.CountSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplSingleSelectTest : WithKotlinJdslAssertions { - @Test - fun noSelect() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - from(entity(Data1::class)) - } - - // then - val exception1 = catchThrowable(IllegalStateException::class) { - actual.createCriteriaQuerySpec() - } - - assertThat(exception1).hasMessageContaining("There is no select clause in query") - - val exception2 = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception2).hasMessageContaining("There is no select clause in query") - - val exception3 = catchThrowable(IllegalStateException::class) { - actual.createPageableQuerySpec() - } - - assertThat(exception3).hasMessageContaining("There is no select clause in query") - - val exception4 = catchThrowable(IllegalStateException::class) { - actual.createPageableCountQuerySpec() - } - - assertThat(exception4).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectEntity() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectExpression() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - select(distinct = true, column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectNonDistinctEntity() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = false, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectNonDistinctExpression() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - select(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectDistinctEntity() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - selectDistinct(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectDistinctExpression() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - selectDistinct(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun `inject countSelectClause`() { - val countSelectClause: SingleSelectClause - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - selectDistinct(column(Data1::id)) - from(entity(Data1::class)) - } - - SpringDataReactiveReactiveQueryDslImpl(Long::class.java).apply { - countSelectClause = select(count(column(Data1::name))) - } - - // then - val pageableCountQuerySpec = actual.createPageableCountQuerySpec(countSelectClause) - - assertThat(pageableCountQuerySpec.select).isEqualTo( - SingleSelectClause( - returnType = Long::class.java, - distinct = false, - expression = CountSpec( - distinct = false, - expression = ColumnSpec(EntitySpec(Data1::class.java), "name") - ) - ) - ) - } - - class Data1 { - val id: String = "test" - val name: String = "name" - } -} diff --git a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/where/SpringDataReactiveQueryDslImplWhereTest.kt b/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/where/SpringDataReactiveQueryDslImplWhereTest.kt deleted file mode 100644 index 83c2cce17..000000000 --- a/spring/data-reactive-core-jakarta/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/where/SpringDataReactiveQueryDslImplWhereTest.kt +++ /dev/null @@ -1,125 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.where - -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplWhereTest : WithKotlinJdslAssertions { - @Test - fun noWhere() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - } - - @Test - fun where() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - } - - @Test - fun wheres() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec1) - where(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - class Data1 -} diff --git a/spring/data-reactive-core/README.md b/spring/data-reactive-core/README.md deleted file mode 100644 index 9b4d78453..000000000 --- a/spring/data-reactive-core/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# Spring Data Kotlin JDSL Reactive - -Integrates Kotlin JDSL Reactive with Spring Data. - -## Quick start - JPA 2.2 - -Add Spring Data Kotlin JDSL hibernate-reactive and Spring Data Commons - -```kotlin -dependencies { - implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-hibernate-reactive:x.y.z") - implementation("org.springframework.data:spring-data-commons:x.y.z") - implementation("org.hibernate.reactive:hibernate-reactive-core:x.y.z") - implementation("io.smallrye.reactive:mutiny-kotlin:x.y.z") -} -``` - -## Quick start - JPA 3.0 - -Add Spring Data Kotlin JDSL hibernate-reactive and Spring Data Commons - -```kotlin -dependencies { - implementation("com.linecorp.kotlin-jdsl:spring-data-kotlin-jdsl-hibernate-reactive-jakarta:x.y.z") - implementation("org.springframework.data:spring-data-commons:x.y.z") - implementation("org.hibernate.reactive:hibernate-reactive-core-jakarta:x.y.z") - implementation("io.smallrye.reactive:mutiny-kotlin:x.y.z") -} -``` -Unfortunately, kotlin-jdsl's data-reactive-core(-jakarta) does not support Spring's declarative Transaction and Autoconfigure, unlike data-core. -The reason is that EntityManagerFactory must be created through ReactivePersistenceProvider, but Spring does not support this part. -Also, since there is also no ReactiveTransactionManager, it is difficult to support declarative transactions. -Therefore, we currently **only support integration with Spring Data Commons** (integrate with Page, Pageable, Range.Bound). - -This part will be updated when support for Hibernate Reactive is added in Spring in the future. -Therefore, you need to register EntityManagerFactory and SpringDataHibernateMutinyReactiveQueryFactory as beans by manually adding Configuration as shown below. - -Create a Configuration object as follows. - -```kotlin -@Configuration(proxyBeanMethods = false) -@ConditionalOnClass(ReactiveSession::class) -class QueryCreatorConfiguration { - @Bean - @ConditionalOnMissingBean(SubqueryCreator::class) - fun subqueryCreator(): SubqueryCreator { - return SubqueryCreatorImpl() - } - - @Bean - fun entityManagerFactory() = Persistence.createEntityManagerFactory("persistenceUnitName") - - @Bean - fun mutinySessionFactory(entityManagerFactory: EntityManagerFactory) = - entityManagerFactory.unwrap(SessionFactory::class.java) - - @Bean - fun queryFactory(sessionFactory: SessionFactory, subqueryCreator: SubqueryCreator): SpringDataHibernateMutinyReactiveQueryFactory { - return SpringDataHibernateMutinyReactiveQueryFactory( - sessionFactory = sessionFactory, - subqueryCreator = subqueryCreator - ) - } -} -``` - -If you really want full integration with Spring and Spring Boot, Spring Boot JPA, -You need to create Hibernate Reactive versions of HibernateJpaVendorAdapter, HibernateJpaConfiguration, HibernateJpaAutoConfiguration, ReactiveTransactionManager, DataJpaTest. -This is beyond our scope. - -Inject SpringDataHibernateMutinyReactiveQueryFactory in your service and query using it. -For more detailed usage, see [more](../../reactive-core/README.md#Quick-Start) - -```kotlin -@Service -class Service( - private val queryFactory: SpringDataHibernateMutinyReactiveQueryFactory, -) { - suspend fun findById(id: Long): Book { - return queryFactory.singleQuery { - select(entity(Book::class)) - from(entity(Book::class)) - where(col(Book::id).equal(id)) - } - } -} -``` -``` diff --git a/spring/data-reactive-core/build.gradle.kts b/spring/data-reactive-core/build.gradle.kts deleted file mode 100644 index 14aa78183..000000000 --- a/spring/data-reactive-core/build.gradle.kts +++ /dev/null @@ -1,14 +0,0 @@ -apply() - -dependencies { - compileOnly(libs.spring.jpa) - implementation(Modules.reactiveCore) - implementation(libs.java.persistence.api) - - testImplementation(Modules.testFixtureCore) - testImplementation(Modules.testFixtureEntity) - testImplementation(libs.spring.boot.test) - testImplementation(libs.spring.jpa) - testImplementation(libs.h2) - testImplementation(libs.coroutine.jdk8) -} diff --git a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactory.kt b/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactory.kt deleted file mode 100644 index 1eaca94ac..000000000 --- a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactory.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.* -import org.springframework.data.domain.Page -import org.springframework.data.domain.Pageable -import kotlin.reflect.KClass - -interface SpringDataReactiveQueryFactory { - fun selectQuery( - returnType: Class, - dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit - ): ReactiveQuery - - fun updateQuery( - target: KClass, - dsl: SpringDataReactiveCriteriaUpdateQueryDsl.() -> Unit - ): ReactiveQuery - - fun deleteQuery( - target: KClass, - dsl: SpringDataReactiveCriteriaDeleteQueryDsl.() -> Unit - ): ReactiveQuery - - fun subquery( - returnType: Class, - dsl: SpringDataReactiveSubqueryDsl.() -> Unit - ): SubqueryExpressionSpec - - suspend fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataReactivePageableQueryDsl.() -> Unit - ): Page - - suspend fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataReactivePageableQueryDsl.() -> Unit, - countProjection: SpringDataReactivePageableQueryDsl.() -> SingleSelectClause - ): Page -} diff --git a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactoryExtensions.kt b/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactoryExtensions.kt deleted file mode 100644 index e6956931a..000000000 --- a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactoryExtensions.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive - -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.* -import org.springframework.data.domain.Pageable - -suspend inline fun SpringDataReactiveQueryFactory.singleQuery( - noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit -) = selectQuery(dsl).singleResult() - -suspend inline fun SpringDataReactiveQueryFactory.singleQueryOrNull( - noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit -) = selectQuery(dsl).singleResultOrNull() - -suspend inline fun SpringDataReactiveQueryFactory.listQuery( - noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit -) = selectQuery(dsl).resultList() - -inline fun SpringDataReactiveQueryFactory.selectQuery(noinline dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit) = - selectQuery(T::class.java, dsl) - -inline fun SpringDataReactiveQueryFactory.updateQuery(noinline dsl: SpringDataReactiveCriteriaUpdateQueryDsl.() -> Unit) = - updateQuery(T::class, dsl) - -inline fun SpringDataReactiveQueryFactory.deleteQuery(noinline dsl: SpringDataReactiveCriteriaDeleteQueryDsl.() -> Unit) = - deleteQuery(T::class, dsl) - -inline fun SpringDataReactiveQueryFactory.subquery(noinline dsl: SpringDataReactiveSubqueryDsl.() -> Unit) = - subquery(T::class.java, dsl) - -suspend inline fun SpringDataReactiveQueryFactory.pageQuery( - pageable: Pageable, - noinline dsl: SpringDataReactivePageableQueryDsl.() -> Unit -) = pageQuery(T::class.java, pageable, dsl) - -suspend inline fun SpringDataReactiveQueryFactory.pageQuery( - pageable: Pageable, - noinline dsl: SpringDataReactivePageableQueryDsl.() -> Unit, - noinline countProjection: SpringDataReactivePageableQueryDsl.() -> SingleSelectClause, -) = pageQuery(T::class.java, pageable, dsl, countProjection) diff --git a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactoryImpl.kt b/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactoryImpl.kt deleted file mode 100644 index 5e9b6b993..000000000 --- a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/SpringDataReactiveQueryFactoryImpl.kt +++ /dev/null @@ -1,102 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.creator.ReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.* -import org.springframework.data.domain.Page -import org.springframework.data.domain.Pageable -import org.springframework.data.support.PageableExecutionUtils -import kotlin.reflect.KClass - -class SpringDataReactiveQueryFactoryImpl( - private val criteriaQueryCreator: ReactiveCriteriaQueryCreator, - private val subqueryCreator: SubqueryCreator, -) : SpringDataReactiveQueryFactory { - override fun selectQuery( - returnType: Class, - dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit - ): ReactiveQuery { - val criteriaQuerySpec = SpringDataReactiveReactiveQueryDslImpl(returnType).apply(dsl).createCriteriaQuerySpec() - - return criteriaQueryCreator.createQuery(criteriaQuerySpec) - } - - override fun updateQuery( - target: KClass, - dsl: SpringDataReactiveCriteriaUpdateQueryDsl.() -> Unit - ): ReactiveQuery { - val criteriaQuerySpec = SpringDataReactiveReactiveQueryDslImpl(target.java).apply(dsl).apply { - from(target) - }.createCriteriaUpdateQuerySpec() - - return criteriaQueryCreator.createQuery(criteriaQuerySpec) - } - - override fun deleteQuery( - target: KClass, - dsl: SpringDataReactiveCriteriaDeleteQueryDsl.() -> Unit - ): ReactiveQuery { - return criteriaQueryCreator.createQuery( - SpringDataReactiveReactiveQueryDslImpl(target.java).apply(dsl).apply { from(target) } - .createCriteriaDeleteQuerySpec() - ) - } - - override fun subquery( - returnType: Class, - dsl: SpringDataReactiveSubqueryDsl.() -> Unit - ): SubqueryExpressionSpec { - val subquerySpec = SpringDataReactiveReactiveQueryDslImpl(returnType).apply(dsl).createSubquerySpec() - - return SubqueryExpressionSpec(subquerySpec, subqueryCreator) - } - - override suspend fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataReactivePageableQueryDsl.() -> Unit - ): Page { - val appliedDsl = SpringDataReactiveReactiveQueryDslImpl(returnType).apply { dsl(); this.pageable = pageable } - - val pageableQuery = criteriaQueryCreator.createQuery(appliedDsl.createPageableQuerySpec()) - return pageableQuery.resultList().let { pageList -> - criteriaQueryCreator.createQuery(appliedDsl.createPageableCountQuerySpec()).resultList() - .let { pageableCountTotals -> - PageableExecutionUtils.getPage(pageList, pageable) { - executeCountQuery(pageableCountTotals) - } - } - } - } - - override suspend fun pageQuery( - returnType: Class, - pageable: Pageable, - dsl: SpringDataReactivePageableQueryDsl.() -> Unit, - countProjection: SpringDataReactivePageableQueryDsl.() -> SingleSelectClause, - ): Page { - val appliedDsl = SpringDataReactiveReactiveQueryDslImpl(returnType).apply { dsl(); this.pageable = pageable } - val countSelectClause = SpringDataReactiveReactiveQueryDslImpl(Long::class.java).run(countProjection) - - val pageableQuery = criteriaQueryCreator.createQuery(appliedDsl.createPageableQuerySpec()) - return pageableQuery.resultList().let { pageList -> - criteriaQueryCreator.createQuery(appliedDsl.createPageableCountQuerySpec(countSelectClause)).resultList() - .let { pageableCountTotals -> - PageableExecutionUtils.getPage(pageList, pageable) { - executeCountQuery(pageableCountTotals) - } - } - } - } - - private fun executeCountQuery(totals: List): Long { - return if (totals.size == 1) { - totals.first() - } else { - totals.count().toLong() - } - } -} diff --git a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/query/clause/limit/SpringDataReactivePageableLimitClause.kt b/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/query/clause/limit/SpringDataReactivePageableLimitClause.kt deleted file mode 100644 index 7f49714a3..000000000 --- a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/query/clause/limit/SpringDataReactivePageableLimitClause.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.query.clause.limit - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import org.springframework.data.domain.Pageable - -data class SpringDataReactivePageableLimitClause( - private val pageable: Pageable -) : QueryLimitClause> { - override fun apply(query: ReactiveQuery) { - if (pageable.isPaged) { - query.setFirstResult(pageable.offset.toInt()) - query.setMaxResults(pageable.pageSize) - } - } -} diff --git a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/query/clause/orderby/SpringDataReactivePageableOrderByClause.kt b/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/query/clause/orderby/SpringDataReactivePageableOrderByClause.kt deleted file mode 100644 index adefed986..000000000 --- a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/query/clause/orderby/SpringDataReactivePageableOrderByClause.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.spec.Froms -import org.springframework.data.domain.Pageable -import org.springframework.data.jpa.repository.query.QueryUtils -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery - -data class SpringDataReactivePageableOrderByClause( - private val pageable: Pageable -) : CriteriaQueryOrderByClause { - override fun apply(froms: Froms, query: CriteriaQuery<*>, criteriaBuilder: CriteriaBuilder) { - query.orderBy(QueryUtils.toOrders(pageable.sort, froms.root, criteriaBuilder)) - } -} diff --git a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaDeleteQueryDsl.kt b/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaDeleteQueryDsl.kt deleted file mode 100644 index 3f24d9c03..000000000 --- a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaDeleteQueryDsl.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.querydsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaDeleteQueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.predicate.SpringDataReactivePredicateDsl - -interface SpringDataReactiveCriteriaDeleteQueryDsl : CriteriaDeleteQueryDsl, SpringDataReactivePredicateDsl diff --git a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaQueryDsl.kt b/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaQueryDsl.kt deleted file mode 100644 index 1429372fb..000000000 --- a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaQueryDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.querydsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaQueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.predicate.SpringDataReactivePredicateDsl - -interface SpringDataReactiveCriteriaQueryDsl : - CriteriaQueryDsl, - SpringDataReactivePredicateDsl diff --git a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaUpdateQueryDsl.kt b/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaUpdateQueryDsl.kt deleted file mode 100644 index df2abca2e..000000000 --- a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveCriteriaUpdateQueryDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.querydsl - -import com.linecorp.kotlinjdsl.querydsl.CriteriaUpdateQueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.predicate.SpringDataReactivePredicateDsl - -interface SpringDataReactiveCriteriaUpdateQueryDsl : - CriteriaUpdateQueryDsl, - SpringDataReactivePredicateDsl diff --git a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactivePageableQueryDsl.kt b/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactivePageableQueryDsl.kt deleted file mode 100644 index 7840b5324..000000000 --- a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactivePageableQueryDsl.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.querydsl - -import com.linecorp.kotlinjdsl.querydsl.expression.ExpressionDsl -import com.linecorp.kotlinjdsl.querydsl.from.FromDsl -import com.linecorp.kotlinjdsl.querydsl.from.JoinDsl -import com.linecorp.kotlinjdsl.querydsl.from.RelationDsl -import com.linecorp.kotlinjdsl.querydsl.hint.HintDsl -import com.linecorp.kotlinjdsl.querydsl.select.MultiSelectDsl -import com.linecorp.kotlinjdsl.querydsl.select.SingleSelectDsl -import com.linecorp.kotlinjdsl.querydsl.where.WhereDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.predicate.SpringDataReactivePredicateDsl - -/** - * DSL for Spring Data JPA Pageable - * - * Pageable DSL does not support Fetch and GroupBy clause because they have to load a lot of data to memory. - * To use the Fetch and GroupBy clause for pagination, separate the query. - */ -interface SpringDataReactivePageableQueryDsl : - ExpressionDsl, - SpringDataReactivePredicateDsl, - SingleSelectDsl, - MultiSelectDsl, - FromDsl, - JoinDsl, - RelationDsl, - WhereDsl, - HintDsl diff --git a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveReactiveQueryDslImpl.kt b/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveReactiveQueryDslImpl.kt deleted file mode 100644 index 933259968..000000000 --- a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveReactiveQueryDslImpl.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.querydsl - -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.hint.JpaReactiveQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.SqlQueryHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.QueryLimitClause -import com.linecorp.kotlinjdsl.query.clause.limit.ReactiveLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.CriteriaQueryOrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.* -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.limit.SpringDataReactivePageableLimitClause -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.orderby.SpringDataReactivePageableOrderByClause -import org.springframework.data.domain.Pageable - -/** - * Internal DSL Implementation which is integrated Spring Data JPA - * - * Don't use this directly because it's an **INTERNAL** class. - * It does not support backward compatibility. - */ -class SpringDataReactiveReactiveQueryDslImpl( - returnType: Class, -) : ReactiveQueryDslImpl(returnType), - SpringDataReactiveCriteriaQueryDsl, SpringDataReactiveSubqueryDsl, SpringDataReactivePageableQueryDsl, - SpringDataReactiveCriteriaUpdateQueryDsl, SpringDataReactiveCriteriaDeleteQueryDsl { - var pageable: Pageable = Pageable.unpaged() - - fun createPageableQuerySpec(): CriteriaQuerySpec> { - return CriteriaQuerySpecImpl( - select = getCriteriaQuerySelectClause(), - from = getFromClause(), - join = getJoinClauseDoesNotHaveFetch(), - where = getWhereClause(), - groupBy = getEmptyGroupByClause(), - having = getEmptyHavingClause(), - orderBy = getPageableOrderByClause(), - limit = getPageableLimitClause(), - sqlHint = getSqlQueryHintClause(), - jpaHint = getJpaQueryHintClause(), - ) - } - - @Suppress("UNCHECKED_CAST") - fun createPageableCountQuerySpec(countSelectClause: SingleSelectClause? = null): CriteriaQuerySpec> { - return CriteriaQuerySpecImpl( - select = countSelectClause ?: getCriteriaCountQuerySelectClause(), - from = getFromClause(), - join = getJoinClauseDoesNotHaveFetch(), - where = getWhereClause(), - groupBy = getEmptyGroupByClause(), - having = getEmptyHavingClause(), - orderBy = getEmptyOrderByClause(), - limit = getEmptyLimitClause() as ReactiveLimitClause, - jpaHint = getJpaQueryHintClause() as JpaReactiveQueryHintClauseImpl, - sqlHint = getSqlQueryHintClause() as SqlQueryHintClause>, - ) - } - - private fun getCriteriaCountQuerySelectClause(): CriteriaQuerySelectClause { - return when (val selectClause = getCriteriaQuerySelectClause()) { - is SingleSelectClause -> CountSingleSelectClause(selectClause.distinct, selectClause.expression) - is MultiSelectClause -> CountMultiSelectClause(selectClause.distinct, selectClause.expressions) - else -> throw IllegalStateException("Pageable query does not support $selectClause") - } - } - - private fun getPageableOrderByClause(): CriteriaQueryOrderByClause { - return SpringDataReactivePageableOrderByClause(pageable) - } - - private fun getPageableLimitClause(): QueryLimitClause> { - return SpringDataReactivePageableLimitClause(pageable) - } -} diff --git a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveSubqueryDsl.kt b/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveSubqueryDsl.kt deleted file mode 100644 index 161e0d96e..000000000 --- a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/SpringDataReactiveSubqueryDsl.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.reactive.querydsl - -import com.linecorp.kotlinjdsl.querydsl.SubqueryDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.predicate.SpringDataReactivePredicateDsl - -interface SpringDataReactiveSubqueryDsl : - SubqueryDsl, - SpringDataReactivePredicateDsl diff --git a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/predicate/SpringDataReactivePredicateDsl.kt b/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/predicate/SpringDataReactivePredicateDsl.kt deleted file mode 100644 index 432f1cea2..000000000 --- a/spring/data-reactive-core/src/main/kotlin/com/linecorp/kotlinjdsl/spring/reactive/querydsl/predicate/SpringDataReactivePredicateDsl.kt +++ /dev/null @@ -1,30 +0,0 @@ -@file:Suppress("RemoveExplicitTypeArguments") - -package com.linecorp.kotlinjdsl.spring.reactive.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.GreaterThanValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.LessThanValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.predicate.PredicateDsl -import org.springframework.data.domain.Range - -interface SpringDataReactivePredicateDsl : PredicateDsl { - fun ExpressionSpec.greaterThan(bound: Range.Bound) where R : Comparable, R : Any, T : R? = - if (bound.isBounded) { - GreaterThanValueSpec(this, bound.value.get(), bound.isInclusive) - } else { - PredicateSpec.empty - } - - fun ExpressionSpec.lessThan(bound: Range.Bound) where R : Comparable, R : Any, T : R? = - if (bound.isBounded) { - LessThanValueSpec(this, bound.value.get(), bound.isInclusive) - } else { - PredicateSpec.empty - } - - fun ExpressionSpec.between(range: Range) where R : Comparable, R : Any, T : R? = - AndSpec(listOf(greaterThan(range.lowerBound), lessThan(range.upperBound))) -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataReactiveQueryFactoryExtensionsTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataReactiveQueryFactoryExtensionsTest.kt deleted file mode 100644 index 348b4eed5..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataReactiveQueryFactoryExtensionsTest.kt +++ /dev/null @@ -1,238 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.reactive.* -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.* -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import kotlinx.coroutines.runBlocking -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.Page -import org.springframework.data.domain.PageRequest - -@ExtendWith(MockKExtension::class) -internal class SpringDataReactiveQueryFactoryExtensionsTest : WithKotlinJdslAssertions { - @MockK - private lateinit var queryFactory: SpringDataReactiveQueryFactory - - @MockK - private lateinit var reactiveQuery: ReactiveQuery - - @MockK - private lateinit var subqueryExpressionSpec: SubqueryExpressionSpec - - @MockK - private lateinit var page: Page - - @Test - fun singleQuery(): Unit = runBlocking { - // given - every { queryFactory.selectQuery(any(), any()) } returns reactiveQuery - coEvery { reactiveQuery.singleResult() } returns Data1() - - val dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: Data1 = queryFactory.singleQuery(dsl) - - // then - assertThat(actual).isEqualTo(Data1()) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - coVerify(exactly = 1) { - reactiveQuery.singleResult() - } - - confirmVerified(queryFactory, reactiveQuery) - } - - @Test - fun listQuery(): Unit = runBlocking { - // given - every { queryFactory.selectQuery(any(), any()) } returns reactiveQuery - coEvery { reactiveQuery.resultList() } returns listOf(Data1()) - - val dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: List = queryFactory.listQuery(dsl) - - // then - assertThat(actual).isEqualTo(listOf(Data1())) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - coVerify(exactly = 1) { - reactiveQuery.resultList() - } - - confirmVerified(queryFactory, reactiveQuery) - } - - @Test - fun selectQuery(): Unit = runBlocking { - // given - every { queryFactory.selectQuery(any(), any()) } returns reactiveQuery - - val dsl: SpringDataReactiveCriteriaQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual = queryFactory.selectQuery(dsl) - - // then - assertThat(actual).isEqualTo(reactiveQuery) - - verify(exactly = 1) { - queryFactory.selectQuery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun updateQuery() { - // given - every { queryFactory.updateQuery(any(), any()) } returns reactiveQuery - - val dsl: SpringDataReactiveCriteriaUpdateQueryDsl.() -> Unit = { - set(col(Data1::id), 1) - where(col(Data1::id).equal(2)) - } - - // when - val actual = queryFactory.updateQuery(dsl) - - // then - assertThat(actual).isEqualTo(reactiveQuery) - - verify(exactly = 1) { - queryFactory.updateQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun deleteQuery() { - // given - every { queryFactory.deleteQuery(any(), any()) } returns reactiveQuery - - val dsl: SpringDataReactiveCriteriaDeleteQueryDsl.() -> Unit = { - where(col(Data1::id).equal(1)) - } - - // when - val actual = queryFactory.deleteQuery(dsl) - - // then - assertThat(actual).isEqualTo(reactiveQuery) - - verify(exactly = 1) { - queryFactory.deleteQuery(Data1::class, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun subquery() { - // given - every { queryFactory.subquery(any(), any()) } returns subqueryExpressionSpec - - val dsl: SpringDataReactiveSubqueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: SubqueryExpressionSpec = queryFactory.subquery(dsl) - - // then - assertThat(actual).isEqualTo(subqueryExpressionSpec) - - verify(exactly = 1) { - queryFactory.subquery(Data1::class.java, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun pageQuery() = runBlocking { - // given - coEvery { queryFactory.pageQuery(any(), any(), any()) } returns page - - val pageable = PageRequest.of(1, 10) - - val dsl: SpringDataReactivePageableQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl) - - // then - assertThat(actual).isEqualTo(page) - - coVerify(exactly = 1) { - queryFactory.pageQuery(Data1::class.java, pageable, dsl) - } - - confirmVerified(queryFactory) - } - - @Test - fun `pageQuery with countProjection`() = runBlocking { - // given - coEvery { queryFactory.pageQuery(any(), any(), any(), any()) } returns page - - val pageable = PageRequest.of(1, 10) - - val dsl: SpringDataReactivePageableQueryDsl.() -> Unit = { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - val countProjection: SpringDataReactivePageableQueryDsl.() -> SingleSelectClause = { - select(count(column(Data1::id))) - } - - // when - val actual: Page = queryFactory.pageQuery(pageable, dsl, countProjection) - - // then - assertThat(actual).isEqualTo(page) - - coVerify(exactly = 1) { - queryFactory.pageQuery(Data1::class.java, pageable, dsl, countProjection) - } - - confirmVerified(queryFactory) - } - - data class Data1( - val id: Int = 100 - ) -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataReactiveQueryFactoryImplTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataReactiveQueryFactoryImplTest.kt deleted file mode 100644 index ce00ff64b..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/SpringDataReactiveQueryFactoryImplTest.kt +++ /dev/null @@ -1,351 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive - -import com.linecorp.kotlinjdsl.query.CriteriaQuerySpec -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.clause.hint.JpaReactiveQueryHintClauseImpl -import com.linecorp.kotlinjdsl.query.clause.hint.emptySqlHintClause -import com.linecorp.kotlinjdsl.query.clause.limit.ReactiveLimitClause -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.clause.select.CountSingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.set.SetClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.creator.ReactiveCriteriaQueryCreator -import com.linecorp.kotlinjdsl.query.creator.SubqueryCreator -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.CountSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.expression.SubqueryExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.EqualValueSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.ReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.querydsl.expression.col -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.reactive.SpringDataReactiveQueryFactoryImpl -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.limit.SpringDataReactivePageableLimitClause -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.orderby.SpringDataReactivePageableOrderByClause -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.* -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import kotlinx.coroutines.runBlocking -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.PageImpl -import org.springframework.data.domain.PageRequest - -@ExtendWith(MockKExtension::class) -internal class SpringDataReactiveQueryFactoryImplTest : WithKotlinJdslAssertions { - @InjectMockKs - private lateinit var sut: SpringDataReactiveQueryFactoryImpl - - @MockK - private lateinit var criteriaQueryCreator: ReactiveCriteriaQueryCreator - - @MockK - private lateinit var subqueryCreator: SubqueryCreator - - @Test - fun selectQuery() { - // given - val query: ReactiveQuery = mockk() - - val data = ReactiveQueryDslImpl.CriteriaQuerySpecImpl>( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java), - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = ReactiveLimitClause.empty(), - sqlHint = emptySqlHintClause(), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - ) - - every { criteriaQueryCreator.createQuery(any>>()) } returns query - - // when - val actual = sut.selectQuery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - assertThat(actual).isEqualTo(query) - - verify { - criteriaQueryCreator.createQuery(data) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun updateQuery() { - // given - val query: ReactiveQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>>()) } returns query - - // when - val actual = sut.updateQuery(Data1::class) { - where(col(Data1::id).equal(1)) - set(col(Data1::id), 2) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl.CriteriaUpdateQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - set = SetClause(mapOf(ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) to 2)), - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun deleteQuery() { - // given - val query: ReactiveQuery = mockk() - - every { criteriaQueryCreator.createQuery(any>>()) } returns query - - // when - val actual = sut.deleteQuery(Data1::class) { - where(col(Data1::id).equal(1)) - } - - // then - assertThat(actual).isEqualTo(query) - - verify(exactly = 1) { - val columnSpec = ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name) - criteriaQueryCreator.createQuery( - ReactiveQueryDslImpl.CriteriaDeleteQuerySpecImpl( - from = FromClause(EntitySpec(Data1::class.java)), - associate = SimpleAssociatedJoinClause(emptyList()), - where = WhereClause(EqualValueSpec(columnSpec, 1)), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - targetEntity = Data1::class.java - ) - ) - } - - confirmVerified(criteriaQueryCreator) - } - - @Test - fun subquery() { - // when - val actual = sut.subquery(Data1::class.java) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - val subquerySpec = ReactiveQueryDslImpl.SubquerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - ) - - assertThat(actual).isEqualTo(SubqueryExpressionSpec(subquerySpec, subqueryCreator)) - } - - @Test - fun pageQuery() = runBlocking { - // given - val pageable = PageRequest.of(0, 5) - - val expectedPageableSpec: CriteriaQuerySpec> = - ReactiveQueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = SpringDataReactivePageableOrderByClause(pageable), - limit = SpringDataReactivePageableLimitClause(pageable), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val expectedPageableCountSpec = ReactiveQueryDslImpl.CriteriaQuerySpecImpl( - select = CountSingleSelectClause( - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = ReactiveLimitClause.empty>(), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val pageableQuery: ReactiveQuery = mockk { - coEvery { resultList() } returns ( - listOf( - Data1(1), - Data1(2), - Data1(3), - Data1(4), - Data1(5) - ) - ) - } - - val pageableCountQuery: ReactiveQuery = mockk { - coEvery { resultList() } returns listOf(50L) - } - - coEvery { criteriaQueryCreator.createQuery(expectedPageableSpec) } returns pageableQuery - coEvery { criteriaQueryCreator.createQuery(expectedPageableCountSpec) } returns pageableCountQuery - - // when - val actual = sut.pageQuery(Data1::class.java, pageable) { - select(entity(Data1::class)) - from(entity(Data1::class)) - } - - // then - assertThat(actual).isEqualTo(PageImpl(listOf(Data1(1), Data1(2), Data1(3), Data1(4), Data1(5)), pageable, 50)) - - coVerify(exactly = 1) { - criteriaQueryCreator.createQuery(expectedPageableSpec) - criteriaQueryCreator.createQuery(expectedPageableCountSpec) - - pageableQuery.resultList() - pageableCountQuery.resultList() - } - - confirmVerified(pageableQuery, pageableCountQuery, criteriaQueryCreator) - } - - @Test - fun `pageQuery with countProjection`() = runBlocking { - // given - val pageable = PageRequest.of(0, 5) - - val expectedPageableSpec: CriteriaQuerySpec> = - ReactiveQueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - Data1::class.java, - distinct = false, - EntitySpec(Data1::class.java) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = SpringDataReactivePageableOrderByClause(pageable), - limit = SpringDataReactivePageableLimitClause(pageable), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val expectedPageableCountSpec: CriteriaQuerySpec> = - ReactiveQueryDslImpl.CriteriaQuerySpecImpl( - select = SingleSelectClause( - returnType = Long::class.java, - distinct = false, - expression = CountSpec( - distinct = false, - expression = ColumnSpec(EntitySpec(Data1::class.java), "id") - ) - ), - from = FromClause(EntitySpec(Data1::class.java)), - join = JoinClause(emptyList()), - where = WhereClause(PredicateSpec.empty), - groupBy = GroupByClause(emptyList()), - having = HavingClause(PredicateSpec.empty), - orderBy = OrderByClause(emptyList()), - limit = ReactiveLimitClause.empty(), - jpaHint = JpaReactiveQueryHintClauseImpl(emptyMap()), - sqlHint = emptySqlHintClause(), - ) - - val pageableQuery: ReactiveQuery = mockk { - coEvery { resultList() } returns ( - listOf( - Data1(1), - Data1(2), - Data1(3), - Data1(4), - Data1(5) - ) - ) - } - - val pageableCountQuery: ReactiveQuery = mockk { - coEvery { resultList() } returns listOf(50L) - } - - every { criteriaQueryCreator.createQuery(expectedPageableSpec) } returns pageableQuery - every { criteriaQueryCreator.createQuery(expectedPageableCountSpec) } returns pageableCountQuery - - // when - val actual = sut.pageQuery(Data1::class.java, pageable, dsl = { - select(entity(Data1::class)) - from(entity(Data1::class)) - }, countProjection = { - select(count(column(Data1::id))) - }) - - // then - assertThat(actual).isEqualTo(PageImpl(listOf(Data1(1), Data1(2), Data1(3), Data1(4), Data1(5)), pageable, 50)) - - coVerify(exactly = 1) { - criteriaQueryCreator.createQuery(expectedPageableSpec) - criteriaQueryCreator.createQuery(expectedPageableCountSpec) - - pageableQuery.resultList() - pageableCountQuery.resultList() - } - - confirmVerified(pageableQuery, pageableCountQuery, criteriaQueryCreator) - } - - data class Data1( - val id: Int = 1 - ) -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/clause/limit/SpringDataReactivePageableLimitClauseTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/clause/limit/SpringDataReactivePageableLimitClauseTest.kt deleted file mode 100644 index 402c4a1dd..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/clause/limit/SpringDataReactivePageableLimitClauseTest.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.query.clause.limit - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.limit.SpringDataReactivePageableLimitClause -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.confirmVerified -import io.mockk.every -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import io.mockk.verify -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable - -@ExtendWith(MockKExtension::class) -internal class SpringDataReactivePageableLimitClauseTest : WithKotlinJdslAssertions { - @MockK - private lateinit var query: ReactiveQuery - - @Test - fun apply() { - // given - val pageable = PageRequest.of(1, 10) - - every { query.setFirstResult(10) } returns query - every { query.setMaxResults(10) } returns query - - // when - SpringDataReactivePageableLimitClause(pageable).apply(query) - - // then - verify(exactly = 1) { - query.setFirstResult(10) - query.setMaxResults(10) - } - - confirmVerified(query) - } - - @Test - fun `apply - unPaged`() { - // given - val pageable = Pageable.unpaged() - - // when - SpringDataReactivePageableLimitClause(pageable).apply(query) - - // then - confirmVerified(query) - } -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/clause/orderby/SpringDataReactivePageableOrderByClauseTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/clause/orderby/SpringDataReactivePageableOrderByClauseTest.kt deleted file mode 100644 index 4a4bfff91..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/query/clause/orderby/SpringDataReactivePageableOrderByClauseTest.kt +++ /dev/null @@ -1,57 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.query.clause.orderby - -import com.linecorp.kotlinjdsl.query.spec.Froms -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.orderby.SpringDataReactivePageableOrderByClause -import io.mockk.* -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension -import org.assertj.core.api.WithAssertions -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Sort -import org.springframework.data.jpa.repository.query.QueryUtils -import javax.persistence.criteria.CriteriaBuilder -import javax.persistence.criteria.CriteriaQuery -import javax.persistence.criteria.Order -import javax.persistence.criteria.Root - -@ExtendWith(MockKExtension::class) -internal class SpringDataReactivePageableOrderByClauseTest : WithAssertions { - @MockK - private lateinit var froms: Froms - - @MockK - private lateinit var query: CriteriaQuery<*> - - @MockK - private lateinit var criteriaBuilder: CriteriaBuilder - - @Test - fun apply() { - // given - mockkStatic(QueryUtils::class) - - val sort = Sort.by(Sort.Direction.ASC, "test") - val pageable = PageRequest.of(1, 10, sort) - - val root: Root<*> = mockk() - val order: Order = mockk() - - every { froms.root } returns root - every { QueryUtils.toOrders(sort, root, criteriaBuilder) } returns listOf(order) - every { query.orderBy(listOf(order)) } returns query - - // when - SpringDataReactivePageableOrderByClause(pageable).apply(froms, query, criteriaBuilder) - - // then - verify(exactly = 1) { - froms.root - QueryUtils.toOrders(sort, root, criteriaBuilder) - query.orderBy(listOf(order)) - } - - clearStaticMockk(QueryUtils::class) - } -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/expression/SpringDataReactiveQueryDslImplExpressionTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/expression/SpringDataReactiveQueryDslImplExpressionTest.kt deleted file mode 100644 index fefdf7d34..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/expression/SpringDataReactiveQueryDslImplExpressionTest.kt +++ /dev/null @@ -1,366 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.expression - -import com.linecorp.kotlinjdsl.query.spec.expression.* -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.querydsl.expression.WhenDsl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplExpressionTest : WithKotlinJdslAssertions { - @Test - fun entity() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class) - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java)) - } - - @Test - fun entityWithAlias() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = entity(Data1::class, "data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun alias() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = Data1::class.alias("data1") - } - - assertThat(actual).isEqualTo(EntitySpec(Data1::class.java, "data1")) - } - - @Test - fun literal() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = literal(10) - } - - assertThat(actual).isEqualTo(LiteralSpec(10)) - } - - @Test - fun nullLiteral() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = nullLiteral(Int::class.java) - } - - assertThat(actual).isEqualTo(NullLiteralSpec(Int::class.java)) - } - - @Test - fun col() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = col(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun column() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = column(entity(Data1::class), Data1::id) - } - - assertThat(actual).isEqualTo(ColumnSpec(EntitySpec(Data1::class.java), "id")) - } - - @Test - fun max() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = max(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MaxSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun min() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = min(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - MinSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun avg() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = avg(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - AvgSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun sum() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = sum(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - SumSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun count() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = count(distinct = true, col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countNonDistinct() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = count(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun countDistinct() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = countDistinct(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - CountSpec(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun greatest() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = greatest(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - GreatestSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun least() { - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = least(col(entity(Data1::class), Data1::id)) - } - - assertThat(actual).isEqualTo( - LeastSpec(ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun caseList() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = case( - listOf( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - ), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun caseVararg() { - val predicate1: PredicateSpec = mockk() - val predicate2: PredicateSpec = mockk() - - val expression1: ExpressionSpec = mockk() - val expression2: ExpressionSpec = mockk() - - val actual: ExpressionSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = case( - `when`(predicate1).then(expression1), - `when`(predicate2).then(expression2), - `else` = nullLiteral(String::class.java) - ) - } - - assertThat(actual).isEqualTo( - CaseSpec( - listOf( - CaseSpec.WhenSpec(predicate1, expression1), - CaseSpec.WhenSpec(predicate2, expression2) - ), NullLiteralSpec(String::class.java) - ) - ) - } - - @Test - fun `when`() { - val predicate1: PredicateSpec = mockk() - val expression1: ExpressionSpec = mockk() - - val actual: CaseSpec.WhenSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1, expression1) - } - - assertThat(actual).isEqualTo(CaseSpec.WhenSpec(predicate1, expression1)) - } - - @Test - fun whenWithPredicate() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = `when`(predicate1) - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - @Test - fun whenWithLambda() { - val predicate1: PredicateSpec = mockk() - - val actual: WhenDsl - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = `when` { predicate1 } - } - - assertThat(actual).isEqualTo(WhenDsl(predicate1)) - } - - - @Test - fun functionVarArg() { - // when - val actual: FunctionSpec - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - @Test - fun functionList() { - // when - val actual: FunctionSpec - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = function( - "substring", - String::class.java, - listOf( - column(EntitySpec(Data1::class.java), Data1::id), - literal(1), - literal(2) - ) - ) - } - - // then - assertThat(actual).isEqualTo( - FunctionSpec( - name = "substring", - returnType = String::class.java, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), Data1::id.name), - LiteralSpec(1), - LiteralSpec(2) - ) - ) - ) - } - - class Data1 { - val id: Int = 10 - } -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplFetchTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplFetchTest.kt deleted file mode 100644 index 7310f0dbb..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplFetchTest.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.spec.FetchJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import javax.persistence.criteria.JoinType - -internal class SpringDataReactiveQueryDslImplFetchTest : WithKotlinJdslAssertions { - @Test - fun fetch() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - fetch(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - fetch(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - fetch(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val fetchSpec = FetchJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(fetchSpec, fetchSpec, fetchSpec, fetchSpec)) - ) - - val exception1 = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception1).hasMessageContaining("This query does not support fetch") - - val exception2 = catchThrowable(IllegalStateException::class) { - actual.createPageableQuerySpec() - } - - assertThat(exception2).hasMessageContaining("This query does not support fetch") - - val exception3 = catchThrowable(IllegalStateException::class) { - actual.createPageableCountQuerySpec() - } - - assertThat(exception3).hasMessageContaining("This query does not support fetch") - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplFromTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplFromTest.kt deleted file mode 100644 index 78cd81511..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplFromTest.kt +++ /dev/null @@ -1,113 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.FromClause -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplFromTest : WithKotlinJdslAssertions { - @Test - fun fromJavaClass() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromKotlinClass() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java)) - ) - } - - @Test - fun fromEntitySpec() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class, "data1")) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.from).isEqualTo( - FromClause(EntitySpec(Data1::class.java, "data1")) - ) - } - - class Data1 -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplJoinTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplJoinTest.kt deleted file mode 100644 index 1e08bd171..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplJoinTest.kt +++ /dev/null @@ -1,260 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.from - -import com.linecorp.kotlinjdsl.query.clause.from.JoinClause -import com.linecorp.kotlinjdsl.query.clause.from.SimpleAssociatedJoinClause -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.CrossJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleAssociatedJoinSpec -import com.linecorp.kotlinjdsl.query.spec.SimpleJoinSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test -import javax.persistence.criteria.JoinType - -internal class SpringDataReactiveQueryDslImplJoinTest : WithKotlinJdslAssertions { - @Test - fun on() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = on(predicateSpec) - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun onLambda() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = on { predicateSpec } - } - - assertThat(actual).isEqualTo(predicateSpec) - } - - @Test - fun join() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - join(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2", - JoinType.LEFT - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun associate() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun updateAssociate() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - } - - // then - val joinSpec = SimpleAssociatedJoinSpec( - left = EntitySpec(Data1::class.java), - right = EntitySpec(Data2::class.java), - path = "data2" - ) - - val criteriaQuerySpec = actual.createCriteriaUpdateQuerySpec() - - assertThat(criteriaQuerySpec.associate).isEqualTo( - SimpleAssociatedJoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec, joinSpec, joinSpec)) - ) - } - - @Test - fun updateAssociateOnlyAllowsSimpleAssociatedJoinSpec() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - associate(entity(Data1::class), entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(Data1::class, entity(Data2::class), on(Data1::data2), JoinType.LEFT) - associate(entity(Data1::class), Data2::class, on(Data1::data2), JoinType.LEFT) - associate(Data1::class, Data2::class, on(Data1::data2), JoinType.LEFT) - join(Data1::class, Data2::class, on(Data1::data2)) - } - - val result = catchThrowable(IllegalStateException::class) { actual.createCriteriaUpdateQuerySpec() } - - assertThat(result).hasMessage("This query only support associate") - } - - @Test - fun crossJoin() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(Data1::class.java) - join(Data2::class, on(predicateSpec1)) - join(entity(Data2::class), on(predicateSpec1)) - where(predicateSpec2) - } - - // then - val joinSpec = CrossJoinSpec(EntitySpec(Data2::class.java)) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.join).isEqualTo( - JoinClause(listOf(joinSpec, joinSpec)) - ) - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec1, predicateSpec2))) - ) - } - - class Data1 { - val data2: Data2 = Data2() - } - - class Data2 -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplRelationTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplRelationTest.kt deleted file mode 100644 index db25b1056..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/from/SpringDataReactiveQueryDslImplRelationTest.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.from - -import com.linecorp.kotlinjdsl.querydsl.from.Relation -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplRelationTest : WithKotlinJdslAssertions { - @Test - fun on() { - val actual: Relation - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2) - } - - assertThat(actual).isEqualTo(Relation("data2")) - } - - @Test - fun onCollection() { - val actual: Relation - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = on(Data1::data2List) - } - - assertThat(actual).isEqualTo(Relation("data2List")) - } - - class Data1 { - val data2: Data2 = Data2() - val data2List: List = emptyList() - } - - class Data2 -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/groupby/SpringDataReactiveQueryDslImplGroupByTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/groupby/SpringDataReactiveQueryDslImplGroupByTest.kt deleted file mode 100644 index aaf3797a5..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/groupby/SpringDataReactiveQueryDslImplGroupByTest.kt +++ /dev/null @@ -1,124 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.groupby - -import com.linecorp.kotlinjdsl.query.clause.groupby.GroupByClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplGroupByTest : WithKotlinJdslAssertions { - @Test - fun noGroupBy() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - @Test - fun groupByVararg() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(columnSpec1, columnSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - @Test - fun groupByList() { - // given - val columnSpec1: ColumnSpec = mockk() - val columnSpec2: ColumnSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - groupBy(listOf(columnSpec1, columnSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.groupBy).isEqualTo( - GroupByClause(listOf(columnSpec1, columnSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.groupBy).isEqualTo( - GroupByClause(emptyList()) - ) - } - - class Data1 -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/having/SpringDataReactiveQueryDslImplHavingTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/having/SpringDataReactiveQueryDslImplHavingTest.kt deleted file mode 100644 index 11a0e5556..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/having/SpringDataReactiveQueryDslImplHavingTest.kt +++ /dev/null @@ -1,125 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.having - -import com.linecorp.kotlinjdsl.query.clause.having.HavingClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplHavingTest : WithKotlinJdslAssertions { - @Test - fun noHaving() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - @Test - fun having() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(predicateSpec) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - @Test - fun multipleHaving() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - having(predicateSpec1) - having(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.having).isEqualTo( - HavingClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.having).isEqualTo( - HavingClause(PredicateSpec.empty) - ) - } - - class Data1 -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/hint/SpringDataReactiveQueryDslImplHintTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/hint/SpringDataReactiveQueryDslImplHintTest.kt deleted file mode 100644 index 60059c917..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/hint/SpringDataReactiveQueryDslImplHintTest.kt +++ /dev/null @@ -1,111 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.hint - -import com.linecorp.kotlinjdsl.query.ReactiveQuery -import com.linecorp.kotlinjdsl.query.clause.hint.JpaReactiveQueryHintClauseImpl -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplHintTest : WithKotlinJdslAssertions { - @Test - fun noHints() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - JpaReactiveQueryHintClauseImpl>(emptyMap()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.jpaHint).isEqualTo( - JpaReactiveQueryHintClauseImpl>(emptyMap()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.jpaHint).isEqualTo( - JpaReactiveQueryHintClauseImpl>(emptyMap()) - ) - } - - @Test - fun hintsVararg() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints("hint1" to true, "hint2" to "comment") - } - - // then - val hintClause = JpaReactiveQueryHintClauseImpl>( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.jpaHint).isEqualTo( - hintClause - ) - } - - @Test - fun hintsMap() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - hints(mapOf("hint1" to true, "hint2" to "comment")) - } - - // then - val hintClause = JpaReactiveQueryHintClauseImpl>( - mapOf( - "hint1" to true, - "hint2" to "comment" - ) - ) - - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.jpaHint).isEqualTo( - hintClause - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.jpaHint).isEqualTo( - hintClause - ) - } - - class Data1 -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/limit/SpringDataReactiveQueryDslImplLimitTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/limit/SpringDataReactiveQueryDslImplLimitTest.kt deleted file mode 100644 index c6c7a03f8..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/limit/SpringDataReactiveQueryDslImplLimitTest.kt +++ /dev/null @@ -1,190 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.limit - -import com.linecorp.kotlinjdsl.query.clause.limit.ReactiveLimitClause -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.limit.SpringDataReactivePageableLimitClause -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable -import javax.persistence.Query - -internal class SpringDataReactiveQueryDslImplLimitTest : WithKotlinJdslAssertions { - @Test - fun noLimit() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = null, maxResults = null) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataReactivePageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - } - - @Test - fun offset() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - offset(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = 10, maxResults = null) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataReactivePageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - } - - @Test - fun maxResults() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - maxResults(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = null, maxResults = 10) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataReactivePageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - } - - @Test - fun limitMaxResults() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = null, maxResults = 10) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataReactivePageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - } - - @Test - fun limitOffsetAndMaxResults() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - limit(1, 10) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause(offset = 1, maxResults = 10) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataReactivePageableLimitClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - } - - @Test - fun pageable() { - // given - val pageable = PageRequest.of(1, 10) - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - this.pageable = pageable - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.limit).isEqualTo( - SpringDataReactivePageableLimitClause(pageable) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.limit).isEqualTo( - ReactiveLimitClause.empty - ) - } - - class Data1 -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/orderby/SpringDataReactiveQueryDslImplOrderByWhereTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/orderby/SpringDataReactiveQueryDslImplOrderByWhereTest.kt deleted file mode 100644 index f92f164d2..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/orderby/SpringDataReactiveQueryDslImplOrderByWhereTest.kt +++ /dev/null @@ -1,169 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.orderby - -import com.linecorp.kotlinjdsl.query.clause.orderby.OrderByClause -import com.linecorp.kotlinjdsl.query.spec.ExpressionOrderSpec -import com.linecorp.kotlinjdsl.query.spec.OrderSpec -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.spring.reactive.query.clause.orderby.SpringDataReactivePageableOrderByClause -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test -import org.springframework.data.domain.PageRequest -import org.springframework.data.domain.Pageable - -internal class SpringDataReactiveQueryDslImplOrderByWhereTest : WithKotlinJdslAssertions { - @Test - fun noOrderBy() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataReactivePageableOrderByClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun orderByVararg() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(orderSpec1, orderSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataReactivePageableOrderByClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun orderByList() { - // given - val orderSpec1: OrderSpec = mockk() - val orderSpec2: OrderSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - orderBy(listOf(orderSpec1, orderSpec2)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(listOf(orderSpec1, orderSpec2)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataReactivePageableOrderByClause(Pageable.unpaged()) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun pageable() { - // given - val pageable = PageRequest.of(10, 10) - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - this.pageable = pageable - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.orderBy).isEqualTo( - SpringDataReactivePageableOrderByClause(pageable) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.orderBy).isEqualTo( - OrderByClause(emptyList()) - ) - } - - @Test - fun asc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.asc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, true)) - } - - @Test - fun desc() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: OrderSpec - - SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - actual = expressionSpec.desc() - } - - assertThat(actual).isEqualTo(ExpressionOrderSpec(expressionSpec, false)) - } - - class Data1 -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/predicate/SpringDataReactiveQueryDslImplPredicateTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/predicate/SpringDataReactiveQueryDslImplPredicateTest.kt deleted file mode 100644 index c2f48fa20..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/predicate/SpringDataReactiveQueryDslImplPredicateTest.kt +++ /dev/null @@ -1,567 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.predicate - -import com.linecorp.kotlinjdsl.query.spec.expression.ExpressionSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.* -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test -import org.springframework.data.domain.Range - -internal class SpringDataReactiveQueryDslImplPredicateTest : WithKotlinJdslAssertions { - @Test - fun not() { - val predicateSpec: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = not(predicateSpec) - } - - assertThat(actual).isEqualTo(NotSpec(predicateSpec)) - } - - @Test - fun andVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = and(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun andList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = and(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(AndSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orVararg() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = or(predicateSpec1, predicateSpec2) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun orList() { - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = or(listOf(predicateSpec1, predicateSpec2)) - } - - assertThat(actual).isEqualTo(OrSpec(listOf(predicateSpec1, predicateSpec2))) - } - - @Test - fun equalValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.equal(value) - } - - assertThat(actual).isEqualTo(EqualValueSpec(expressionSpec, value)) - } - - @Test - fun equalExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.equal(expressionSpec2) - } - - assertThat(actual).isEqualTo(EqualExpressionSpec(expressionSpec1, expressionSpec2)) - } - - @Test - fun notEqualValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.notEqual(value) - } - - assertThat(actual).isEqualTo(NotSpec(EqualValueSpec(expressionSpec, value))) - } - - @Test - fun notEqualExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.notEqual(expressionSpec2) - } - - assertThat(actual).isEqualTo(NotSpec(EqualExpressionSpec(expressionSpec1, expressionSpec2))) - } - - @Test - fun inValueVararg() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(value1, value2) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inValueList() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.`in`(listOf(value1, value2)) - } - - assertThat(actual).isEqualTo(InValueSpec(expressionSpec, listOf(value1, value2))) - } - - @Test - fun inExpressionVararg() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun inExpressionList() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.`in`(listOf(expressionSpec2, expressionSpec3)) - } - - assertThat(actual).isEqualTo(InExpressionSpec(expressionSpec1, listOf(expressionSpec2, expressionSpec3))) - } - - @Test - fun greaterThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun greaterThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun greaterThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun greaterThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun greaterThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.greaterThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(GreaterThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun greaterThanBound() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.inclusive("test") - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(bound) - } - - assertThat(actual).isEqualTo(GreaterThanValueSpec(expressionSpec, "test", true)) - } - - @Test - fun greaterThanBoundEmpty() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.unbounded() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(bound) - } - - assertThat(actual).isEqualTo(PredicateSpec.empty) - } - - @Test - fun lessThanOrEqualToValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThanOrEqualTo(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, false)) - } - - @Test - fun lessThanInclusiveValue() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test1" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(value, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, value, true)) - } - - @Test - fun lessThanOrEqualToExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThanOrEqualTo(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, false)) - } - - @Test - fun lessThanInclusiveExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.lessThan(expressionSpec2, inclusive = true) - } - - assertThat(actual).isEqualTo(LessThanExpressionSpec(expressionSpec1, expressionSpec2, true)) - } - - @Test - fun lessThanBound() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.inclusive("test") - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.lessThan(bound) - } - - assertThat(actual).isEqualTo(LessThanValueSpec(expressionSpec, "test", true)) - } - - @Test - fun lessThanBoundEmpty() { - val expressionSpec: ExpressionSpec = mockk() - val bound = Range.Bound.unbounded() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.greaterThan(bound) - } - - assertThat(actual).isEqualTo(PredicateSpec.empty) - } - - @Test - fun betweenValue() { - val expressionSpec: ExpressionSpec = mockk() - val value1 = "test1" - val value2 = "test2" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(value1, value2) - } - - assertThat(actual).isEqualTo(BetweenValueSpec(expressionSpec, value1, value2)) - } - - @Test - fun betweenExpression() { - val expressionSpec1: ExpressionSpec = mockk() - val expressionSpec2: ExpressionSpec = mockk() - val expressionSpec3: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec1.between(expressionSpec2, expressionSpec3) - } - - assertThat(actual).isEqualTo(BetweenExpressionSpec(expressionSpec1, expressionSpec2, expressionSpec3)) - } - - @Test - fun betweenRange() { - val expressionSpec: ExpressionSpec = mockk() - val range = Range.leftOpen("test1", "test2") - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(range) - } - - assertThat(actual).isEqualTo( - AndSpec( - listOf( - GreaterThanValueSpec(expressionSpec, "test1", false), - LessThanValueSpec(expressionSpec, "test2", true) - ) - ) - ) - } - - @Test - fun betweenRangeEmpty() { - val expressionSpec: ExpressionSpec = mockk() - val range = Range.unbounded() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.between(range) - } - - assertThat(actual).isEqualTo( - AndSpec(listOf(PredicateSpec.empty, PredicateSpec.empty)) - ) - } - - @Test - fun isTrue() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isTrue() - } - - assertThat(actual).isEqualTo(IsTrueSpec(expressionSpec)) - } - - @Test - fun isFalse() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isFalse() - } - - assertThat(actual).isEqualTo(IsFalseSpec(expressionSpec)) - } - - @Test - fun isNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNull() - } - - assertThat(actual).isEqualTo(IsNullSpec(expressionSpec)) - } - - @Test - fun isNotNull() { - val expressionSpec: ExpressionSpec = mockk() - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.isNotNull() - } - - assertThat(actual).isEqualTo(NotSpec(IsNullSpec(expressionSpec))) - } - - @Test - fun like() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.like(value) - } - - assertThat(actual).isEqualTo(LikeSpec(expressionSpec, value)) - } - - @Test - fun notLike() { - val expressionSpec: ExpressionSpec = mockk() - val value = "test" - - val actual: PredicateSpec - - SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - actual = expressionSpec.notLike(value) - } - - assertThat(actual).isEqualTo(NotSpec(LikeSpec(expressionSpec, value))) - } -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/select/SpringDataReactiveQueryDslImplMultiSelectTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/select/SpringDataReactiveQueryDslImplMultiSelectTest.kt deleted file mode 100644 index d7ea982c6..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/select/SpringDataReactiveQueryDslImplMultiSelectTest.kt +++ /dev/null @@ -1,454 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.CountMultiSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.MultiSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplMultiSelectTest : WithKotlinJdslAssertions { - @Test - fun select() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - select(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectNonDistinct() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - select(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectDistinct() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - selectDistinct(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMulti() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - selectMulti(distinct = true, listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiNonDistinctVararg() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - selectMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiNonDistinctList() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - selectMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = false, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiDistinctVararg() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - selectDistinctMulti(column(Data1::id), column(Data1::name)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - @Test - fun selectMultiDistinctList() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Row::class.java).apply { - selectDistinctMulti(listOf(column(Data1::id), column(Data1::name))) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val exception = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception).hasMessageContaining("There is no select clause in query") - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - MultiSelectClause( - returnType = Row::class.java, - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountMultiSelectClause( - distinct = true, - expressions = listOf( - ColumnSpec(EntitySpec(Data1::class.java), "id"), - ColumnSpec(EntitySpec(Data1::class.java), "name"), - ) - ) - ) - } - - data class Row( - val id: String, - val name: String, - ) - - class Data1 { - val id: String = "test" - val name: String = "test_name" - } -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/select/SpringDataReactiveQueryDslImplSingleSelectTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/select/SpringDataReactiveQueryDslImplSingleSelectTest.kt deleted file mode 100644 index 401043980..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/select/SpringDataReactiveQueryDslImplSingleSelectTest.kt +++ /dev/null @@ -1,284 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.select - -import com.linecorp.kotlinjdsl.query.clause.select.CountSingleSelectClause -import com.linecorp.kotlinjdsl.query.clause.select.SingleSelectClause -import com.linecorp.kotlinjdsl.query.spec.expression.ColumnSpec -import com.linecorp.kotlinjdsl.query.spec.expression.CountSpec -import com.linecorp.kotlinjdsl.query.spec.expression.EntitySpec -import com.linecorp.kotlinjdsl.querydsl.expression.column -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplSingleSelectTest : WithKotlinJdslAssertions { - @Test - fun noSelect() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - from(entity(Data1::class)) - } - - // then - val exception1 = catchThrowable(IllegalStateException::class) { - actual.createCriteriaQuerySpec() - } - - assertThat(exception1).hasMessageContaining("There is no select clause in query") - - val exception2 = catchThrowable(IllegalStateException::class) { - actual.createSubquerySpec() - } - - assertThat(exception2).hasMessageContaining("There is no select clause in query") - - val exception3 = catchThrowable(IllegalStateException::class) { - actual.createPageableQuerySpec() - } - - assertThat(exception3).hasMessageContaining("There is no select clause in query") - - val exception4 = catchThrowable(IllegalStateException::class) { - actual.createPageableCountQuerySpec() - } - - assertThat(exception4).hasMessageContaining("There is no select clause in query") - } - - @Test - fun selectEntity() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectExpression() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - select(distinct = true, column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectNonDistinctEntity() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = false, EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = false, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectNonDistinctExpression() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - select(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = false, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun selectDistinctEntity() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - selectDistinct(Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(Data1::class.java, distinct = true, EntitySpec(Data1::class.java)) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, EntitySpec(Data1::class.java)) - ) - } - - @Test - fun selectDistinctExpression() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - selectDistinct(column(Data1::id)) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.select).isEqualTo( - SingleSelectClause(String::class.java, distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.select).isEqualTo( - CountSingleSelectClause(distinct = true, ColumnSpec(EntitySpec(Data1::class.java), "id")) - ) - } - - @Test - fun `inject countSelectClause`() { - val countSelectClause: SingleSelectClause - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(String::class.java).apply { - selectDistinct(column(Data1::id)) - from(entity(Data1::class)) - } - - SpringDataReactiveReactiveQueryDslImpl(Long::class.java).apply { - countSelectClause = select(count(column(Data1::name))) - } - - // then - val pageableCountQuerySpec = actual.createPageableCountQuerySpec(countSelectClause) - - assertThat(pageableCountQuerySpec.select).isEqualTo( - SingleSelectClause( - returnType = Long::class.java, - distinct = false, - expression = CountSpec( - distinct = false, - expression = ColumnSpec(EntitySpec(Data1::class.java), "name") - ) - ) - ) - } - - class Data1 { - val id: String = "test" - val name: String = "name" - } -} diff --git a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/where/SpringDataReactiveQueryDslImplWhereTest.kt b/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/where/SpringDataReactiveQueryDslImplWhereTest.kt deleted file mode 100644 index 83c2cce17..000000000 --- a/spring/data-reactive-core/src/test/kotlin/com/linecorp/kotlinjdsl/spring/data/reactive/querydsl/where/SpringDataReactiveQueryDslImplWhereTest.kt +++ /dev/null @@ -1,125 +0,0 @@ -package com.linecorp.kotlinjdsl.spring.data.reactive.querydsl.where - -import com.linecorp.kotlinjdsl.query.clause.where.WhereClause -import com.linecorp.kotlinjdsl.query.spec.predicate.AndSpec -import com.linecorp.kotlinjdsl.query.spec.predicate.PredicateSpec -import com.linecorp.kotlinjdsl.spring.reactive.querydsl.SpringDataReactiveReactiveQueryDslImpl -import com.linecorp.kotlinjdsl.test.WithKotlinJdslAssertions -import io.mockk.mockk -import org.junit.jupiter.api.Test - -internal class SpringDataReactiveQueryDslImplWhereTest : WithKotlinJdslAssertions { - @Test - fun noWhere() { - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(PredicateSpec.empty) - ) - } - - @Test - fun where() { - // given - val predicateSpec: PredicateSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(predicateSpec) - ) - } - - @Test - fun wheres() { - // given - val predicateSpec1: PredicateSpec = mockk() - val predicateSpec2: PredicateSpec = mockk() - - // when - val actual = SpringDataReactiveReactiveQueryDslImpl(Data1::class.java).apply { - select(distinct = true, Data1::class.java) - from(entity(Data1::class)) - where(predicateSpec1) - where(predicateSpec2) - } - - // then - val criteriaQuerySpec = actual.createCriteriaQuerySpec() - - assertThat(criteriaQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val subquerySpec = actual.createSubquerySpec() - - assertThat(subquerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val pageableQuerySpec = actual.createPageableQuerySpec() - - assertThat(pageableQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - - val pageableCountQuerySpec = actual.createPageableCountQuerySpec() - - assertThat(pageableCountQuerySpec.where).isEqualTo( - WhereClause(AndSpec(listOf(predicateSpec1, predicateSpec2))) - ) - } - - class Data1 -} diff --git a/spring/data-starter-jakarta/build.gradle.kts b/spring/data-starter-jakarta/build.gradle.kts deleted file mode 100644 index d73ea0a58..000000000 --- a/spring/data-starter-jakarta/build.gradle.kts +++ /dev/null @@ -1,12 +0,0 @@ -apply() - -dependencies { - api(Modules.hibernateJakarta) - api(Modules.springDataCoreJakarta) - api(Modules.springDataAutoconfigureJakarta) - api(libs.spring.boot3.starter) -} - -coverage { - exclude(project) -} diff --git a/spring/data-starter/build.gradle.kts b/spring/data-starter/build.gradle.kts deleted file mode 100644 index 76a7dd8f1..000000000 --- a/spring/data-starter/build.gradle.kts +++ /dev/null @@ -1,8 +0,0 @@ -apply() - -dependencies { - api(Modules.hibernate) - api(Modules.springDataCore) - api(Modules.springDataAutoconfigure) - api(libs.spring.boot.starter) -} diff --git a/test-fixture/core/build.gradle.kts b/test-fixture/core/build.gradle.kts deleted file mode 100644 index bf4f2a8cc..000000000 --- a/test-fixture/core/build.gradle.kts +++ /dev/null @@ -1,10 +0,0 @@ -coverage { - exclude(project) -} - -dependencies { - api(libs.junit) - api(libs.mockk) - api(libs.assertJ) - api(libs.logback) -} diff --git a/test-fixture/core/src/main/kotlin/com/linecorp/kotlinjdsl/test/WithKotlinJdslAssertions.kt b/test-fixture/core/src/main/kotlin/com/linecorp/kotlinjdsl/test/WithKotlinJdslAssertions.kt deleted file mode 100644 index fc7cb195d..000000000 --- a/test-fixture/core/src/main/kotlin/com/linecorp/kotlinjdsl/test/WithKotlinJdslAssertions.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.linecorp.kotlinjdsl.test - -import com.linecorp.kotlinjdsl.test.time.Time -import org.assertj.core.api.ThrowableAssert -import org.assertj.core.api.WithAssertions -import kotlin.reflect.KClass - -interface WithKotlinJdslAssertions: WithAssertions { - fun assertTrue(condition: () -> Boolean) { - assertThat(condition()).isTrue - } - - fun assertFalse(condition: () -> Boolean) { - assertThat(condition()).isFalse - } - - fun catchThrowable(type: KClass, executable: () -> Unit): T? { - val throwable = ThrowableAssert.ThrowingCallable { - executable() - } - - return catchThrowableOfType(throwable, type.java) - } - - fun withMockTime(mockTime: Time, executable: () -> T): T { - Time.startMocking(mockTime) - - val result: T = executable() - - Time.finishMocking() - - return result - } -} \ No newline at end of file diff --git a/test-fixture/core/src/main/kotlin/com/linecorp/kotlinjdsl/test/time/Time.kt b/test-fixture/core/src/main/kotlin/com/linecorp/kotlinjdsl/test/time/Time.kt deleted file mode 100644 index 792e64eb2..000000000 --- a/test-fixture/core/src/main/kotlin/com/linecorp/kotlinjdsl/test/time/Time.kt +++ /dev/null @@ -1,186 +0,0 @@ -package com.linecorp.kotlinjdsl.test.time - -import java.sql.Timestamp -import java.time.* -import java.time.format.DateTimeFormatter -import java.time.format.DateTimeFormatterBuilder -import java.time.temporal.ChronoField -import java.time.temporal.ChronoUnit -import java.time.temporal.TemporalUnit -import java.util.* - -class Time internal constructor( - private var time: ZonedDateTime -) : Comparable