Skip to content

Commit 5f44bd6

Browse files
committed
Consistent strategy for optional parts of statements
1 parent 3ba3546 commit 5f44bd6

File tree

5 files changed

+90
-75
lines changed

5 files changed

+90
-75
lines changed

src/main/java/org/mybatis/dynamic/sql/delete/render/DeleteRenderer.java

+12-7
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.mybatis.dynamic.sql.delete.render;
1717

1818
import java.util.Collections;
19+
import java.util.Objects;
1920

2021
import org.mybatis.dynamic.sql.delete.DeleteModel;
2122
import org.mybatis.dynamic.sql.render.RenderingStrategy;
@@ -27,21 +28,25 @@ public class DeleteRenderer {
2728
private DeleteModel deleteModel;
2829

2930
private DeleteRenderer(DeleteModel deleteModel) {
30-
this.deleteModel = deleteModel;
31+
this.deleteModel = Objects.requireNonNull(deleteModel);
3132
}
3233

3334
public DeleteSupport render(RenderingStrategy renderingStrategy) {
34-
return deleteModel.whereModel().map(wm -> renderWithWhereClause(wm, renderingStrategy))
35-
.orElse(DeleteSupport.of(deleteModel.table().name()));
35+
DeleteSupport.Builder builder = new DeleteSupport.Builder()
36+
.withTableName(deleteModel.table().name());
37+
38+
deleteModel.whereModel().ifPresent(wm -> applyWhere(builder, wm, renderingStrategy));
39+
40+
return builder.build();
3641
}
3742

38-
private DeleteSupport renderWithWhereClause(WhereModel whereModel, RenderingStrategy renderingStrategy) {
43+
private void applyWhere(DeleteSupport.Builder builder, WhereModel whereModel, RenderingStrategy renderingStrategy) {
3944
WhereSupport whereSupport = new WhereRenderer.Builder(whereModel, renderingStrategy, Collections.emptyMap())
4045
.build()
4146
.render();
42-
return DeleteSupport.of(deleteModel.table().name(),
43-
whereSupport.getWhereClause(),
44-
whereSupport.getParameters());
47+
48+
builder.withWhereClause(whereSupport.getWhereClause());
49+
builder.withParameters(whereSupport.getParameters());
4550
}
4651

4752
public static DeleteRenderer of(DeleteModel deleteModel) {

src/main/java/org/mybatis/dynamic/sql/delete/render/DeleteSupport.java

+30-17
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,21 @@
2323

2424
public class DeleteSupport extends AbstractSqlSupport {
2525

26-
private String whereClause;
26+
private Optional<String> whereClause;
2727
private Map<String, Object> parameters = new HashMap<>();
2828

29-
private DeleteSupport(String tableName) {
30-
super(tableName);
29+
private DeleteSupport(Builder builder) {
30+
super(builder.tableName);
31+
whereClause = Optional.ofNullable(builder.whereClause);
32+
parameters.putAll(builder.parameters);
3133
}
3234

33-
private DeleteSupport(String tableName, String whereClause, Map<String, Object> parameters) {
34-
super(tableName);
35-
this.whereClause = whereClause;
36-
this.parameters.putAll(parameters);
37-
}
38-
3935
public String getWhereClause() {
40-
return whereClause().orElse(EMPTY_STRING);
36+
return whereClause.orElse(EMPTY_STRING);
4137
}
4238

4339
public Optional<String> whereClause() {
44-
return Optional.ofNullable(whereClause);
40+
return whereClause;
4541
}
4642

4743
public Map<String, Object> getParameters() {
@@ -54,11 +50,28 @@ public String getFullDeleteStatement() {
5450
+ whereClause().map(w -> ONE_SPACE + w).orElse(EMPTY_STRING);
5551
}
5652

57-
public static DeleteSupport of(String tableName) {
58-
return new DeleteSupport(tableName);
59-
}
60-
61-
public static DeleteSupport of(String tableName, String whereClause, Map<String, Object> parameters) {
62-
return new DeleteSupport(tableName, whereClause, parameters);
53+
public static class Builder {
54+
private String tableName;
55+
private String whereClause;
56+
private Map<String, Object> parameters = new HashMap<>();
57+
58+
public Builder withTableName(String tableName) {
59+
this.tableName = tableName;
60+
return this;
61+
}
62+
63+
public Builder withWhereClause(String whereClause) {
64+
this.whereClause = whereClause;
65+
return this;
66+
}
67+
68+
public Builder withParameters(Map<String, Object> parameters) {
69+
this.parameters.putAll(parameters);
70+
return this;
71+
}
72+
73+
public DeleteSupport build() {
74+
return new DeleteSupport(this);
75+
}
6376
}
6477
}

src/main/java/org/mybatis/dynamic/sql/select/render/SelectRenderer.java

+28-31
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.render;
1717

18+
import java.util.Objects;
1819
import java.util.concurrent.atomic.AtomicInteger;
1920
import java.util.stream.Collectors;
2021
import java.util.stream.Stream;
@@ -27,14 +28,15 @@
2728
import org.mybatis.dynamic.sql.select.SelectModel;
2829
import org.mybatis.dynamic.sql.select.join.JoinModel;
2930
import org.mybatis.dynamic.sql.util.CustomCollectors;
31+
import org.mybatis.dynamic.sql.where.WhereModel;
3032
import org.mybatis.dynamic.sql.where.render.WhereRenderer;
3133
import org.mybatis.dynamic.sql.where.render.WhereSupport;
3234

3335
public class SelectRenderer {
3436
private SelectModel selectModel;
3537

3638
private SelectRenderer(SelectModel selectModel) {
37-
this.selectModel = selectModel;
39+
this.selectModel = Objects.requireNonNull(selectModel);
3840
}
3941

4042
public SelectSupport render(RenderingStrategy renderingStrategy) {
@@ -45,32 +47,24 @@ public SelectSupport render(RenderingStrategy renderingStrategy, AtomicInteger s
4547
SelectSupport.Builder builder = new SelectSupport.Builder()
4648
.isDistinct(selectModel.isDistinct())
4749
.withColumnList(calculateColumnList())
48-
.withTableName(calculateTableName(selectModel.table()))
49-
.withJoinClause(calculateJoinClause())
50-
.withOrderByClause(calculateOrderByPhrase());
50+
.withTableName(calculateTableName(selectModel.table()));
5151

52-
selectModel.whereModel().ifPresent(wm -> {
53-
WhereSupport whereSupport = new WhereRenderer.Builder(wm, renderingStrategy, selectModel.tableAliases())
54-
.withSequence(sequence)
55-
.build()
56-
.render();
57-
58-
builder.withWhereClause(whereSupport.getWhereClause())
59-
.withParameters(whereSupport.getParameters());
60-
});
52+
selectModel.joinModel().ifPresent(jm -> applyJoin(builder, jm));
53+
selectModel.whereModel().ifPresent(wm -> applyWhere(builder, wm, renderingStrategy, sequence));
54+
selectModel.orderByColumns().ifPresent(cs -> applyOrderBy(builder, cs));
6155

6256
return builder.build();
6357
}
6458

65-
private String calculateTableName(SqlTable table) {
66-
return RenderingUtilities.tableNameIncludingAlias(table, selectModel.tableAliases());
67-
}
68-
6959
private String calculateColumnList() {
7060
return selectModel.columns()
7161
.map(this::nameIncludingTableAndColumnAlias)
7262
.collect(Collectors.joining(", ")); //$NON-NLS-1$
7363
}
64+
65+
private String calculateTableName(SqlTable table) {
66+
return RenderingUtilities.tableNameIncludingAlias(table, selectModel.tableAliases());
67+
}
7468

7569
private String nameIncludingTableAndColumnAlias(SelectListItem selectListItem) {
7670
StringBuilder buffer = new StringBuilder(calculateColumnNameAndTableAlias(selectListItem));
@@ -86,26 +80,29 @@ private String calculateColumnNameAndTableAlias(SelectListItem selectListItem) {
8680
return selectListItem.nameIncludingTableAlias(selectModel.tableAlias(selectListItem.table()));
8781
}
8882

89-
private String calculateJoinClause() {
90-
return selectModel.joinModel()
91-
.map(this::calculateJoinClause)
92-
.orElse(null);
93-
}
94-
95-
private String calculateJoinClause(JoinModel joinModel) {
96-
return JoinRenderer.of(joinModel, selectModel.tableAliases())
83+
private void applyJoin(SelectSupport.Builder builder, JoinModel joinModel) {
84+
String joinClause = JoinRenderer.of(joinModel, selectModel.tableAliases())
9785
.render();
86+
87+
builder.withJoinClause(joinClause);
9888
}
9989

100-
private String calculateOrderByPhrase() {
101-
return selectModel.orderByColumns()
102-
.map(this::calculateOrderByPhrase)
103-
.orElse(null);
90+
private void applyWhere(SelectSupport.Builder builder, WhereModel whereModel, RenderingStrategy renderingStrategy,
91+
AtomicInteger sequence) {
92+
WhereSupport whereSupport = new WhereRenderer.Builder(whereModel, renderingStrategy, selectModel.tableAliases())
93+
.withSequence(sequence)
94+
.build()
95+
.render();
96+
97+
builder.withWhereClause(whereSupport.getWhereClause());
98+
builder.withParameters(whereSupport.getParameters());
10499
}
105100

106-
private String calculateOrderByPhrase(Stream<SqlColumn<?>> columns) {
107-
return columns.map(this::orderByPhrase)
101+
private void applyOrderBy(SelectSupport.Builder builder, Stream<SqlColumn<?>> columns) {
102+
String orderByClause = columns.map(this::orderByPhrase)
108103
.collect(CustomCollectors.joining(", ", "order by ", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
104+
105+
builder.withOrderByClause(orderByClause);
109106
}
110107

111108
private String orderByPhrase(SqlColumn<?> column) {

src/main/java/org/mybatis/dynamic/sql/update/render/UpdateRenderer.java

+12-12
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package org.mybatis.dynamic.sql.update.render;
1717

1818
import java.util.Collections;
19-
import java.util.Optional;
2019
import java.util.stream.Collectors;
2120

2221
import org.mybatis.dynamic.sql.render.RenderingStrategy;
@@ -42,27 +41,28 @@ public UpdateSupport render(RenderingStrategy renderingStrategy) {
4241
.map(cv -> transform(cv, visitor))
4342
.collect(FragmentCollector.collect());
4443

45-
return new UpdateSupport.Builder(updateModel.table().name())
44+
UpdateSupport.Builder builder = new UpdateSupport.Builder()
45+
.withTableName(updateModel.table().name())
4646
.withSetClause(calculateSetPhrase(fc))
47-
.withWhereSupport(renderWhere(renderingStrategy))
48-
.withParameters(fc.parameters())
49-
.build();
47+
.withParameters(fc.parameters());
48+
49+
updateModel.whereModel().ifPresent(wm -> applyWhere(builder, wm, renderingStrategy));
50+
51+
return builder.build();
5052
}
5153

5254
private String calculateSetPhrase(FragmentCollector collector) {
5355
return collector.fragments()
5456
.collect(Collectors.joining(", ", "set ", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
5557
}
5658

57-
private Optional<WhereSupport> renderWhere(RenderingStrategy renderingStrategy) {
58-
return updateModel.whereModel()
59-
.map(wm -> renderWhere(wm, renderingStrategy));
60-
}
61-
62-
private WhereSupport renderWhere(WhereModel whereModel, RenderingStrategy renderingStrategy) {
63-
return new WhereRenderer.Builder(whereModel, renderingStrategy, Collections.emptyMap())
59+
private void applyWhere(UpdateSupport.Builder builder, WhereModel whereModel, RenderingStrategy renderingStrategy) {
60+
WhereSupport whereSupport = new WhereRenderer.Builder(whereModel, renderingStrategy, Collections.emptyMap())
6461
.build()
6562
.render();
63+
64+
builder.withWhereClause(whereSupport.getWhereClause());
65+
builder.withParameters(whereSupport.getParameters());
6666
}
6767

6868
private FragmentAndParameters transform(UpdateMapping columnAndValue, SetPhraseVisitor visitor) {

src/main/java/org/mybatis/dynamic/sql/update/render/UpdateSupport.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717

1818
import java.util.HashMap;
1919
import java.util.Map;
20+
import java.util.Objects;
2021
import java.util.Optional;
2122

2223
import org.mybatis.dynamic.sql.AbstractSqlSupport;
23-
import org.mybatis.dynamic.sql.where.render.WhereSupport;
2424

2525
/**
2626
* This class combines a "set" clause and a "where" clause into one parameter object
@@ -36,9 +36,8 @@ public class UpdateSupport extends AbstractSqlSupport {
3636

3737
private UpdateSupport(Builder builder) {
3838
super(builder.tableName);
39-
setClause = builder.setClause;
40-
whereClause = builder.whereSupport.map(WhereSupport::getWhereClause);
41-
builder.whereSupport.ifPresent(ws -> parameters.putAll(ws.getParameters()));
39+
setClause = Objects.requireNonNull(builder.setClause);
40+
whereClause = Optional.ofNullable(builder.whereClause);
4241
parameters.putAll(builder.parameters);
4342
}
4443

@@ -69,20 +68,21 @@ public String getFullUpdateStatement() {
6968
public static class Builder {
7069
private String tableName;
7170
private String setClause;
72-
private Optional<WhereSupport> whereSupport = Optional.empty();
71+
private String whereClause;
7372
private Map<String, Object> parameters = new HashMap<>();
7473

75-
public Builder(String tableName) {
74+
public Builder withTableName(String tableName) {
7675
this.tableName = tableName;
76+
return this;
7777
}
7878

7979
public Builder withSetClause(String setClause) {
8080
this.setClause = setClause;
8181
return this;
8282
}
8383

84-
public Builder withWhereSupport(Optional<WhereSupport> whereSupport) {
85-
this.whereSupport = whereSupport;
84+
public Builder withWhereClause(String whereClause) {
85+
this.whereClause = whereClause;
8686
return this;
8787
}
8888

0 commit comments

Comments
 (0)