Skip to content

Commit 1d4dbe1

Browse files
committed
Kotlin version of a custom condition
1 parent eeedb40 commit 1d4dbe1

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package examples.kotlin.mybatis3.mariadb
2+
3+
import org.mybatis.dynamic.sql.AbstractSingleValueCondition
4+
import org.mybatis.dynamic.sql.BindableColumn
5+
import org.mybatis.dynamic.sql.render.RenderingContext
6+
import org.mybatis.dynamic.sql.util.FragmentAndParameters
7+
import java.util.function.Predicate
8+
9+
open class KIsLikeEscape<T : Any>(value: T, private val escapeCharacter: Char? = null) : AbstractSingleValueCondition<T>(value) {
10+
11+
override fun operator(): String = "like"
12+
13+
override fun renderCondition(
14+
renderingContext: RenderingContext,
15+
leftColumn: BindableColumn<T>
16+
): FragmentAndParameters {
17+
val f = super.renderCondition(renderingContext, leftColumn)
18+
19+
return escapeCharacter?.let { f.mapFragment{ "$it ESCAPE '$escapeCharacter'"} } ?: f
20+
}
21+
22+
override fun filter(predicate: Predicate<in T>): KIsLikeEscape<T> {
23+
return filterSupport(predicate, ::empty, this)
24+
}
25+
26+
fun <R : Any> map(mapper : (T) -> R): KIsLikeEscape<R> {
27+
return mapSupport(mapper, { r -> KIsLikeEscape(r, escapeCharacter) }, ::empty)
28+
}
29+
30+
private class EmptyCondition : KIsLikeEscape<Any>(-1) {
31+
override fun isEmpty(): Boolean = true
32+
33+
override fun value(): Any {
34+
throw NoSuchElementException("No value present") //$NON-NLS-1$
35+
}
36+
}
37+
38+
companion object {
39+
private val EMPTY: KIsLikeEscape<Any> = EmptyCondition()
40+
41+
@Suppress("UNCHECKED_CAST")
42+
fun <T : Any> empty(): KIsLikeEscape<T> = EMPTY as KIsLikeEscape<T>
43+
}
44+
}

0 commit comments

Comments
 (0)