Skip to content

Commit 2674ee4

Browse files
committed
Use consistent build pattern
1 parent 13157a5 commit 2674ee4

File tree

4 files changed

+34
-35
lines changed

4 files changed

+34
-35
lines changed

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

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Arrays;
2020
import java.util.Collection;
2121
import java.util.List;
22+
import java.util.Optional;
2223

2324
import org.jetbrains.annotations.NotNull;
2425
import org.mybatis.dynamic.sql.SortSpecification;
@@ -74,24 +75,20 @@ public FetchFirstFinisher fetchFirst(long fetchFirstRows) {
7475
@NotNull
7576
@Override
7677
public MultiSelectModel build() {
77-
MultiSelectModel.Builder builder = new MultiSelectModel.Builder()
78+
return new MultiSelectModel.Builder()
7879
.withInitialSelect(initialSelect)
7980
.withUnionQueries(unionQueries)
80-
.withOrderByModel(orderByModel);
81-
82-
addPagingModel(builder);
83-
return builder.build();
81+
.withOrderByModel(orderByModel)
82+
.withPagingModel(buildPagingModel().orElse(null))
83+
.build();
8484
}
8585

86-
private void addPagingModel(MultiSelectModel.Builder builder) {
87-
if (limit != null || offset != null || fetchFirstRows != null) {
88-
// add paging model if any values set
89-
builder.withPagingModel(new PagingModel.Builder()
90-
.withLimit(limit)
91-
.withOffset(offset)
92-
.withFetchFirstRows(fetchFirstRows)
93-
.build());
94-
}
86+
private Optional<PagingModel> buildPagingModel() {
87+
return new PagingModel.Builder()
88+
.withLimit(limit)
89+
.withOffset(offset)
90+
.withFetchFirstRows(fetchFirstRows)
91+
.build();
9592
}
9693

9794
public class LimitFinisher implements Buildable<MultiSelectModel> {

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,12 @@ public Builder withFetchFirstRows(Long fetchFirstRows) {
6262
return this;
6363
}
6464

65-
public PagingModel build() {
66-
return new PagingModel(this);
65+
public Optional<PagingModel> build() {
66+
if (limit == null && offset == null && fetchFirstRows == null) {
67+
return Optional.empty();
68+
}
69+
70+
return Optional.of(new PagingModel(this));
6771
}
6872
}
6973
}

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

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Collection;
2121
import java.util.List;
2222
import java.util.Objects;
23+
import java.util.Optional;
2324
import java.util.function.Consumer;
2425
import java.util.function.Function;
2526
import java.util.stream.Collectors;
@@ -130,10 +131,11 @@ public SelectDSL<R> configureStatement(Consumer<StatementConfiguration> consumer
130131
@NotNull
131132
@Override
132133
public R build() {
133-
SelectModel.Builder builder = SelectModel.withQueryExpressions(buildModels())
134-
.withOrderByModel(orderByModel);
135-
addPagingModel(builder);
136-
return adapterFunction.apply(builder.build());
134+
SelectModel selectModel = SelectModel.withQueryExpressions(buildModels())
135+
.withOrderByModel(orderByModel)
136+
.withPagingModel(buildPagingModel().orElse(null))
137+
.build();
138+
return adapterFunction.apply(selectModel);
137139
}
138140

139141
private List<QueryExpressionModel> buildModels() {
@@ -142,15 +144,12 @@ private List<QueryExpressionModel> buildModels() {
142144
.collect(Collectors.toList());
143145
}
144146

145-
private void addPagingModel(SelectModel.Builder builder) {
146-
if (limit != null || offset != null || fetchFirstRows != null) {
147-
// add paging model if any values set
148-
builder.withPagingModel(new PagingModel.Builder()
149-
.withLimit(limit)
150-
.withOffset(offset)
151-
.withFetchFirstRows(fetchFirstRows)
152-
.build());
153-
}
147+
private Optional<PagingModel> buildPagingModel() {
148+
return new PagingModel.Builder()
149+
.withLimit(limit)
150+
.withOffset(offset)
151+
.withFetchFirstRows(fetchFirstRows)
152+
.build();
154153
}
155154

156155
public class LimitFinisher implements Buildable<R> {

src/test/java/org/mybatis/dynamic/sql/InvalidSQLTest.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
import org.mybatis.dynamic.sql.select.join.JoinModel;
4848
import org.mybatis.dynamic.sql.select.join.JoinSpecification;
4949
import org.mybatis.dynamic.sql.select.join.JoinType;
50-
import org.mybatis.dynamic.sql.select.render.PagingModelRenderer;
50+
import org.mybatis.dynamic.sql.select.render.FetchFirstPagingModelRenderer;
5151
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
5252
import org.mybatis.dynamic.sql.update.UpdateModel;
5353
import org.mybatis.dynamic.sql.util.InternalError;
@@ -238,16 +238,15 @@ void testMissingMessage() {
238238

239239
@Test
240240
void testInvalidPagingModel() {
241-
PagingModel pagingModel = new PagingModel.Builder().build();
241+
Optional<PagingModel> pagingModel = new PagingModel.Builder().withLimit(22L).build();
242242

243243
RenderingContext renderingContext = RenderingContext
244244
.withRenderingStrategy(RenderingStrategies.MYBATIS3)
245245
.build();
246246

247-
PagingModelRenderer renderer = new PagingModelRenderer.Builder()
248-
.withPagingModel(pagingModel)
249-
.withRenderingContext(renderingContext)
250-
.build();
247+
assertThat(pagingModel).isPresent();
248+
249+
FetchFirstPagingModelRenderer renderer = new FetchFirstPagingModelRenderer(renderingContext, pagingModel.get());
251250

252251
assertThatExceptionOfType(InvalidSqlException.class)
253252
.isThrownBy(renderer::render)

0 commit comments

Comments
 (0)