Skip to content

Commit d8b0071

Browse files
committed
Check for invalid missing "then" in case expressions
1 parent 11ef9e5 commit d8b0071

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/elements/CaseDSLs.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.mybatis.dynamic.sql.select.caseexpression.ConditionBasedWhenCondition
2222
import org.mybatis.dynamic.sql.select.caseexpression.SearchedCaseWhenCondition
2323
import org.mybatis.dynamic.sql.select.caseexpression.SimpleCaseWhenCondition
2424
import org.mybatis.dynamic.sql.util.kotlin.GroupingCriteriaCollector
25+
import org.mybatis.dynamic.sql.util.kotlin.assertNotNull
2526
import org.mybatis.dynamic.sql.util.kotlin.assertNull
2627

2728
class KSearchedCaseDSL : KElseDSL {
@@ -34,9 +35,10 @@ class KSearchedCaseDSL : KElseDSL {
3435

3536
fun `when`(dslCompleter: SearchedCaseCriteriaCollector.() -> Unit) =
3637
SearchedCaseCriteriaCollector().apply(dslCompleter).run {
38+
assertNotNull(thenValue, "ERROR.47") //$NON-NLS-1$
3739
whenConditions.add(SearchedCaseWhenCondition.Builder().withInitialCriterion(initialCriterion)
3840
.withSubCriteria(subCriteria)
39-
.withThenValue(thenValue)
41+
.withThenValue(thenValue!!)
4042
.build())
4143
}
4244

src/main/resources/org/mybatis/dynamic/sql/util/messages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,5 @@ ERROR.43=A Kotlin cast expression must have one, and only one, `as` element
6363
ERROR.44={0} conditions must contain at least one value
6464
ERROR.45=You cannot call "on" in a Kotlin join expression more than once
6565
ERROR.46=At least one join criterion must render
66+
ERROR.47=A Kotlin case statement must specify a "then" clause for every "when" clause
6667
INTERNAL.ERROR=Internal Error {0}

src/test/kotlin/examples/kotlin/animal/data/KCaseExpressionTest.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,17 @@ class KCaseExpressionTest {
922922
}.withMessage(Messages.getString("ERROR.41"))
923923
}
924924

925+
@Test
926+
fun testInvalidMissingThen() {
927+
assertThatExceptionOfType(KInvalidSQLException::class.java).isThrownBy {
928+
case {
929+
`when` {
930+
id isEqualTo 22
931+
}
932+
}
933+
}.withMessage(Messages.getString("ERROR.47"))
934+
}
935+
925936
@Test
926937
fun testInvalidSearchedMissingWhen() {
927938
assertThatExceptionOfType(InvalidSqlException::class.java).isThrownBy {

0 commit comments

Comments
 (0)