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