|
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