Skip to content

Commit aefb115

Browse files
committed
Consolidate the Se;ectDSL functions into a reusable interface
1 parent e59d1a1 commit aefb115

File tree

2 files changed

+106
-77
lines changed

2 files changed

+106
-77
lines changed

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

Lines changed: 27 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444

4545
public class QueryExpressionDSL<R>
4646
extends AbstractQueryExpressionDSL<QueryExpressionDSL<R>.QueryExpressionWhereBuilder, QueryExpressionDSL<R>>
47-
implements Buildable<R>, PagingDSL<R> {
47+
implements Buildable<R>, SelectDSLOperations<R> {
4848

4949
private final @Nullable String connector;
5050
private final SelectDSL<R> selectDSL;
@@ -196,23 +196,13 @@ protected QueryExpressionModel buildModel() {
196196
}
197197

198198
@Override
199-
public PagingDSL.LimitFinisher<R> limitWhenPresent(@Nullable Long limit) {
200-
return selectDSL.limitWhenPresent(limit);
201-
}
202-
203-
@Override
204-
public PagingDSL.OffsetFirstFinisher<R> offsetWhenPresent(@Nullable Long offset) {
205-
return selectDSL.offsetWhenPresent(offset);
206-
}
207-
208-
@Override
209-
public PagingDSL.FetchFirstFinisher<R> fetchFirstWhenPresent(@Nullable Long fetchFirstRows) {
210-
return selectDSL.fetchFirstWhenPresent(fetchFirstRows);
199+
protected QueryExpressionDSL<R> getThis() {
200+
return this;
211201
}
212202

213203
@Override
214-
protected QueryExpressionDSL<R> getThis() {
215-
return this;
204+
public SelectDSL<R> getSelectDSL() {
205+
return selectDSL;
216206
}
217207

218208
public static class FromGatherer<R> {
@@ -277,7 +267,7 @@ public FromGatherer<R> build() {
277267
}
278268

279269
public class QueryExpressionWhereBuilder extends AbstractWhereFinisher<QueryExpressionWhereBuilder>
280-
implements Buildable<R>, PagingDSL<R> {
270+
implements Buildable<R>, SelectDSLOperations<R> {
281271
private QueryExpressionWhereBuilder() {
282272
super(QueryExpressionDSL.this);
283273
}
@@ -306,21 +296,6 @@ public GroupByFinisher groupBy(Collection<? extends BasicColumn> columns) {
306296
return QueryExpressionDSL.this.groupBy(columns);
307297
}
308298

309-
@Override
310-
public PagingDSL.LimitFinisher<R> limitWhenPresent(@Nullable Long limit) {
311-
return QueryExpressionDSL.this.limitWhenPresent(limit);
312-
}
313-
314-
@Override
315-
public PagingDSL.OffsetFirstFinisher<R> offsetWhenPresent(@Nullable Long offset) {
316-
return QueryExpressionDSL.this.offsetWhenPresent(offset);
317-
}
318-
319-
@Override
320-
public PagingDSL.FetchFirstFinisher<R> fetchFirstWhenPresent(@Nullable Long fetchFirstRows) {
321-
return QueryExpressionDSL.this.fetchFirstWhenPresent(fetchFirstRows);
322-
}
323-
324299
@Override
325300
public R build() {
326301
return QueryExpressionDSL.this.build();
@@ -331,6 +306,11 @@ protected QueryExpressionWhereBuilder getThis() {
331306
return this;
332307
}
333308

309+
@Override
310+
public SelectDSL<R> getSelectDSL() {
311+
return QueryExpressionDSL.this.getSelectDSL();
312+
}
313+
334314
protected EmbeddedWhereModel buildWhereModel() {
335315
return super.buildModel();
336316
}
@@ -358,7 +338,7 @@ public <T> JoinSpecificationFinisher on(BindableColumn<T> joinColumn, VisitableC
358338
public class JoinSpecificationFinisher
359339
extends AbstractBooleanExpressionDSL<JoinSpecificationFinisher>
360340
implements AbstractWhereStarter<QueryExpressionWhereBuilder, JoinSpecificationFinisher>, Buildable<R>,
361-
PagingDSL<R> {
341+
SelectDSLOperations<R> {
362342

363343
private final TableExpression table;
364344
private final JoinType joinType;
@@ -487,28 +467,18 @@ public SelectDSL<R> orderBy(Collection<? extends SortSpecification> columns) {
487467
}
488468

489469
@Override
490-
public PagingDSL.LimitFinisher<R> limitWhenPresent(@Nullable Long limit) {
491-
return QueryExpressionDSL.this.limitWhenPresent(limit);
492-
}
493-
494-
@Override
495-
public PagingDSL.OffsetFirstFinisher<R> offsetWhenPresent(@Nullable Long offset) {
496-
return QueryExpressionDSL.this.offsetWhenPresent(offset);
497-
}
498-
499-
@Override
500-
public PagingDSL.FetchFirstFinisher<R> fetchFirstWhenPresent(@Nullable Long fetchFirstRows) {
501-
return QueryExpressionDSL.this.fetchFirstWhenPresent(fetchFirstRows);
470+
protected JoinSpecificationFinisher getThis() {
471+
return this;
502472
}
503473

504474
@Override
505-
protected JoinSpecificationFinisher getThis() {
506-
return this;
475+
public SelectDSL<R> getSelectDSL() {
476+
return QueryExpressionDSL.this.getSelectDSL();
507477
}
508478
}
509479

510480
public class GroupByFinisher extends AbstractHavingStarter<QueryExpressionHavingBuilder>
511-
implements Buildable<R>, PagingDSL<R> {
481+
implements Buildable<R>, SelectDSLOperations<R> {
512482
public SelectDSL<R> orderBy(SortSpecification... columns) {
513483
return orderBy(Arrays.asList(columns));
514484
}
@@ -531,23 +501,13 @@ public UnionBuilder unionAll() {
531501
}
532502

533503
@Override
534-
public PagingDSL.LimitFinisher<R> limitWhenPresent(@Nullable Long limit) {
535-
return QueryExpressionDSL.this.limitWhenPresent(limit);
536-
}
537-
538-
@Override
539-
public PagingDSL.OffsetFirstFinisher<R> offsetWhenPresent(@Nullable Long offset) {
540-
return QueryExpressionDSL.this.offsetWhenPresent(offset);
504+
public QueryExpressionHavingBuilder having() {
505+
return QueryExpressionDSL.this.having();
541506
}
542507

543508
@Override
544-
public PagingDSL.FetchFirstFinisher<R> fetchFirstWhenPresent(@Nullable Long fetchFirstRows) {
545-
return QueryExpressionDSL.this.fetchFirstWhenPresent(fetchFirstRows);
546-
}
547-
548-
@Override
549-
public QueryExpressionHavingBuilder having() {
550-
return QueryExpressionDSL.this.having();
509+
public SelectDSL<R> getSelectDSL() {
510+
return QueryExpressionDSL.this.getSelectDSL();
551511
}
552512
}
553513

@@ -585,22 +545,7 @@ public FromGatherer<R> selectDistinct(List<BasicColumn> selectList) {
585545
}
586546

587547
public class QueryExpressionHavingBuilder extends AbstractHavingFinisher<QueryExpressionHavingBuilder>
588-
implements Buildable<R>, PagingDSL<R> {
589-
590-
@Override
591-
public PagingDSL.LimitFinisher<R> limitWhenPresent(@Nullable Long limit) {
592-
return QueryExpressionDSL.this.limitWhenPresent(limit);
593-
}
594-
595-
@Override
596-
public PagingDSL.OffsetFirstFinisher<R> offsetWhenPresent(@Nullable Long offset) {
597-
return QueryExpressionDSL.this.offsetWhenPresent(offset);
598-
}
599-
600-
@Override
601-
public PagingDSL.FetchFirstFinisher<R> fetchFirstWhenPresent(@Nullable Long fetchFirstRows) {
602-
return QueryExpressionDSL.this.fetchFirstWhenPresent(fetchFirstRows);
603-
}
548+
implements Buildable<R>, SelectDSLOperations<R> {
604549

605550
public SelectDSL<R> orderBy(SortSpecification... columns) {
606551
return orderBy(Arrays.asList(columns));
@@ -631,5 +576,10 @@ protected QueryExpressionHavingBuilder getThis() {
631576
protected HavingModel buildHavingModel() {
632577
return super.buildModel();
633578
}
579+
580+
@Override
581+
public SelectDSL<R> getSelectDSL() {
582+
return QueryExpressionDSL.this.getSelectDSL();
583+
}
634584
}
635585
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*
2+
* Copyright 2016-2025 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.mybatis.dynamic.sql.select;
17+
18+
import org.jspecify.annotations.Nullable;
19+
20+
public interface SelectDSLOperations<R> {
21+
default PagingDSL.LimitFinisher<R> limit(long limit) {
22+
return getSelectDSL().limit(limit);
23+
}
24+
25+
default PagingDSL.LimitFinisher<R> limitWhenPresent(@Nullable Long limit) {
26+
return getSelectDSL().limitWhenPresent(limit);
27+
}
28+
29+
default PagingDSL.OffsetFirstFinisher<R> offset(long offset) {
30+
return getSelectDSL().offset(offset);
31+
}
32+
33+
default PagingDSL.OffsetFirstFinisher<R> offsetWhenPresent(@Nullable Long offset) {
34+
return getSelectDSL().offsetWhenPresent(offset);
35+
}
36+
37+
default PagingDSL.FetchFirstFinisher<R> fetchFirst(long fetchFirstRows) {
38+
return getSelectDSL().fetchFirst(fetchFirstRows);
39+
}
40+
41+
default PagingDSL.FetchFirstFinisher<R> fetchFirstWhenPresent(@Nullable Long fetchFirstRows) {
42+
return getSelectDSL().fetchFirstWhenPresent(fetchFirstRows);
43+
}
44+
45+
default SelectDSL<R> forUpdate() {
46+
return getSelectDSL().forUpdate();
47+
}
48+
49+
default SelectDSL<R> forNoKeyUpdate() {
50+
return getSelectDSL().forNoKeyUpdate();
51+
}
52+
53+
default SelectDSL<R> forShare() {
54+
return getSelectDSL().forShare();
55+
}
56+
57+
default SelectDSL<R> forKeyShare() {
58+
return getSelectDSL().forKeyShare();
59+
}
60+
61+
default SelectDSL<R> skipLocked() {
62+
return getSelectDSL().skipLocked();
63+
}
64+
65+
default SelectDSL<R> nowait() {
66+
return getSelectDSL().nowait();
67+
}
68+
69+
/**
70+
* Gain access to the SelectDSL instance.
71+
*
72+
* <p>This is a leak of an implementation detail into the public API. The tradeoff is that it
73+
* significantly reduces copy/paste code of SelectDSL methods into all the different inner classes of
74+
* QueryExpressionDSL where they would be needed.
75+
*
76+
* @return the SelectDSL instance associated with this interface instance
77+
*/
78+
SelectDSL<R> getSelectDSL();
79+
}

0 commit comments

Comments
 (0)