Skip to content

Commit 3323e53

Browse files
authored
Support subQuery in for KEntityql and KNativeSql (#1068)
1 parent e492cb0 commit 3323e53

File tree

4 files changed

+45
-0
lines changed

4 files changed

+45
-0
lines changed

doma-kotlin/src/main/kotlin/org/seasar/doma/kotlin/jdbc/criteria/KEntityql.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import org.seasar.doma.kotlin.jdbc.criteria.statement.KEntityqlDeleteStatement
1515
import org.seasar.doma.kotlin.jdbc.criteria.statement.KEntityqlInsertStatement
1616
import org.seasar.doma.kotlin.jdbc.criteria.statement.KEntityqlSelectStarting
1717
import org.seasar.doma.kotlin.jdbc.criteria.statement.KEntityqlUpdateStatement
18+
import org.seasar.doma.kotlin.jdbc.criteria.statement.KSetOperand
1819
import org.seasar.doma.kotlin.jdbc.criteria.statement.KStatement
1920

2021
class KEntityql(config: Config) {
@@ -29,6 +30,15 @@ class KEntityql(config: Config) {
2930
return KEntityqlSelectStarting(statement)
3031
}
3132

33+
fun <ENTITY> from(
34+
entityMetamodel: EntityMetamodel<ENTITY>,
35+
setOperandForSubQuery: KSetOperand<*>,
36+
block: SelectSettings.() -> Unit = {},
37+
): KEntityqlSelectStarting<ENTITY> {
38+
val statement = entityql.from(entityMetamodel, setOperandForSubQuery.asSetOperand(), block)
39+
return KEntityqlSelectStarting(statement)
40+
}
41+
3242
fun <ENTITY> update(
3343
entityMetamodel: EntityMetamodel<ENTITY>,
3444
entity: ENTITY,

doma-kotlin/src/main/kotlin/org/seasar/doma/kotlin/jdbc/criteria/KNativeSql.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import org.seasar.doma.kotlin.jdbc.criteria.statement.KNativeSqlDeleteStarting
1010
import org.seasar.doma.kotlin.jdbc.criteria.statement.KNativeSqlInsertStarting
1111
import org.seasar.doma.kotlin.jdbc.criteria.statement.KNativeSqlSelectStarting
1212
import org.seasar.doma.kotlin.jdbc.criteria.statement.KNativeSqlUpdateStarting
13+
import org.seasar.doma.kotlin.jdbc.criteria.statement.KSetOperand
1314

1415
class KNativeSql(config: Config?) {
1516

@@ -23,6 +24,15 @@ class KNativeSql(config: Config?) {
2324
return KNativeSqlSelectStarting(statement)
2425
}
2526

27+
fun <ENTITY> from(
28+
entityMetamodel: EntityMetamodel<ENTITY>,
29+
setOperandForSubQuery: KSetOperand<*>,
30+
block: SelectSettings.() -> Unit = {},
31+
): KNativeSqlSelectStarting<ENTITY> {
32+
val statement = nativeSql.from(entityMetamodel, setOperandForSubQuery.asSetOperand(), block)
33+
return KNativeSqlSelectStarting(statement)
34+
}
35+
2636
fun <ENTITY> update(
2737
entityMetamodel: EntityMetamodel<ENTITY>,
2838
block: UpdateSettings.() -> Unit = {},

doma-kotlin/src/test/kotlin/org/seasar/doma/jdbc/criteria/KEntityqlSelectTest.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import org.seasar.doma.message.Message
1515
internal class KEntityqlSelectTest {
1616

1717
private val entityql = org.seasar.doma.kotlin.jdbc.criteria.KEntityql(MockConfig())
18+
private val nativeSql = org.seasar.doma.kotlin.jdbc.criteria.KNativeSql(MockConfig())
1819

1920
@Test
2021
fun from() {
@@ -27,6 +28,18 @@ internal class KEntityqlSelectTest {
2728
)
2829
}
2930

31+
@Test
32+
fun from_with_subQuery() {
33+
val e = Emp_()
34+
val subQueryStmt = nativeSql.from(e)
35+
val stmt = entityql.from(e, subQueryStmt)
36+
val sql = stmt.asSql()
37+
assertEquals(
38+
"select t0_.ID, t0_.NAME, t0_.SALARY, t0_.VERSION from (select t0_.ID AS ID, t0_.NAME AS NAME, t0_.SALARY AS SALARY, t0_.VERSION AS VERSION from EMP t0_) t0_",
39+
sql.formattedSql,
40+
)
41+
}
42+
3043
@Test
3144
fun innerJoin() {
3245
val e = Emp_()

doma-kotlin/src/test/kotlin/org/seasar/doma/jdbc/criteria/KNativeSqlSelectTest.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,18 @@ internal class KNativeSqlSelectTest {
5454
)
5555
}
5656

57+
@Test
58+
fun from_with_subQuery() {
59+
val e = Emp_()
60+
val subQueryStmt = nativeSql.from(e)
61+
val stmt = nativeSql.from(e, subQueryStmt)
62+
val sql = stmt.asSql()
63+
assertEquals(
64+
"select t0_.ID, t0_.NAME, t0_.SALARY, t0_.VERSION from (select t0_.ID AS ID, t0_.NAME AS NAME, t0_.SALARY AS SALARY, t0_.VERSION AS VERSION from EMP t0_) t0_",
65+
sql.formattedSql,
66+
)
67+
}
68+
5769
@Test
5870
fun where_eq() {
5971
val e = Emp_()

0 commit comments

Comments
 (0)