Skip to content

Commit 1539e78

Browse files
author
Hyunsik Kang
authored
Merge pull request #41 from cj848/feature/support-aggregation-expression
Expression type support for Aggregation Functions
2 parents e5861cd + 65f10d0 commit 1539e78

File tree

21 files changed

+152
-77
lines changed

21 files changed

+152
-77
lines changed

eclipselink/src/test/resources/META-INF/persistence.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<class>com.linecorp.kotlinjdsl.test.entity.delivery.Delivery</class>
1616
<class>com.linecorp.kotlinjdsl.test.entity.delivery.DeliveryItem</class>
1717
<class>com.linecorp.kotlinjdsl.test.entity.delivery.DeliveryAddress</class>
18+
<class>com.linecorp.kotlinjdsl.test.entity.test.TestTable</class>
1819

1920
<properties>
2021
<property name="eclipselink.logging.level" value="FINE" />

hibernate/src/test/resources/META-INF/persistence.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<class>com.linecorp.kotlinjdsl.test.entity.delivery.Delivery</class>
1616
<class>com.linecorp.kotlinjdsl.test.entity.delivery.DeliveryItem</class>
1717
<class>com.linecorp.kotlinjdsl.test.entity.delivery.DeliveryAddress</class>
18+
<class>com.linecorp.kotlinjdsl.test.entity.test.TestTable</class>
1819

1920
<properties>
2021
<property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test;MODE=MYSQL"/>

query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/AvgSpec.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import com.linecorp.kotlinjdsl.query.spec.Froms
44
import javax.persistence.criteria.*
55

