Skip to content

Commit ca34ebe

Browse files
committed
Move select rendering fully into the select renderer
1 parent 12972ab commit ca34ebe

File tree

2 files changed

+31
-43
lines changed

2 files changed

+31
-43
lines changed

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

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,18 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.render;
1717

18-
import static org.mybatis.dynamic.sql.util.StringUtilities.spaceBefore;
19-
2018
import java.util.Collections;
2119
import java.util.HashMap;
2220
import java.util.Map;
2321
import java.util.Objects;
24-
import java.util.Optional;
2522

2623
public class DefaultSelectStatementProvider implements SelectStatementProvider {
27-
private String queryExpression;
24+
private String selectStatement;
2825
private Map<String, Object> parameters;
29-
private Optional<String> orderByClause;
30-
private Optional<String> limitClause;
31-
private Optional<String> offsetClause;
3226

3327
private DefaultSelectStatementProvider(Builder builder) {
34-
queryExpression = Objects.requireNonNull(builder.queryExpression);
35-
orderByClause = Objects.requireNonNull(builder.orderByClause);
28+
selectStatement = Objects.requireNonNull(builder.selectStatement);
3629
parameters = Collections.unmodifiableMap(Objects.requireNonNull(builder.parameters));
37-
limitClause = Objects.requireNonNull(builder.limitClause);
38-
offsetClause = Objects.requireNonNull(builder.offsetClause);
3930
}
4031

4132
@Override
@@ -45,27 +36,19 @@ public Map<String, Object> getParameters() {
4536

4637
@Override
4738
public String getSelectStatement() {
48-
return queryExpression + spaceBefore(orderByClause) + spaceBefore(limitClause) + spaceBefore(offsetClause);
39+
return selectStatement;
4940
}
5041

51-
public static Builder withQueryExpression(String queryExpression) {
52-
return new Builder().withQueryExpression(queryExpression);
42+
public static Builder withSelectStatement(String selectStatement) {
43+
return new Builder().withSelectStatement(selectStatement);
5344
}
5445

5546
public static class Builder {
56-
private String queryExpression;
57-
private Optional<String> orderByClause = Optional.empty();
47+
private String selectStatement;
5848
private Map<String, Object> parameters = new HashMap<>();
59-
private Optional<String> limitClause = Optional.empty();
60-
private Optional<String> offsetClause = Optional.empty();
6149

62-
public Builder withQueryExpression(String queryExpression) {
63-
this.queryExpression = queryExpression;
64-
return this;
65-
}
66-
67-
public Builder withOrderByClause(Optional<String> orderByClause) {
68-
this.orderByClause = orderByClause;
50+
public Builder withSelectStatement(String selectStatement) {
51+
this.selectStatement = selectStatement;
6952
return this;
7053
}
7154

@@ -74,16 +57,6 @@ public Builder withParameters(Map<String, Object> parameters) {
7457
return this;
7558
}
7659

77-
public Builder withLimitClause(Optional<String> limitClause) {
78-
this.limitClause = limitClause;
79-
return this;
80-
}
81-
82-
public Builder withOffsetClause(Optional<String> offsetClause) {
83-
this.offsetClause = offsetClause;
84-
return this;
85-
}
86-
8760
public DefaultSelectStatementProvider build() {
8861
return new DefaultSelectStatementProvider(this);
8962
}

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

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.render;
1717

18+
import static org.mybatis.dynamic.sql.util.StringUtilities.spaceBefore;
19+
1820
import java.util.Map;
1921
import java.util.Objects;
2022
import java.util.Optional;
@@ -46,14 +48,14 @@ public SelectStatementProvider render() {
4648
.collect(QueryExpressionCollector.collect());
4749

4850
Map<String, Object> parameters = collector.parameters();
49-
Optional<String> limitClause = selectModel.limit().map(l -> renderLimit(parameters, l));
50-
Optional<String> offsetClause = selectModel.offset().map(o -> renderOffset(parameters, o));
5151

52-
return DefaultSelectStatementProvider.withQueryExpression(collector.queryExpression())
52+
String selectStatement = collector.queryExpression()
53+
+ spaceBefore(renderOrderBy())
54+
+ spaceBefore(renderLimit(parameters))
55+
+ spaceBefore(renderOffset(parameters));
56+
57+
return DefaultSelectStatementProvider.withSelectStatement(selectStatement)
5358
.withParameters(parameters)
54-
.withOrderByClause(selectModel.orderByModel().map(this::renderOrderBy))
55-
.withLimitClause(limitClause)
56-
.withOffsetClause(offsetClause)
5759
.build();
5860
}
5961

@@ -65,26 +67,39 @@ private QueryExpression renderQueryExpression(QueryExpressionModel queryExpressi
6567
.render();
6668
}
6769

70+
private Optional<String> renderOrderBy() {
71+
return selectModel.orderByModel()
72+
.map(this::renderOrderBy);
73+
}
74+
6875
private String renderOrderBy(OrderByModel orderByModel) {
69-
return orderByModel.mapColumns(this::orderByPhrase)
76+
return orderByModel.mapColumns(this::calculateOrderByPhrase)
7077
.collect(CustomCollectors.joining(", ", "order by ", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
7178
}
7279

73-
private String orderByPhrase(SortSpecification column) {
80+
private String calculateOrderByPhrase(SortSpecification column) {
7481
String phrase = column.aliasOrName();
7582
if (column.isDescending()) {
7683
phrase = phrase + " DESC"; //$NON-NLS-1$
7784
}
7885
return phrase;
7986
}
8087

88+
private Optional<String> renderLimit(Map<String, Object> parameters) {
89+
return selectModel.limit().map(l -> renderLimit(parameters, l));
90+
}
91+
8192
private String renderLimit(Map<String, Object> parameters, Long limit) {
8293
String placeholder = renderingStrategy.getFormattedJdbcPlaceholder(RenderingStrategy.DEFAULT_PARAMETER_PREFIX,
8394
LIMIT_PARAMETER);
8495
parameters.put(LIMIT_PARAMETER, limit);
8596
return "limit " + placeholder; //$NON-NLS-1$
8697
}
8798

99+
private Optional<String> renderOffset(Map<String, Object> parameters) {
100+
return selectModel.offset().map(o -> renderOffset(parameters, o));
101+
}
102+
88103
private String renderOffset(Map<String, Object> parameters, Long offset) {
89104
String placeholder = renderingStrategy.getFormattedJdbcPlaceholder(RenderingStrategy.DEFAULT_PARAMETER_PREFIX,
90105
OFFSET_PARAMETER);

0 commit comments

Comments
 (0)