Skip to content

Commit 5733e1c

Browse files
committed
Merge branch 'remove_useless_parenthesis' into having-support
# Conflicts: # src/main/java/org/mybatis/dynamic/sql/where/render/WhereRenderer.java
2 parents 7327c88 + ddc2407 commit 5733e1c

File tree

13 files changed

+112
-49
lines changed

13 files changed

+112
-49
lines changed

src/main/java/org/mybatis/dynamic/sql/util/FragmentCollector.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.HashMap;
2020
import java.util.List;
2121
import java.util.Map;
22+
import java.util.Optional;
2223
import java.util.stream.Collector;
2324
import java.util.stream.Stream;
2425

@@ -42,9 +43,12 @@ public FragmentCollector merge(FragmentCollector other) {
4243
return this;
4344
}
4445

46+
public Optional<String> firstFragment() {
47+
return fragments.stream().findFirst().map(FragmentAndParameters::fragment);
48+
}
49+
4550
public Stream<String> fragments() {
46-
return fragments.stream()
47-
.map(FragmentAndParameters::fragment);
51+
return fragments.stream().map(FragmentAndParameters::fragment);
4852
}
4953

5054
public Map<String, Object> parameters() {

src/test/java/examples/animal/data/AnimalDataTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ void testComplexConditionWithStandaloneWhereAndTableAlias() {
317317
.render(RenderingStrategies.MYBATIS3, ExplicitTableAliasCalculator.of(animalData, "a"));
318318

319319
assertThat(whereClause).hasValueSatisfying(wc -> {
320-
assertThat(wc.getWhereClause()).isEqualTo("where (a.id = #{parameters.p1,jdbcType=INTEGER} or a.body_weight > #{parameters.p2,jdbcType=DOUBLE})");
320+
assertThat(wc.getWhereClause()).isEqualTo("where a.id = #{parameters.p1,jdbcType=INTEGER} or a.body_weight > #{parameters.p2,jdbcType=DOUBLE}");
321321
List<AnimalData> animals = mapper.selectWithWhereClauseAndAlias(wc);
322322
assertThat(animals).hasSize(59);
323323
});

src/test/java/examples/joins/ExistsTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class ExistsTest {
5656
void setup() throws Exception {
5757
Class.forName(JDBC_DRIVER);
5858
InputStream is = getClass().getResourceAsStream("/examples/joins/CreateJoinDB.sql");
59+
assert is != null;
5960
try (Connection connection = DriverManager.getConnection(JDBC_URL, "sa", "")) {
6061
ScriptRunner sr = new ScriptRunner(connection);
6162
sr.setLogWriter(null);
@@ -333,8 +334,8 @@ void testWhereExistsOr() {
333334
.render(RenderingStrategies.MYBATIS3);
334335

335336
String expectedStatement = "select im.* from ItemMaster im"
336-
+ " where (exists (select ol.* from OrderLine ol where ol.item_id = im.item_id)"
337-
+ " or im.item_id = #{parameters.p1,jdbcType=INTEGER})"
337+
+ " where exists (select ol.* from OrderLine ol where ol.item_id = im.item_id)"
338+
+ " or im.item_id = #{parameters.p1,jdbcType=INTEGER}"
338339
+ " order by item_id";
339340
assertThat(selectStatement.getSelectStatement()).isEqualTo(expectedStatement);
340341

@@ -372,8 +373,8 @@ void testWhereExistsAnd() {
372373
.render(RenderingStrategies.MYBATIS3);
373374

374375
String expectedStatement = "select im.* from ItemMaster im"
375-
+ " where (exists (select ol.* from OrderLine ol where ol.item_id = im.item_id)"
376-
+ " and im.item_id = #{parameters.p1,jdbcType=INTEGER})"
376+
+ " where exists (select ol.* from OrderLine ol where ol.item_id = im.item_id)"
377+
+ " and im.item_id = #{parameters.p1,jdbcType=INTEGER}"
377378
+ " order by item_id";
378379
assertThat(selectStatement.getSelectStatement()).isEqualTo(expectedStatement);
379380

src/test/java/examples/joins/JoinMapperTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ void testMultipleTableJoinWithComplexWhereClause() {
307307

308308
String expectedStatement = "select om.order_id, om.order_date, ol.line_number, im.description, ol.quantity"
309309
+ " from OrderMaster om join OrderLine ol on om.order_id = ol.order_id join ItemMaster im on ol.item_id = im.item_id"
310-
+ " where (om.order_id = #{parameters.p1,jdbcType=INTEGER} and ol.line_number = #{parameters.p2,jdbcType=INTEGER})";
310+
+ " where om.order_id = #{parameters.p1,jdbcType=INTEGER} and ol.line_number = #{parameters.p2,jdbcType=INTEGER}";
311311
assertThat(selectStatement.getSelectStatement()).isEqualTo(expectedStatement);
312312

313313
List<OrderMaster> rows = mapper.selectMany(selectStatement);

src/test/java/issues/gh430/NoInitialConditionTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ void testNoInitialConditionWhereMultipleSubs() {
8383
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
8484

8585
String expected = "select column1, column2 from foo where " +
86-
"(column2 = :p1 or column2 = :p2 or column2 = :p3)";
86+
"column2 = :p1 or column2 = :p2 or column2 = :p3";
8787

8888
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
8989
}
@@ -101,9 +101,9 @@ void testNoInitialConditionWhereNotMultipleSubs() {
101101
.build()
102102
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
103103

104-
String expected = "select column1, column2 from foo where (not " +
104+
String expected = "select column1, column2 from foo where not " +
105105
"(column2 = :p1 or column2 = :p2 or column2 = :p3) " +
106-
"and column1 < :p4)";
106+
"and column1 < :p4";
107107

108108
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
109109
}
@@ -122,8 +122,8 @@ void testNoInitialConditionWhereGroupMultipleSubs() {
122122
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
123123

124124
String expected = "select column1, column2 from foo where " +
125-
"((column2 = :p1 or column2 = :p2 or column2 = :p3) " +
126-
"and column1 < :p4)";
125+
"(column2 = :p1 or column2 = :p2 or column2 = :p3) " +
126+
"and column1 < :p4";
127127

128128
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
129129
}
@@ -142,7 +142,7 @@ void testNoInitialConditionWhereCCAndMultipleSubs() {
142142
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
143143

144144
String expected = "select column1, column2 from foo where " +
145-
"(column1 < :p1 and (column2 = :p2 or column2 = :p3 or column2 = :p4))";
145+
"column1 < :p1 and (column2 = :p2 or column2 = :p3 or column2 = :p4)";
146146

147147
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
148148
}
@@ -161,7 +161,7 @@ void testNoInitialConditionWhereCCOrMultipleSubs() {
161161
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
162162

163163
String expected = "select column1, column2 from foo where " +
164-
"(column1 < :p1 or (column2 = :p2 or column2 = :p3 or column2 = :p4))";
164+
"column1 < :p1 or (column2 = :p2 or column2 = :p3 or column2 = :p4)";
165165

166166
assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
167167
}

src/test/java/org/mybatis/dynamic/sql/update/UpdateStatementTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void testUpdateParameterWithMultipleCriteria() {
4545
.render(RenderingStrategies.MYBATIS3);
4646

4747
String expected = "update foo set firstName = #{parameters.p1,jdbcType=VARCHAR}, lastName = #{parameters.p2,jdbcType=VARCHAR}, occupation = null "
48-
+ "where (id = #{parameters.p3,jdbcType=INTEGER} or id = #{parameters.p4,jdbcType=INTEGER} or id = #{parameters.p5,jdbcType=INTEGER})";
48+
+ "where id = #{parameters.p3,jdbcType=INTEGER} or id = #{parameters.p4,jdbcType=INTEGER} or id = #{parameters.p5,jdbcType=INTEGER}";
4949

5050
assertAll(
5151
() -> assertThat(updateStatement.getUpdateStatement()).isEqualTo(expected),
@@ -69,7 +69,7 @@ void testUpdateParameterWithMultipleNestedCriteria() {
6969
.render(RenderingStrategies.MYBATIS3);
7070

7171
String expected = "update foo set firstName = #{parameters.p1,jdbcType=VARCHAR}, lastName = #{parameters.p2,jdbcType=VARCHAR}, occupation = null "
72-
+ "where (id = #{parameters.p3,jdbcType=INTEGER} or (id = #{parameters.p4,jdbcType=INTEGER} or id = #{parameters.p5,jdbcType=INTEGER}))";
72+
+ "where id = #{parameters.p3,jdbcType=INTEGER} or (id = #{parameters.p4,jdbcType=INTEGER} or id = #{parameters.p5,jdbcType=INTEGER})";
7373

7474
assertAll(
7575
() -> assertThat(updateStatement.getUpdateStatement()).isEqualTo(expected),

src/test/java/org/mybatis/dynamic/sql/where/WhereModelTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ void testThatParameterNameCarriesToSubCriteria() {
3838
.render(RenderingStrategies.MYBATIS3, "myName");
3939

4040
assertThat(whereClause.map(WhereClauseProvider::getWhereClause)).hasValueSatisfying(wc ->
41-
assertThat(wc).isEqualTo("where (id = #{myName.parameters.p1,jdbcType=INTEGER} or id = #{myName.parameters.p2,jdbcType=INTEGER})")
41+
assertThat(wc).isEqualTo("where id = #{myName.parameters.p1,jdbcType=INTEGER} or id = #{myName.parameters.p2,jdbcType=INTEGER}")
4242
);
4343
}
4444
}

src/test/java/org/mybatis/dynamic/sql/where/render/OptionalCriterionRenderTest.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ void testOverrideFirstConnector() {
169169

170170
assertThat(whereClause).hasValueSatisfying(wc -> {
171171
assertThat(wc.getParameters()).containsExactly(entry("p1", "fred"), entry("p2", "flintstone"));
172-
assertThat(wc.getWhereClause()).isEqualTo("where (first_name = :p1 or last_name = :p2)");
172+
assertThat(wc.getWhereClause()).isEqualTo("where first_name = :p1 or last_name = :p2");
173173
});
174174
}
175175

@@ -206,8 +206,8 @@ void testWhereExistsOr() {
206206
.build()
207207
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
208208

209-
String expected = "where (exists (select * from person where id = :p1) " +
210-
"or exists (select * from person where id = :p2))";
209+
String expected = "where exists (select * from person where id = :p1) " +
210+
"or exists (select * from person where id = :p2)";
211211

212212
assertThat(whereClause).hasValueSatisfying(wc -> {
213213
assertThat(wc.getParameters()).containsExactly(entry("p1", 3), entry("p2", 4));
@@ -237,9 +237,9 @@ void testWhereExistsOrOr() {
237237
.build()
238238
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
239239

240-
String expected = "where (exists (select * from person where id = :p1) " +
240+
String expected = "where exists (select * from person where id = :p1) " +
241241
"or (exists (select * from person where id = :p2) " +
242-
"or exists (select * from person where id = :p3)))";
242+
"or exists (select * from person where id = :p3))";
243243

244244
assertThat(whereClause).hasValueSatisfying(wc -> {
245245
assertThat(wc.getParameters()).containsExactly(entry("p1", 3), entry("p2", 4), entry("p3", 5));
@@ -263,8 +263,8 @@ void testWhereExistsAnd() {
263263
.build()
264264
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
265265

266-
String expected = "where (exists (select * from person where id = :p1) " +
267-
"and exists (select * from person where id = :p2))";
266+
String expected = "where exists (select * from person where id = :p1) " +
267+
"and exists (select * from person where id = :p2)";
268268

269269
assertThat(whereClause).hasValueSatisfying(wc -> {
270270
assertThat(wc.getParameters()).containsExactly(entry("p1", 3), entry("p2", 4));
@@ -294,9 +294,9 @@ void testWhereExistsAndAnd() {
294294
.build()
295295
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
296296

297-
String expected = "where (exists (select * from person where id = :p1) " +
297+
String expected = "where exists (select * from person where id = :p1) " +
298298
"and (exists (select * from person where id = :p2) " +
299-
"and exists (select * from person where id = :p3)))";
299+
"and exists (select * from person where id = :p3))";
300300

301301
assertThat(whereClause).hasValueSatisfying(wc -> {
302302
assertThat(wc.getParameters()).containsExactly(entry("p1", 3), entry("p2", 4), entry("p3", 5));
@@ -343,7 +343,7 @@ void testCollapsingCriteriaGroup3() {
343343
.build()
344344
.render(RenderingStrategies.SPRING_NAMED_PARAMETER);
345345

346-
String expected = "where (first_name = :p1 or first_name = :p2)";
346+
String expected = "where first_name = :p1 or first_name = :p2";
347347

348348
assertThat(whereClause).hasValueSatisfying(wc -> {
349349
assertThat(wc.getParameters()).containsExactly(entry("p1", "Fred"), entry("p2", "Betty"));

src/test/kotlin/examples/kotlin/mybatis3/general/GeneralKotlinTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@ class GeneralKotlinTest {
695695
assertThat(updateStatement.updateStatement).isEqualTo(
696696
"update Person" +
697697
" set first_name = #{parameters.p1,jdbcType=VARCHAR}" +
698-
" where (first_name = #{parameters.p2,jdbcType=VARCHAR} or id > #{parameters.p3,jdbcType=INTEGER})"
698+
" where first_name = #{parameters.p2,jdbcType=VARCHAR} or id > #{parameters.p3,jdbcType=INTEGER}"
699699
)
700700

701701
val rows = mapper.update(updateStatement)

src/test/kotlin/examples/kotlin/mybatis3/general/KGroupingTest.kt

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,4 +281,62 @@ class KGroupingTest {
281281
assertThat(selectStatement.parameters).containsEntry("p5", 6)
282282
assertThat(selectStatement.parameters).containsEntry("p6", 7)
283283
}
284+
285+
@Test
286+
fun testNotGroupAndOrCriteriaGroupsNested() {
287+
val selectStatement = select(A, B, C) {
288+
from(foo)
289+
where {
290+
not {
291+
group {
292+
B isEqualTo 4
293+
and { A isLessThan 5 }
294+
}
295+
and { A isGreaterThan 3 }
296+
}
297+
and { not { A isGreaterThan 4 } }
298+
or {
299+
not {
300+
group {
301+
B isLessThan 6
302+
and { A isGreaterThanOrEqualTo 7 }
303+
}
304+
}
305+
}
306+
}
307+
}
308+
309+
val expected = "select A, B, C" +
310+
" from Foo" +
311+
" where not ((B = #{parameters.p1} and A < #{parameters.p2}) and A > #{parameters.p3})" +
312+
" and not A > #{parameters.p4}" +
313+
" or not (B < #{parameters.p5} and A >= #{parameters.p6})"
314+
315+
assertThat(selectStatement.selectStatement).isEqualTo(expected)
316+
assertThat(selectStatement.parameters).containsEntry("p1", 4)
317+
assertThat(selectStatement.parameters).containsEntry("p2", 5)
318+
assertThat(selectStatement.parameters).containsEntry("p3", 3)
319+
assertThat(selectStatement.parameters).containsEntry("p4", 4)
320+
assertThat(selectStatement.parameters).containsEntry("p5", 6)
321+
assertThat(selectStatement.parameters).containsEntry("p6", 7)
322+
}
323+
324+
@Test
325+
fun testNotGroupAndOrCriteriaGroupsNested2() {
326+
val selectStatement = select(A, B, C) {
327+
from(foo)
328+
where {
329+
B isEqualTo 4
330+
or { B isEqualTo 5 }
331+
}
332+
}
333+
334+
val expected = "select A, B, C" +
335+
" from Foo" +
336+
" where B = #{parameters.p1} or B = #{parameters.p2}"
337+
338+
assertThat(selectStatement.selectStatement).isEqualTo(expected)
339+
assertThat(selectStatement.parameters).containsEntry("p1", 4)
340+
assertThat(selectStatement.parameters).containsEntry("p2", 5)
341+
}
284342
}

0 commit comments

Comments
 (0)