@@ -26,6 +26,8 @@ import org.mybatis.dynamic.sql.where.AbstractWhereDSL
26
26
@DslMarker
27
27
annotation class MyBatisDslMarker
28
28
29
+ typealias WhereApplier = AbstractWhereDSL <* >.() -> Unit
30
+
29
31
@MyBatisDslMarker
30
32
@Suppress(" TooManyFunctions" )
31
33
abstract class KotlinBaseBuilder <W : AbstractWhereDSL <W >, B : KotlinBaseBuilder <W , B >> {
@@ -34,9 +36,9 @@ abstract class KotlinBaseBuilder<W : AbstractWhereDSL<W>, B : KotlinBaseBuilder<
34
36
getWhere().where(column, condition)
35
37
}
36
38
37
- fun <T > where (column : BindableColumn <T >, condition : VisitableCondition <T >, collect : CriteriaReceiver ): B =
39
+ fun <T > where (column : BindableColumn <T >, condition : VisitableCondition <T >, subCriteria : CriteriaReceiver ): B =
38
40
applySelf {
39
- getWhere().where(column, condition, collect )
41
+ getWhere().where(column, condition, subCriteria( CriteriaCollector ()).criteria )
40
42
}
41
43
42
44
fun applyWhere (whereApplier : WhereApplier ): B =
@@ -49,19 +51,19 @@ abstract class KotlinBaseBuilder<W : AbstractWhereDSL<W>, B : KotlinBaseBuilder<
49
51
getWhere().and (column, condition)
50
52
}
51
53
52
- fun <T > and (column : BindableColumn <T >, condition : VisitableCondition <T >, collect : CriteriaReceiver ): B =
54
+ fun <T > and (column : BindableColumn <T >, condition : VisitableCondition <T >, subCriteria : CriteriaReceiver ): B =
53
55
applySelf {
54
- getWhere().and (column, condition, collect )
56
+ getWhere().and (column, condition, subCriteria( CriteriaCollector ()).criteria )
55
57
}
56
58
57
59
fun <T > or (column : BindableColumn <T >, condition : VisitableCondition <T >): B =
58
60
applySelf {
59
61
getWhere().or (column, condition)
60
62
}
61
63
62
- fun <T > or (column : BindableColumn <T >, condition : VisitableCondition <T >, collect : CriteriaReceiver ): B =
64
+ fun <T > or (column : BindableColumn <T >, condition : VisitableCondition <T >, subCriteria : CriteriaReceiver ): B =
63
65
applySelf {
64
- getWhere().or (column, condition, collect )
66
+ getWhere().or (column, condition, subCriteria( CriteriaCollector ()).criteria )
65
67
}
66
68
67
69
fun allRows () = self()
@@ -77,56 +79,49 @@ abstract class KotlinBaseBuilder<W : AbstractWhereDSL<W>, B : KotlinBaseBuilder<
77
79
abstract class KotlinBaseJoiningBuilder <T : AbstractQueryExpressionDSL <T , SelectModel >, W : AbstractWhereDSL <W >,
78
80
B : KotlinBaseJoiningBuilder <T , W , B >> : KotlinBaseBuilder <W , B >() {
79
81
80
- fun join (table : SqlTable , receiver : JoinReceiver ): B =
81
- applySelf {
82
- getDsl().join(table, receiver)
83
- }
84
-
85
- fun join (table : SqlTable , alias : String , receiver : JoinReceiver ): B =
86
- applySelf {
87
- getDsl().join(table, alias, receiver)
82
+ fun join (table : SqlTable , joinCriteria : JoinReceiver ) =
83
+ applyJoin(joinCriteria) {
84
+ getDsl().join(table, it.onJoinCriterion, it.andJoinCriteria)
88
85
}
89
86
90
- fun join (subQuery : KotlinQualifiedSubQueryBuilder .() -> KotlinQualifiedSubQueryBuilder , joinCriteria : JoinReceiver ): B =
91
- applySelf {
92
- val builder = subQuery(KotlinQualifiedSubQueryBuilder ())
93
- getDsl().join(builder, joinCriteria)
87
+ fun join (table : SqlTable , alias : String , joinCriteria : JoinReceiver ) =
88
+ applyJoin(joinCriteria) {
89
+ getDsl().join(table, alias, it.onJoinCriterion, it.andJoinCriteria)
94
90
}
95
91
96
- fun fullJoin (table : SqlTable , receiver : JoinReceiver ): B =
97
- applySelf {
98
- getDsl().fullJoin(table, receiver )
92
+ fun fullJoin (table : SqlTable , joinCriteria : JoinReceiver ) =
93
+ applyJoin(joinCriteria) {
94
+ getDsl().fullJoin(table, it.onJoinCriterion, it.andJoinCriteria )
99
95
}
100
96
101
- fun fullJoin (table : SqlTable , alias : String , receiver : JoinReceiver ): B =
102
- applySelf {
103
- getDsl().fullJoin(table, alias, receiver )
97
+ fun fullJoin (table : SqlTable , alias : String , joinCriteria : JoinReceiver ) =
98
+ applyJoin(joinCriteria) {
99
+ getDsl().fullJoin(table, alias, it.onJoinCriterion, it.andJoinCriteria )
104
100
}
105
101
106
- fun fullJoin (subQuery : KotlinQualifiedSubQueryBuilder .() -> KotlinQualifiedSubQueryBuilder , receiver : JoinReceiver ): B =
107
- applySelf {
108
- val builder = subQuery(KotlinQualifiedSubQueryBuilder ())
109
- getDsl().fullJoin(builder, receiver)
102
+ fun leftJoin (table : SqlTable , joinCriteria : JoinReceiver ) =
103
+ applyJoin(joinCriteria) {
104
+ getDsl().leftJoin(table, it.onJoinCriterion, it.andJoinCriteria)
110
105
}
111
106
112
- fun leftJoin (table : SqlTable , receiver : JoinReceiver ): B =
113
- applySelf {
114
- getDsl().leftJoin(table, receiver )
107
+ fun leftJoin (table : SqlTable , alias : String , joinCriteria : JoinReceiver ) =
108
+ applyJoin(joinCriteria) {
109
+ getDsl().leftJoin(table, alias, it.onJoinCriterion, it.andJoinCriteria )
115
110
}
116
111
117
- fun leftJoin (table : SqlTable , alias : String , receiver : JoinReceiver ): B =
118
- applySelf {
119
- getDsl().leftJoin (table, alias, receiver )
112
+ fun rightJoin (table : SqlTable , joinCriteria : JoinReceiver ) =
113
+ applyJoin(joinCriteria) {
114
+ getDsl().rightJoin (table, it.onJoinCriterion, it.andJoinCriteria )
120
115
}
121
116
122
- fun rightJoin (table : SqlTable , receiver : JoinReceiver ): B =
123
- applySelf {
124
- getDsl().rightJoin(table, receiver )
117
+ fun rightJoin (table : SqlTable , alias : String , joinCriteria : JoinReceiver ) =
118
+ applyJoin(joinCriteria) {
119
+ getDsl().rightJoin(table, alias, it.onJoinCriterion, it.andJoinCriteria )
125
120
}
126
121
127
- fun rightJoin ( table : SqlTable , alias : String , receiver : JoinReceiver ): B =
122
+ private fun applyJoin ( joinCriteria : JoinReceiver , block : ( JoinCollector ) -> Unit ) =
128
123
applySelf {
129
- getDsl().rightJoin(table, alias, receiver )
124
+ joinCriteria( JoinCollector ()). also (block )
130
125
}
131
126
132
127
protected abstract fun getDsl (): AbstractQueryExpressionDSL <T , SelectModel >
0 commit comments