Skip to content

Commit 283f0a5

Browse files
committed
SelectRenderer should return FragmentAndParameters
Many usages of the select renderer are for sub queries - no need to build an intermediate statement provider in those cases.
1 parent 506d30e commit 283f0a5

File tree

9 files changed

+30
-79
lines changed

9 files changed

+30
-79
lines changed

src/main/java/org/mybatis/dynamic/sql/insert/render/InsertSelectRenderer.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import org.mybatis.dynamic.sql.insert.InsertSelectModel;
2828
import org.mybatis.dynamic.sql.render.RenderingContext;
2929
import org.mybatis.dynamic.sql.render.RenderingStrategy;
30-
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
30+
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
3131
import org.mybatis.dynamic.sql.util.StringUtilities;
3232

3333
public class InsertSelectRenderer {
@@ -43,18 +43,18 @@ private InsertSelectRenderer(Builder builder) {
4343
}
4444

4545
public InsertSelectStatementProvider render() {
46-
SelectStatementProvider selectStatement = model.selectModel().render(renderingContext);
46+
FragmentAndParameters selectStatement = model.selectModel().render(renderingContext);
4747

4848
String statementStart = InsertRenderingUtilities.calculateInsertStatementStart(model.table());
4949
Optional<String> columnsPhrase = calculateColumnsPhrase();
50-
String renderedSelectStatement = selectStatement.getSelectStatement();
50+
String renderedSelectStatement = selectStatement.fragment();
5151

5252
String insertStatement = statementStart
5353
+ columnsPhrase.map(StringUtilities::spaceBefore).orElse("") //$NON-NLS-1$
5454
+ spaceBefore(renderedSelectStatement);
5555

5656
return DefaultGeneralInsertStatementProvider.withInsertStatement(insertStatement)
57-
.withParameters(selectStatement.getParameters())
57+
.withParameters(selectStatement.parameters())
5858
.build();
5959
}
6060

src/main/java/org/mybatis/dynamic/sql/render/RendererFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.mybatis.dynamic.sql.update.UpdateModel;
4343
import org.mybatis.dynamic.sql.update.render.UpdateRenderer;
4444
import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
45+
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
4546

4647
public interface RendererFactory {
4748
static Renderer<RenderingStrategy, DeleteStatementProvider> createDeleteRenderer(DeleteModel deleteModel,
@@ -105,7 +106,7 @@ static Renderer<RenderingStrategy, SelectStatementProvider> createMultiSelectRen
105106
.render();
106107
}
107108

108-
static Renderer<RenderingContext, SelectStatementProvider> createSelectRenderer(
109+
static Renderer<RenderingContext, FragmentAndParameters> createSelectRenderer(
109110
SelectModel selectModel) {
110111
return renderingContext -> SelectRenderer.withSelectModel(selectModel)
111112
.withRenderingContext(renderingContext)

src/main/java/org/mybatis/dynamic/sql/select/SelectModel.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
import org.mybatis.dynamic.sql.render.RendererFactory;
2525
import org.mybatis.dynamic.sql.render.RenderingContext;
2626
import org.mybatis.dynamic.sql.render.RenderingStrategy;
27+
import org.mybatis.dynamic.sql.select.render.DefaultSelectStatementProvider;
2728
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
29+
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
2830
import org.mybatis.dynamic.sql.util.Validator;
2931

3032
public class SelectModel extends AbstractSelectModel {
@@ -45,7 +47,10 @@ public SelectStatementProvider render(RenderingStrategy renderingStrategy) {
4547
RenderingContext renderingContext = RenderingContext.withRenderingStrategy(renderingStrategy)
4648
.withStatementConfiguration(statementConfiguration)
4749
.build();
48-
return render(renderingContext);
50+
FragmentAndParameters fragmentAndParameters = render(renderingContext);
51+
return DefaultSelectStatementProvider.withSelectStatement(fragmentAndParameters.fragment())
52+
.withParameters(fragmentAndParameters.parameters())
53+
.build();
4954
}
5055

5156
/**
@@ -55,7 +60,7 @@ public SelectStatementProvider render(RenderingStrategy renderingStrategy) {
5560
* @return a rendered select statement and parameters
5661
*/
5762
@NotNull
58-
public SelectStatementProvider render(RenderingContext renderingContext) {
63+
public FragmentAndParameters render(RenderingContext renderingContext) {
5964
return RendererFactory.createSelectRenderer(this).render(renderingContext);
6065
}
6166

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

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,13 @@ private SelectStatementProvider toSelectStatementProvider(FragmentCollector frag
6565
}
6666

6767
private FragmentAndParameters renderSelect(SelectModel selectModel) {
68-
SelectStatementProvider selectStatement = selectModel.render(renderingContext);
69-
70-
return FragmentAndParameters
71-
.withFragment("(" + selectStatement.getSelectStatement() + ")") //$NON-NLS-1$ //$NON-NLS-2$
72-
.withParameters(selectStatement.getParameters())
73-
.build();
68+
return selectModel.render(renderingContext)
69+
.mapFragment(f -> "(" + f + ")"); //$NON-NLS-1$ //$NON-NLS-2$
7470
}
7571

7672
private FragmentAndParameters renderSelect(UnionQuery unionQuery) {
77-
SelectStatementProvider selectStatement = unionQuery.selectModel().render(renderingContext);
78-
79-
return FragmentAndParameters.withFragment(
80-
unionQuery.connector() + " (" + selectStatement.getSelectStatement() + ")") //$NON-NLS-1$ //$NON-NLS-2$
81-
.withParameters(selectStatement.getParameters())
82-
.build();
73+
return unionQuery.selectModel().render(renderingContext)
74+
.mapFragment(f -> unionQuery.connector() + " (" + f + ")"); //$NON-NLS-1$ //$NON-NLS-2$
8375
}
8476

8577
private Optional<FragmentAndParameters> renderOrderBy() {

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

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ private SelectRenderer(Builder builder) {
3737
renderingContext = Objects.requireNonNull(builder.renderingContext);
3838
}
3939

40-
public SelectStatementProvider render() {
40+
public FragmentAndParameters render() {
4141
FragmentCollector fragmentCollector = selectModel
4242
.queryExpressions()
4343
.map(this::renderQueryExpression)
@@ -46,14 +46,7 @@ public SelectStatementProvider render() {
4646
renderOrderBy().ifPresent(fragmentCollector::add);
4747
renderPagingModel().ifPresent(fragmentCollector::add);
4848

49-
return toSelectStatementProvider(fragmentCollector);
50-
}
51-
52-
private SelectStatementProvider toSelectStatementProvider(FragmentCollector fragmentCollector) {
53-
return DefaultSelectStatementProvider
54-
.withSelectStatement(fragmentCollector.collectFragments(Collectors.joining(" "))) //$NON-NLS-1$
55-
.withParameters(fragmentCollector.parameters())
56-
.build();
49+
return fragmentCollector.toFragmentAndParameters(Collectors.joining(" ")); //$NON-NLS-1$
5750
}
5851

5952
private FragmentAndParameters renderQueryExpression(QueryExpressionModel queryExpressionModel) {

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

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,8 @@ public FragmentAndParameters visit(SqlTable table) {
3939

4040
@Override
4141
public FragmentAndParameters visit(SubQuery subQuery) {
42-
SelectStatementProvider selectStatement = subQuery.selectModel().render(renderingContext);
43-
44-
String fragment = "(" + selectStatement.getSelectStatement() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
45-
46-
fragment = applyAlias(fragment, subQuery);
47-
48-
return FragmentAndParameters.withFragment(fragment)
49-
.withParameters(selectStatement.getParameters())
50-
.build();
42+
return subQuery.selectModel().render(renderingContext)
43+
.mapFragment(f -> applyAlias("(" + f + ")", subQuery)); //$NON-NLS-1$ //$NON-NLS-2$
5144
}
5245

5346
private String applyAlias(String fragment, SubQuery subQuery) {

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

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import org.mybatis.dynamic.sql.render.RenderedParameterInfo;
2222
import org.mybatis.dynamic.sql.render.RenderingContext;
23-
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
2423
import org.mybatis.dynamic.sql.util.AbstractColumnMapping;
2524
import org.mybatis.dynamic.sql.util.ColumnToColumnMapping;
2625
import org.mybatis.dynamic.sql.util.ConstantMapping;
@@ -84,28 +83,15 @@ public <T> Optional<FragmentAndParameters> visit(ValueWhenPresentMapping<T> mapp
8483

8584
@Override
8685
public Optional<FragmentAndParameters> visit(SelectMapping mapping) {
87-
SelectStatementProvider selectStatement = mapping.selectModel().render(renderingContext);
88-
String fragment = renderingContext.aliasedColumnName(mapping.column())
89-
+ " = (" //$NON-NLS-1$
90-
+ selectStatement.getSelectStatement()
91-
+ ")"; //$NON-NLS-1$
92-
93-
return FragmentAndParameters.withFragment(fragment)
94-
.withParameters(selectStatement.getParameters())
95-
.buildOptional();
86+
return Optional.of(mapping.selectModel().render(renderingContext)
87+
.mapFragment(f -> renderingContext.aliasedColumnName(mapping.column())
88+
+ " = (" + f + ")")); //$NON-NLS-1$ //$NON-NLS-2$
9689
}
9790

9891
@Override
9992
public Optional<FragmentAndParameters> visit(ColumnToColumnMapping mapping) {
100-
FragmentAndParameters renderedColumn = mapping.rightColumn().render(renderingContext);
101-
102-
String setPhrase = renderingContext.aliasedColumnName(mapping.column())
103-
+ " = " //$NON-NLS-1$
104-
+ renderedColumn.fragment();
105-
106-
return FragmentAndParameters.withFragment(setPhrase)
107-
.withParameters(renderedColumn.parameters())
108-
.buildOptional();
93+
return Optional.of(mapping.rightColumn().render(renderingContext)
94+
.mapFragment(f -> renderingContext.aliasedColumnName(mapping.column()) + " = " + f)); //$NON-NLS-1$
10995
}
11096

11197
private <T> Optional<FragmentAndParameters> buildValueFragment(AbstractColumnMapping mapping, T value) {

src/main/java/org/mybatis/dynamic/sql/where/render/CriterionRenderer.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.mybatis.dynamic.sql.SqlCriterion;
3131
import org.mybatis.dynamic.sql.SqlCriterionVisitor;
3232
import org.mybatis.dynamic.sql.render.RenderingContext;
33-
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
3433
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
3534
import org.mybatis.dynamic.sql.util.FragmentCollector;
3635

@@ -120,17 +119,8 @@ private <T> Optional<FragmentAndParameters> renderColumnAndCondition(ColumnAndCo
120119
private FragmentAndParameters renderExists(ExistsCriterion criterion) {
121120
ExistsPredicate existsPredicate = criterion.existsPredicate();
122121

123-
SelectStatementProvider selectStatement = existsPredicate.selectModelBuilder().build().render(renderingContext);
124-
125-
String fragment = existsPredicate.operator()
126-
+ " (" //$NON-NLS-1$
127-
+ selectStatement.getSelectStatement()
128-
+ ")"; //$NON-NLS-1$
129-
130-
return FragmentAndParameters
131-
.withFragment(fragment)
132-
.withParameters(selectStatement.getParameters())
133-
.build();
122+
return existsPredicate.selectModelBuilder().build().render(renderingContext)
123+
.mapFragment(f -> existsPredicate.operator() + " (" + f + ")"); //$NON-NLS-1$ //$NON-NLS-2$
134124
}
135125

136126
private List<RenderedCriterion> renderSubCriteria(List<AndOrCriteriaGroup> subCriteria) {

src/main/java/org/mybatis/dynamic/sql/where/render/DefaultConditionVisitor.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.mybatis.dynamic.sql.ConditionVisitor;
3131
import org.mybatis.dynamic.sql.render.RenderedParameterInfo;
3232
import org.mybatis.dynamic.sql.render.RenderingContext;
33-
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
3433
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
3534
import org.mybatis.dynamic.sql.util.FragmentCollector;
3635

@@ -95,16 +94,8 @@ public FragmentAndParameters visit(AbstractTwoValueCondition<T> condition) {
9594

9695
@Override
9796
public FragmentAndParameters visit(AbstractSubselectCondition<T> condition) {
98-
SelectStatementProvider selectStatement = condition.selectModel().render(renderingContext);
99-
100-
String finalFragment = condition.operator()
101-
+ " (" //$NON-NLS-1$
102-
+ selectStatement.getSelectStatement()
103-
+ ")"; //$NON-NLS-1$
104-
105-
return FragmentAndParameters.withFragment(finalFragment)
106-
.withParameters(selectStatement.getParameters())
107-
.build();
97+
return condition.selectModel().render(renderingContext)
98+
.mapFragment(f -> condition.operator() + " (" + f + ")"); //$NON-NLS-1$ //$NON-NLS-2$
10899
}
109100

110101
@Override

0 commit comments

Comments
 (0)