21
21
import java .util .List ;
22
22
import java .util .Map ;
23
23
import java .util .Objects ;
24
+ import java .util .Optional ;
24
25
import java .util .function .Supplier ;
25
26
26
27
import org .mybatis .dynamic .sql .BasicColumn ;
@@ -195,29 +196,37 @@ public static class FromGatherer<R> {
195
196
private SelectDSL <R > selectDSL ;
196
197
private boolean isDistinct ;
197
198
private SqlTable table ;
199
+ private Optional <QueryExpressionDSL <R >> priorQuery ;
198
200
199
201
public FromGatherer (Builder <R > builder ) {
200
202
this .connector = builder .connector ;
201
203
this .selectList = Objects .requireNonNull (builder .selectList );
202
204
this .selectDSL = Objects .requireNonNull (builder .selectDSL );
203
205
this .isDistinct = builder .isDistinct ;
206
+ this .priorQuery = Optional .ofNullable (builder .priorQuery );
204
207
}
205
208
206
209
public QueryExpressionDSL <R > from (SqlTable table ) {
207
210
this .table = table ;
208
- return new QueryExpressionDSL <>(this );
211
+ return setPriorBuildDelegate ( new QueryExpressionDSL <>(this ) );
209
212
}
210
213
211
214
public QueryExpressionDSL <R > from (SqlTable table , String tableAlias ) {
212
215
this .table = table ;
213
- return new QueryExpressionDSL <>(this , tableAlias );
216
+ return setPriorBuildDelegate (new QueryExpressionDSL <>(this , tableAlias ));
217
+ }
218
+
219
+ private QueryExpressionDSL <R > setPriorBuildDelegate (QueryExpressionDSL <R > newQuery ) {
220
+ priorQuery .ifPresent (pq -> pq .buildDelegateMethod = newQuery ::build );
221
+ return newQuery ;
214
222
}
215
223
216
224
public static class Builder <R > {
217
225
private String connector ;
218
226
private BasicColumn [] selectList ;
219
227
private SelectDSL <R > selectDSL ;
220
228
private boolean isDistinct ;
229
+ private QueryExpressionDSL <R > priorQuery ;
221
230
222
231
public Builder <R > withConnector (String connector ) {
223
232
this .connector = connector ;
@@ -239,6 +248,11 @@ public Builder<R> isDistinct() {
239
248
return this ;
240
249
}
241
250
251
+ public Builder <R > withPriorQuery (QueryExpressionDSL <R > priorQuery ) {
252
+ this .priorQuery = priorQuery ;
253
+ return this ;
254
+ }
255
+
242
256
public FromGatherer <R > build () {
243
257
return new FromGatherer <>(this );
244
258
}
@@ -535,6 +549,7 @@ public FromGatherer<R> select(BasicColumn...selectList) {
535
549
.withConnector (connector )
536
550
.withSelectList (selectList )
537
551
.withSelectDSL (selectDSL )
552
+ .withPriorQuery (QueryExpressionDSL .this )
538
553
.build ();
539
554
}
540
555
@@ -544,6 +559,7 @@ public FromGatherer<R> selectDistinct(BasicColumn...selectList) {
544
559
.withSelectList (selectList )
545
560
.withSelectDSL (selectDSL )
546
561
.isDistinct ()
562
+ .withPriorQuery (QueryExpressionDSL .this )
547
563
.build ();
548
564
}
549
565
}
0 commit comments