66
data class AvgSpec<T : Number?>(
7-
val column: ColumnSpec<T>
7+
val expression: ExpressionSpec<T>
88
) : ExpressionSpec<Double> {
99
override fun toCriteriaExpression(
1010
froms: Froms,
1111
query: AbstractQuery<*>,
1212
criteriaBuilder: CriteriaBuilder
1313
): Expression<Double> {
14-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
14+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
1515

1616
return criteriaBuilder.avg(expression)
1717
}
@@ -21,7 +21,7 @@ data class AvgSpec<T : Number?>(
2121
query: CriteriaUpdate<*>,
2222
criteriaBuilder: CriteriaBuilder
2323
): Expression<Double> {
24-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
24+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
2525

2626
return criteriaBuilder.avg(expression)
2727
}
@@ -31,7 +31,7 @@ data class AvgSpec<T : Number?>(
3131
query: CriteriaDelete<*>,
3232
criteriaBuilder: CriteriaBuilder
3333
): Expression<Double> {
34-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
34+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
3535

3636
return criteriaBuilder.avg(expression)
3737
}

query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/CountSpec.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import javax.persistence.criteria.*
55

66
data class CountSpec<T>(
77
val distinct: Boolean = false,
8-
val column: ColumnSpec<T>,
8+
val expression: ExpressionSpec<T>,
99
) : ExpressionSpec<Long> {
1010
override fun toCriteriaExpression(
1111
froms: Froms,
1212
query: AbstractQuery<*>,
1313
criteriaBuilder: CriteriaBuilder
1414
): Expression<Long> {
15-
val jpaExpression = column.toCriteriaExpression(froms, query, criteriaBuilder)
15+
val jpaExpression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
1616

1717
return toCriteriaExpression(criteriaBuilder, jpaExpression)
1818
}
@@ -22,7 +22,7 @@ data class CountSpec<T>(
2222
query: CriteriaUpdate<*>,
2323
criteriaBuilder: CriteriaBuilder
2424
): Expression<Long> {
25-
val jpaExpression = column.toCriteriaExpression(froms, query, criteriaBuilder)
25+
val jpaExpression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
2626

2727
return toCriteriaExpression(criteriaBuilder, jpaExpression)
2828
}
@@ -32,7 +32,7 @@ data class CountSpec<T>(
3232
query: CriteriaDelete<*>,
3333
criteriaBuilder: CriteriaBuilder
3434
): Expression<Long> {
35-
val jpaExpression = column.toCriteriaExpression(froms, query, criteriaBuilder)
35+
val jpaExpression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
3636

3737
return toCriteriaExpression(criteriaBuilder, jpaExpression)
3838
}

query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/GreatestSpec.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import com.linecorp.kotlinjdsl.query.spec.Froms
44
import javax.persistence.criteria.*
55

66
data class GreatestSpec<T : Comparable<T>?>(
7-
val column: ColumnSpec<T>
7+
val expression: ExpressionSpec<T>
88
) : ExpressionSpec<T> {
99
override fun toCriteriaExpression(
1010
froms: Froms,
1111
query: AbstractQuery<*>,
1212
criteriaBuilder: CriteriaBuilder
1313
): Expression<T> {
14-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
14+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
1515

1616
return criteriaBuilder.greatest(expression)
1717
}
@@ -21,7 +21,7 @@ data class GreatestSpec<T : Comparable<T>?>(
2121
query: CriteriaUpdate<*>,
2222
criteriaBuilder: CriteriaBuilder
2323
): Expression<T> {
24-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
24+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
2525

2626
return criteriaBuilder.greatest(expression)
2727
}
@@ -31,7 +31,7 @@ data class GreatestSpec<T : Comparable<T>?>(
3131
query: CriteriaDelete<*>,
3232
criteriaBuilder: CriteriaBuilder
3333
): Expression<T> {
34-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
34+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
3535

3636
return criteriaBuilder.greatest(expression)
3737
}

query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/LeastSpec.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import com.linecorp.kotlinjdsl.query.spec.Froms
44
import javax.persistence.criteria.*
55

66
data class LeastSpec<T : Comparable<T>?>(
7-
val column: ColumnSpec<T>
7+
val expression: ExpressionSpec<T>
88
) : ExpressionSpec<T> {
99
override fun toCriteriaExpression(
1010
froms: Froms,
1111
query: AbstractQuery<*>,
1212
criteriaBuilder: CriteriaBuilder
1313
): Expression<T> {
14-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
14+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
1515

1616
return criteriaBuilder.least(expression)
1717
}
@@ -21,7 +21,7 @@ data class LeastSpec<T : Comparable<T>?>(
2121
query: CriteriaUpdate<*>,
2222
criteriaBuilder: CriteriaBuilder
2323
): Expression<T> {
24-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
24+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
2525

2626
return criteriaBuilder.least(expression)
2727
}
@@ -31,7 +31,7 @@ data class LeastSpec<T : Comparable<T>?>(
3131
query: CriteriaDelete<*>,
3232
criteriaBuilder: CriteriaBuilder
3333
): Expression<T> {
34-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
34+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
3535

3636
return criteriaBuilder.least(expression)
3737
}

query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MaxSpec.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import com.linecorp.kotlinjdsl.query.spec.Froms
44
import javax.persistence.criteria.*
55

66
data class MaxSpec<T : Number?>(
7-
val column: ColumnSpec<T>
7+
val expression: ExpressionSpec<T>
88
) : ExpressionSpec<T> {
99
override fun toCriteriaExpression(
1010
froms: Froms,
1111
query: AbstractQuery<*>,
1212
criteriaBuilder: CriteriaBuilder
1313
): Expression<T> {
14-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
14+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
1515

1616
return criteriaBuilder.max(expression)
1717
}
@@ -21,7 +21,7 @@ data class MaxSpec<T : Number?>(
2121
query: CriteriaUpdate<*>,
2222
criteriaBuilder: CriteriaBuilder
2323
): Expression<T> {
24-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
24+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
2525

2626
return criteriaBuilder.max(expression)
2727
}
@@ -31,7 +31,7 @@ data class MaxSpec<T : Number?>(
3131
query: CriteriaDelete<*>,
3232
criteriaBuilder: CriteriaBuilder
3333
): Expression<T> {
34-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
34+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
3535

3636
return criteriaBuilder.max(expression)
3737
}

query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/MinSpec.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import com.linecorp.kotlinjdsl.query.spec.Froms
44
import javax.persistence.criteria.*
55

66
data class MinSpec<T : Number?>(
7-
val column: ColumnSpec<T>
7+
val expression: ExpressionSpec<T>
88
) : ExpressionSpec<T> {
99
override fun toCriteriaExpression(
1010
froms: Froms,
1111
query: AbstractQuery<*>,
1212
criteriaBuilder: CriteriaBuilder
1313
): Expression<T> {
14-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
14+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
1515

1616
return criteriaBuilder.min(expression)
1717
}
@@ -21,7 +21,7 @@ data class MinSpec<T : Number?>(
2121
query: CriteriaUpdate<*>,
2222
criteriaBuilder: CriteriaBuilder
2323
): Expression<T> {
24-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
24+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
2525

2626
return criteriaBuilder.min(expression)
2727
}
@@ -31,7 +31,7 @@ data class MinSpec<T : Number?>(
3131
query: CriteriaDelete<*>,
3232
criteriaBuilder: CriteriaBuilder
3333
): Expression<T> {
34-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
34+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
3535

3636
return criteriaBuilder.min(expression)
3737
}

query/src/main/kotlin/com/linecorp/kotlinjdsl/query/spec/expression/SumSpec.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import com.linecorp.kotlinjdsl.query.spec.Froms
44
import javax.persistence.criteria.*
55

66
data class SumSpec<T : Number?>(
7-
val column: ColumnSpec<T>
7+
val expression: ExpressionSpec<T>
88
) : ExpressionSpec<T> {
99
override fun toCriteriaExpression(
1010
froms: Froms,
1111
query: AbstractQuery<*>,
1212
criteriaBuilder: CriteriaBuilder
1313
): Expression<T> {
14-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
14+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
1515

1616
return criteriaBuilder.sum(expression)
1717
}
@@ -21,7 +21,7 @@ data class SumSpec<T : Number?>(
2121
query: CriteriaUpdate<*>,
2222
criteriaBuilder: CriteriaBuilder
2323
): Expression<T> {
24-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
24+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
2525

2626
return criteriaBuilder.sum(expression)
2727
}
@@ -31,7 +31,7 @@ data class SumSpec<T : Number?>(
3131
query: CriteriaDelete<*>,
3232
criteriaBuilder: CriteriaBuilder
3333
): Expression<T> {
34-
val expression = column.toCriteriaExpression(froms, query, criteriaBuilder)
34+
val expression = expression.toCriteriaExpression(froms, query, criteriaBuilder)
3535

3636
return criteriaBuilder.sum(expression)
3737
}

query/src/main/kotlin/com/linecorp/kotlinjdsl/querydsl/expression/ExpressionDsl.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ interface ExpressionDsl {
1616
fun <T, R> col(entity: EntitySpec<T>, property: KProperty1<T, R>) = column(entity, property)
1717
fun <T, R> column(entity: EntitySpec<T>, property: KProperty1<T, R>) = ColumnSpec<R>(entity, property.name)
1818

19-
fun <N : Number?> max(column: ColumnSpec<N>) = MaxSpec(column)
20-
fun <N : Number?> min(column: ColumnSpec<N>) = MinSpec(column)
21-
fun <N : Number?> avg(column: ColumnSpec<N>) = AvgSpec(column)
22-
fun <N : Number?> sum(column: ColumnSpec<N>) = SumSpec(column)
23-
fun count(distinct: Boolean, column: ColumnSpec<*>) = CountSpec(distinct, column)
24-
fun count(column: ColumnSpec<*>) = CountSpec(distinct = false, column)
25-
fun countDistinct(column: ColumnSpec<*>) = CountSpec(distinct = true, column)
26-
fun <R : Comparable<R>?> greatest(column: ColumnSpec<R>) = GreatestSpec(column)
27-
fun <R : Comparable<R>?> least(column: ColumnSpec<R>) = LeastSpec(column)
19+
fun <N : Number?> max(expresssion: ExpressionSpec<N>) = MaxSpec(expresssion)
20+
fun <N : Number?> min(expression: ExpressionSpec<N>) = MinSpec(expression)
21+
fun <N : Number?> avg(expression: ExpressionSpec<N>) = AvgSpec(expression)
22+
fun <N : Number?> sum(expression: ExpressionSpec<N>) = SumSpec(expression)
23+
fun count(distinct: Boolean, expression: ExpressionSpec<*>) = CountSpec(distinct, expression)
24+
fun count(expression: ExpressionSpec<*>) = CountSpec(distinct = false, expression)
25+
fun countDistinct(expression: ExpressionSpec<*>) = CountSpec(distinct = true, expression)
26+
fun <R : Comparable<R>?> greatest(expression: ExpressionSpec<R>) = GreatestSpec(expression)
27+
fun <R : Comparable<R>?> least(expression: ExpressionSpec<R>) = LeastSpec(expression)
2828

2929
fun <T> case(whens: List<CaseSpec.WhenSpec<T>>, `else`: ExpressionSpec<T>) = CaseSpec(whens, `else`)
3030
fun <T> case(vararg whens: CaseSpec.WhenSpec<T>, `else`: ExpressionSpec<T>) = case(whens.toList(), `else`)

0 commit comments

Comments
 (0)