@@ -23,13 +23,13 @@ import org.assertj.core.api.Assertions.assertThat
2323import org.junit.jupiter.api.Test
2424import org.mybatis.dynamic.sql.SqlTable
2525import org.mybatis.dynamic.sql.util.kotlin.elements.column
26- import org.mybatis.dynamic.sql.util.kotlin.elements.exists
27- import org.mybatis.dynamic.sql.util.kotlin.elements.group
26+ import org.mybatis.dynamic.sql.util.kotlin.elements.isBetween
2827import org.mybatis.dynamic.sql.util.kotlin.elements.isEqualTo
2928import org.mybatis.dynamic.sql.util.kotlin.elements.isGreaterThan
3029import org.mybatis.dynamic.sql.util.kotlin.elements.isGreaterThanOrEqualTo
3130import org.mybatis.dynamic.sql.util.kotlin.elements.isLessThan
32- import org.mybatis.dynamic.sql.util.kotlin.elements.not
31+ import org.mybatis.dynamic.sql.util.kotlin.elements.isLessThanOrEqualTo
32+ import org.mybatis.dynamic.sql.util.kotlin.elements.isLike
3333import org.mybatis.dynamic.sql.util.kotlin.mybatis3.select
3434
3535object FooDynamicSqlSupport {
@@ -50,35 +50,45 @@ class KGroupingTest {
5050 fun testSimpleGrouping () {
5151 val selectStatement = select(A , B , C ) {
5252 from(foo)
53- where (A , isEqualTo(1 )) {
54- or (A , isEqualTo(2 ))
53+ where {
54+ A (isBetween(1 ).and (5 ).map { it + 3 }.filter{ _ -> true })
55+ or { A (isLessThanOrEqualTo(3 ).map { it + 6 }.filter { true }) }
56+ or { A (isEqualTo(9 )) }
57+ or { C (isLike(" Fred%" )) }
5558 }
56- and ( B , isEqualTo(3 ))
59+ and { B ( isEqualTo(3 )) }
5760 }
5861
5962 val expected = " select A, B, C" +
6063 " from Foo" +
61- " where (A = #{parameters.p1} or A = #{parameters.p2}) and B = #{parameters.p3}"
64+ " where (A between #{parameters.p1} and #{parameters.p2} or A <= #{parameters.p3} or" +
65+ " A = #{parameters.p4} or C like #{parameters.p5}) and B = #{parameters.p6}"
6266
6367 assertThat(selectStatement.selectStatement).isEqualTo(expected)
64- assertThat(selectStatement.parameters).containsEntry(" p1" , 1 )
65- assertThat(selectStatement.parameters).containsEntry(" p2" , 2 )
66- assertThat(selectStatement.parameters).containsEntry(" p3" , 3 )
68+ assertThat(selectStatement.parameters).containsEntry(" p1" , 4 )
69+ assertThat(selectStatement.parameters).containsEntry(" p2" , 8 )
70+ assertThat(selectStatement.parameters).containsEntry(" p3" , 9 )
71+ assertThat(selectStatement.parameters).containsEntry(" p4" , 9 )
72+ assertThat(selectStatement.parameters).containsEntry(" p5" , " Fred%" )
73+ assertThat(selectStatement.parameters).containsEntry(" p6" , 3 )
6774 }
6875
6976 @Test
7077 fun testComplexGrouping () {
7178 val selectStatement = select(A , B , C ) {
7279 from(foo)
73- where(group(A , isEqualTo(1 )) {
74- or (A , isGreaterThan(5 ))
75- }) {
76- and (B , isEqualTo(1 ))
77- or (A , isLessThan(0 )) {
78- and (B , isEqualTo(2 ))
80+ where {
81+ group {
82+ A (isEqualTo(1 ))
83+ or { A (isGreaterThan(5 )) }
84+ }
85+ and { B (isEqualTo(1 )) }
86+ or {
87+ A (isLessThan(0 ))
88+ and { B (isEqualTo(2 )) }
7989 }
8090 }
81- and ( C , isEqualTo(" Fred" ))
91+ and { C ( isEqualTo(" Fred" )) }
8292 }
8393
8494 val expected = " select A, B, C" +
@@ -99,21 +109,24 @@ class KGroupingTest {
99109 fun testGroupAndExists () {
100110 val selectStatement = select(A , B , C ) {
101111 from(foo)
102- where(group(exists {
103- select(foo.allColumns()) {
104- from (foo)
105- where(A , isEqualTo(3 ))
112+ where {
113+ group {
114+ exists {
115+ select(foo.allColumns()) {
116+ from(foo)
117+ where { A (isEqualTo(3 )) }
118+ }
119+ }
120+ and { A (isEqualTo(1 )) }
121+ or { A (isGreaterThan(5 )) }
106122 }
107- }) {
108- and (A , isEqualTo((1 )))
109- or (A , isGreaterThan(5 ))
110- }) {
111- and (B , isEqualTo(1 ))
112- or (A , isLessThan(0 )) {
113- and (B , isEqualTo(2 ))
123+ and { B (isEqualTo(1 )) }
124+ or {
125+ A (isLessThan(0 ))
126+ and { B (isEqualTo(2 )) }
114127 }
115128 }
116- and ( C , isEqualTo(" Fred" ))
129+ and { C ( isEqualTo(" Fred" )) }
117130 }
118131
119132 val expected = " select A, B, C" +
@@ -136,27 +149,33 @@ class KGroupingTest {
136149 fun testNestedGrouping () {
137150 val selectStatement = select(A , B , C ) {
138151 from(foo)
139- where(
140- group(group(A , isEqualTo(1 )) {
141- or (A , isGreaterThan(5 ))
142- }) {
143- and (A , isGreaterThan(5 ))
152+ where {
153+ group {
154+ group {
155+ A (isEqualTo(1 ))
156+ or { A (isGreaterThan(5 )) }
157+ }
158+ and { A (isGreaterThan(5 )) }
144159 }
145- ) {
146- and (group(A , isEqualTo(1 )) {
147- or (A , isGreaterThan(5 ))
148- }) {
149- or (B , isEqualTo(1 ))
160+ and {
161+ group {
162+ A (isEqualTo(1 ))
163+ or { A (isGreaterThan(5 )) }
164+ }
165+ or { B (isEqualTo(1 )) }
150166 }
151- or (group(A , isEqualTo(1 )) {
152- or (A , isGreaterThan(5 ))
153- }) {
154- and (A , isLessThan(0 )) {
155- and (B , isEqualTo(2 ))
167+ or {
168+ group {
169+ A (isEqualTo(1 ))
170+ or { A (isGreaterThan(5 )) }
171+ }
172+ and {
173+ A (isLessThan(0 ))
174+ and { B (isEqualTo(2 )) }
156175 }
157176 }
158177 }
159- and ( C , isEqualTo(" Fred" ))
178+ and { C ( isEqualTo(" Fred" )) }
160179 }
161180
162181 val expected = " select A, B, C" +
@@ -184,18 +203,23 @@ class KGroupingTest {
184203 fun testAndOrCriteriaGroups () {
185204 val selectStatement = select(A , B , C ) {
186205 from(foo)
187- where(A , isEqualTo(6 ))
188- and (C , isEqualTo(" Fred" ))
189- and (group(A , isEqualTo(1 )) {
190- or (A , isGreaterThan(5 ))
191- }) {
192- or (B , isEqualTo(1 ))
206+ where { A (isEqualTo(6 )) }
207+ and { C (isEqualTo(" Fred" )) }
208+ and {
209+ group {
210+ A (isEqualTo(1 ))
211+ or { A (isGreaterThan(5 )) }
212+ }
213+ or { B (isEqualTo(1 )) }
193214 }
194- or (group(A , isEqualTo(1 )) {
195- or (A , isGreaterThan(5 ))
196- }) {
197- and (A , isLessThan(0 )) {
198- and (B , isEqualTo(2 ))
215+ or {
216+ group {
217+ A (isEqualTo(1 ))
218+ or { A (isGreaterThan(5 )) }
219+ }
220+ and {
221+ A (isLessThan(0 ))
222+ and { B (isEqualTo(2 )) }
199223 }
200224 }
201225 }
@@ -224,19 +248,24 @@ class KGroupingTest {
224248 fun testNotGroupAndOrCriteriaGroups () {
225249 val selectStatement = select(A , B , C ) {
226250 from(foo)
227- where(not (group(B , isEqualTo(4 )) {
228- and (A , isLessThan(5 ))
229- }) {
230- and (A , isGreaterThan(3 ))
231- })
232- and (not (A , isGreaterThan(4 )))
233- or (
234- not (
235- group(B , isLessThan(6 )) {
236- and (A , isGreaterThanOrEqualTo(7 ))
251+ where {
252+ not {
253+ group {
254+ B (isEqualTo(4 ))
255+ and { A (isLessThan(5 )) }
237256 }
238- )
239- )
257+ and { A (isGreaterThan(3 )) }
258+ }
259+ }
260+ and { not { A (isGreaterThan(4 )) } }
261+ or {
262+ not {
263+ group {
264+ B (isLessThan(6 ))
265+ and { A (isGreaterThanOrEqualTo(7 )) }
266+ }
267+ }
268+ }
240269 }
241270
242271 val expected = " select A, B, C" +
0 commit comments