1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package issues.lhg142;
17
18 import static issues.lhg142.MyMarkDynamicSqlSupport.*;
19 import static org.assertj.core.api.Assertions.assertThat;
20 import static org.mybatis.dynamic.sql.SqlBuilder.*;
21
22 import org.junit.jupiter.api.Test;
23 import org.mybatis.dynamic.sql.render.RenderingStrategies;
24 import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
25
26 class Issue142Test {
27
28 @Test
29 void LimitWithSubqueries() {
30 Page page = new Page(100L, 10L);
31 SelectStatementProvider selectStatement = select(id, updateTime.as("mutime"), createTime.as("mctime")).from(myMark)
32 .where(id, isLessThanOrEqualTo(
33 select(id).from(myMark)
34 .orderBy(updateTime.descending(), createTime.descending())
35 .limit(1L)
36 .offset(page.getOffset())
37 )).orderBy(sortColumn("mutime").descending(), sortColumn("mctime").descending())
38 .limit(page.getSize()).offset(0L).build()
39 .render(RenderingStrategies.MYBATIS3);
40
41 String expected = "select id, update_time as mutime, create_time as mctime from my_mark" +
42 " where id <= (select id from my_mark order by update_time DESC, create_time DESC limit #{parameters.p1} offset #{parameters.p2})" +
43 " order by mutime DESC, mctime DESC limit #{parameters.p3} offset #{parameters.p4}";
44 assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
45 assertThat(selectStatement.getParameters()).containsEntry("p1", 1L);
46 assertThat(selectStatement.getParameters()).containsEntry("p2", 100L);
47 assertThat(selectStatement.getParameters()).containsEntry("p3", 10L);
48 assertThat(selectStatement.getParameters()).containsEntry("p4", 0L);
49 }
50 }