Skip to content

Commit 6c9c9fd

Browse files
committed
Move update rendering fully into update renderer
1 parent 09a583d commit 6c9c9fd

File tree

2 files changed

+39
-51
lines changed

2 files changed

+39
-51
lines changed

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

Lines changed: 9 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2016-2018 the original author or authors.
2+
* Copyright 2016-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,32 +15,16 @@
1515
*/
1616
package org.mybatis.dynamic.sql.update.render;
1717

18-
import static org.mybatis.dynamic.sql.util.StringUtilities.spaceBefore;
19-
2018
import java.util.HashMap;
2119
import java.util.Map;
2220
import java.util.Objects;
23-
import java.util.Optional;
24-
25-
import org.mybatis.dynamic.sql.where.render.WhereClauseProvider;
2621

27-
/**
28-
* This class combines a "set" clause and a "where" clause into one parameter object
29-
* that can be sent to a MyBatis3 mapper method.
30-
*
31-
* @author Jeff Butler
32-
*
33-
*/
3422
public class DefaultUpdateStatementProvider implements UpdateStatementProvider {
35-
private String tableName;
36-
private String setClause;
37-
private Optional<String> whereClause;
23+
private String updateStatement;
3824
private Map<String, Object> parameters = new HashMap<>();
3925

4026
private DefaultUpdateStatementProvider(Builder builder) {
41-
tableName = Objects.requireNonNull(builder.tableName);
42-
setClause = Objects.requireNonNull(builder.setClause);
43-
whereClause = Optional.ofNullable(builder.whereClause);
27+
updateStatement = Objects.requireNonNull(builder.updateStatement);
4428
parameters.putAll(builder.parameters);
4529
}
4630

@@ -51,37 +35,19 @@ public Map<String, Object> getParameters() {
5135

5236
@Override
5337
public String getUpdateStatement() {
54-
return "update" //$NON-NLS-1$
55-
+ spaceBefore(tableName)
56-
+ spaceBefore(setClause)
57-
+ spaceBefore(whereClause);
38+
return updateStatement;
5839
}
5940

60-
public static Builder withTableName(String tableName) {
61-
return new Builder().withTableName(tableName);
41+
public static Builder withUpdateStatement(String updateStatement) {
42+
return new Builder().withUpdateStatement(updateStatement);
6243
}
6344

6445
public static class Builder {
65-
private String tableName;
66-
private String setClause;
67-
private String whereClause;
46+
private String updateStatement;
6847
private Map<String, Object> parameters = new HashMap<>();
6948

70-
public Builder withTableName(String tableName) {
71-
this.tableName = tableName;
72-
return this;
73-
}
74-
75-
public Builder withSetClause(String setClause) {
76-
this.setClause = setClause;
77-
return this;
78-
}
79-
80-
public Builder withWhereClause(Optional<WhereClauseProvider> whereClauseProvider) {
81-
whereClauseProvider.ifPresent(wcp -> {
82-
whereClause = wcp.getWhereClause();
83-
parameters.putAll(wcp.getParameters());
84-
});
49+
public Builder withUpdateStatement(String updateStatement) {
50+
this.updateStatement = updateStatement;
8551
return this;
8652
}
8753

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

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2016-2018 the original author or authors.
2+
* Copyright 2016-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,6 +15,10 @@
1515
*/
1616
package org.mybatis.dynamic.sql.update.render;
1717

18+
import static org.mybatis.dynamic.sql.util.StringUtilities.spaceBefore;
19+
20+
import java.util.Collections;
21+
import java.util.Map;
1822
import java.util.Objects;
1923
import java.util.Optional;
2024
import java.util.concurrent.atomic.AtomicInteger;
@@ -42,18 +46,36 @@ private UpdateRenderer(Builder builder) {
4246
}
4347

4448
public UpdateStatementProvider render() {
45-
SetPhraseVisitor visitor = new SetPhraseVisitor(sequence, renderingStrategy);
46-
47-
FragmentCollector fc = updateModel.mapColumnMappings(toFragmentAndParameters(visitor))
48-
.collect(FragmentCollector.collect());
49+
FragmentCollector fc = calculateColumnMappings();
4950

50-
return DefaultUpdateStatementProvider.withTableName(updateModel.table().name())
51-
.withSetClause(calculateSetPhrase(fc))
51+
Optional<WhereClauseProvider> whereClause = updateModel.whereModel().flatMap(this::renderWhereClause);
52+
53+
return DefaultUpdateStatementProvider.withUpdateStatement(calculateUpdateStatement(fc, whereClause))
5254
.withParameters(fc.parameters())
53-
.withWhereClause(updateModel.whereModel().flatMap(this::renderWhereClause))
55+
.withParameters(calculateWhereParameters(whereClause))
5456
.build();
5557
}
5658

59+
private FragmentCollector calculateColumnMappings() {
60+
SetPhraseVisitor visitor = new SetPhraseVisitor(sequence, renderingStrategy);
61+
62+
return updateModel.mapColumnMappings(toFragmentAndParameters(visitor))
63+
.collect(FragmentCollector.collect());
64+
}
65+
66+
private String calculateUpdateStatement(FragmentCollector fc, Optional<WhereClauseProvider> whereClause) {
67+
return "update" //$NON-NLS-1$
68+
+ spaceBefore(updateModel.table().name())
69+
+ spaceBefore(calculateSetPhrase(fc))
70+
+ spaceBefore(whereClause.map(WhereClauseProvider::getWhereClause));
71+
}
72+
73+
private Map<String, Object> calculateWhereParameters(Optional<WhereClauseProvider> whereClause) {
74+
return whereClause
75+
.map(WhereClauseProvider::getParameters)
76+
.orElse(Collections.emptyMap());
77+
}
78+
5779
private String calculateSetPhrase(FragmentCollector collector) {
5880
return collector.fragments()
5981
.collect(Collectors.joining(", ", "set ", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

0 commit comments

Comments
 (0)