1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql;
17
18 import static examples.complexquery.PersonDynamicSqlSupport.firstName;
19 import static examples.complexquery.PersonDynamicSqlSupport.id;
20 import static examples.complexquery.PersonDynamicSqlSupport.lastName;
21 import static examples.complexquery.PersonDynamicSqlSupport.person;
22 import static org.assertj.core.api.Assertions.assertThat;
23 import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
24 import static org.mybatis.dynamic.sql.SqlBuilder.countFrom;
25 import static org.mybatis.dynamic.sql.SqlBuilder.deleteFrom;
26 import static org.mybatis.dynamic.sql.SqlBuilder.select;
27 import static org.mybatis.dynamic.sql.SqlBuilder.update;
28
29 import org.junit.jupiter.api.Test;
30 import org.mybatis.dynamic.sql.delete.DeleteModel;
31 import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider;
32 import org.mybatis.dynamic.sql.exception.NonRenderingWhereClauseException;
33 import org.mybatis.dynamic.sql.render.RenderingStrategies;
34 import org.mybatis.dynamic.sql.select.SelectModel;
35 import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
36 import org.mybatis.dynamic.sql.update.UpdateModel;
37 import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
38
39 class StatementConfigurationTest {
40 @Test
41 void testCountWhereCalledButNoCriteriaThrowsException() {
42 SelectModel selectModel = countFrom(person)
43 .where()
44 .build();
45
46 assertThatExceptionOfType(NonRenderingWhereClauseException.class).isThrownBy(() ->
47 selectModel.render(RenderingStrategies.MYBATIS3)
48 );
49 }
50
51 @Test
52 void testCountWhereCalledButNoCriteriaRequiresConfiguration() {
53 SelectStatementProvider selectStatement = countFrom(person)
54 .where()
55 .configureStatement(c -> c.setNonRenderingWhereClauseAllowed(true))
56 .build()
57 .render(RenderingStrategies.MYBATIS3);
58
59 assertThat(selectStatement.getSelectStatement()).isEqualTo("select count(*) from Person");
60 }
61
62 @Test
63 void testCountWhereNotCalledIsOK() {
64 SelectStatementProvider selectStatement = countFrom(person)
65 .build()
66 .render(RenderingStrategies.MYBATIS3);
67
68 assertThat(selectStatement.getSelectStatement()).isEqualTo("select count(*) from Person");
69 }
70
71 @Test
72 void testDeleteWhereCalledButNoCriteriaThrowsException() {
73 DeleteModel deleteModel = deleteFrom(person)
74 .where()
75 .build();
76
77 assertThatExceptionOfType(NonRenderingWhereClauseException.class).isThrownBy(() ->
78 deleteModel.render(RenderingStrategies.MYBATIS3)
79 );
80 }
81
82 @Test
83 void testDeleteWhereCalledButNoCriteriaRequiresConfiguration() {
84 DeleteStatementProvider deleteStatement = deleteFrom(person)
85 .where()
86 .configureStatement(c -> c.setNonRenderingWhereClauseAllowed(true))
87 .build()
88 .render(RenderingStrategies.MYBATIS3);
89
90 assertThat(deleteStatement.getDeleteStatement()).isEqualTo("delete from Person");
91 }
92
93 @Test
94 void testDeleteWhereNotCalledIsOK() {
95 DeleteStatementProvider deleteStatement = deleteFrom(person)
96 .build()
97 .render(RenderingStrategies.MYBATIS3);
98
99 assertThat(deleteStatement.getDeleteStatement()).isEqualTo("delete from Person");
100 }
101
102 @Test
103 void testSelectWhereCalledButNoCriteriaThrowsException() {
104 SelectModel selectModel = select(id, firstName, lastName)
105 .from(person)
106 .where()
107 .build();
108
109 assertThatExceptionOfType(NonRenderingWhereClauseException.class).isThrownBy(() ->
110 selectModel.render(RenderingStrategies.MYBATIS3)
111 );
112 }
113
114 @Test
115 void testSelectWhereCalledButNoCriteriaRequiresConfiguration() {
116 SelectStatementProvider selectStatement = select(id, firstName, lastName)
117 .from(person)
118 .where()
119 .configureStatement(c -> c.setNonRenderingWhereClauseAllowed(true))
120 .build()
121 .render(RenderingStrategies.MYBATIS3);
122
123 assertThat(selectStatement.getSelectStatement())
124 .isEqualTo("select person_id, first_name, last_name from Person");
125 }
126
127 @Test
128 void testSelectWhereNotCalledIsOK() {
129 SelectStatementProvider selectStatement = select(id, firstName, lastName)
130 .from(person)
131 .build()
132 .render(RenderingStrategies.MYBATIS3);
133
134 assertThat(selectStatement.getSelectStatement())
135 .isEqualTo("select person_id, first_name, last_name from Person");
136 }
137
138 @Test
139 void testUpdateWhereCalledButNoCriteriaThrowsException() {
140 UpdateModel updateModel = update(person)
141 .set(id).equalTo(1)
142 .where()
143 .build();
144
145 assertThatExceptionOfType(NonRenderingWhereClauseException.class).isThrownBy(() ->
146 updateModel.render(RenderingStrategies.MYBATIS3)
147 );
148 }
149
150 @Test
151 void testUpdateWhereCalledButNoCriteriaRequiresConfiguration() {
152 UpdateStatementProvider updateStatement = update(person)
153 .set(id).equalTo(1)
154 .where()
155 .configureStatement(c -> c.setNonRenderingWhereClauseAllowed(true))
156 .build()
157 .render(RenderingStrategies.MYBATIS3);
158
159 assertThat(updateStatement.getUpdateStatement())
160 .isEqualTo("update Person set person_id = #{parameters.p1}");
161 }
162
163 @Test
164 void testUpdateWhereNotCalledIsOK() {
165 UpdateStatementProvider updateStatement = update(person)
166 .set(id).equalTo(1)
167 .build()
168 .render(RenderingStrategies.MYBATIS3);
169
170 assertThat(updateStatement.getUpdateStatement())
171 .isEqualTo("update Person set person_id = #{parameters.p1}");
172 }
173 }