Skip to content

Commit 4f94e55

Browse files
committed
Refactor where support
Where and Having are very similar so the code should be similar also.
1 parent 010d7d6 commit 4f94e55

21 files changed

+319
-270
lines changed

src/main/java/org/mybatis/dynamic/sql/SqlBuilder.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -240,21 +240,21 @@ static UpdateDSL<UpdateModel> update(SqlTable table, String tableAlias) {
240240
return UpdateDSL.update(table, tableAlias);
241241
}
242242

243-
static WhereDSL where() {
244-
return WhereDSL.where();
243+
static WhereDSL.WhereFinisher where() {
244+
return new WhereDSL().where();
245245
}
246246

247-
static <T> WhereDSL where(BindableColumn<T> column, VisitableCondition<T> condition,
247+
static <T> WhereDSL.WhereFinisher where(BindableColumn<T> column, VisitableCondition<T> condition,
248248
AndOrCriteriaGroup... subCriteria) {
249-
return WhereDSL.where().where(column, condition, subCriteria);
249+
return new WhereDSL().where(column, condition, subCriteria);
250250
}
251251

252-
static WhereDSL where(SqlCriterion initialCriterion, AndOrCriteriaGroup... subCriteria) {
253-
return WhereDSL.where().where(initialCriterion, subCriteria);
252+
static WhereDSL.WhereFinisher where(SqlCriterion initialCriterion, AndOrCriteriaGroup... subCriteria) {
253+
return new WhereDSL().where(initialCriterion, subCriteria);
254254
}
255255

256-
static WhereDSL where(ExistsPredicate existsPredicate, AndOrCriteriaGroup... subCriteria) {
257-
return WhereDSL.where().where(existsPredicate, subCriteria);
256+
static WhereDSL.WhereFinisher where(ExistsPredicate existsPredicate, AndOrCriteriaGroup... subCriteria) {
257+
return new WhereDSL().where(existsPredicate, subCriteria);
258258
}
259259

260260
// where condition connectors

src/main/java/org/mybatis/dynamic/sql/delete/DeleteDSL.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
import org.mybatis.dynamic.sql.common.OrderByModel;
2828
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2929
import org.mybatis.dynamic.sql.util.Buildable;
30-
import org.mybatis.dynamic.sql.where.AbstractWhereDSL;
31-
import org.mybatis.dynamic.sql.where.AbstractWhereSupport;
30+
import org.mybatis.dynamic.sql.where.AbstractWhereFinisher;
31+
import org.mybatis.dynamic.sql.where.AbstractWhereStarter;
3232
import org.mybatis.dynamic.sql.where.WhereModel;
3333

34-
public class DeleteDSL<R> extends AbstractWhereSupport<DeleteDSL<R>.DeleteWhereBuilder, DeleteDSL<R>>
34+
public class DeleteDSL<R> extends AbstractWhereStarter<DeleteDSL<R>.DeleteWhereBuilder, DeleteDSL<R>>
3535
implements Buildable<R> {
3636

3737
private final Function<DeleteModel, R> adapterFunction;
@@ -109,7 +109,7 @@ public static DeleteDSL<DeleteModel> deleteFrom(SqlTable table, String tableAlia
109109
return deleteFrom(Function.identity(), table, tableAlias);
110110
}
111111

112-
public class DeleteWhereBuilder extends AbstractWhereDSL<DeleteWhereBuilder> implements Buildable<R> {
112+
public class DeleteWhereBuilder extends AbstractWhereFinisher<DeleteWhereBuilder> implements Buildable<R> {
113113

114114
private DeleteWhereBuilder() {
115115
super(statementConfiguration);
@@ -140,7 +140,7 @@ protected DeleteWhereBuilder getThis() {
140140
}
141141

142142
protected WhereModel buildWhereModel() {
143-
return internalBuild();
143+
return buildModel();
144144
}
145145
}
146146
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,8 @@ public abstract class AbstractHavingFinisher<T extends AbstractHavingFinisher<T>
2222
void initialize(SqlCriterion sqlCriterion) {
2323
setInitialCriterion(sqlCriterion, "ERROR.31"); //$NON-NLS-1$
2424
}
25+
26+
protected HavingModel buildModel() {
27+
return new HavingModel(getInitialCriterion(), subCriteria);
28+
}
2529
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public <T> F having(BindableColumn<T> column, VisitableCondition<T> condition,
3939
.withSubCriteria(subCriteria)
4040
.build();
4141

42-
F finisher = getFinisher();
42+
F finisher = having();
4343
finisher.initialize(ic);
4444
return finisher;
4545
}
@@ -54,16 +54,16 @@ public F having(SqlCriterion initialCriterion, List<AndOrCriteriaGroup> subCrite
5454
.withSubCriteria(subCriteria)
5555
.build();
5656

57-
F finisher = getFinisher();
57+
F finisher = having();
5858
finisher.initialize(ic);
5959
return finisher;
6060
}
6161

6262
public F applyHaving(HavingApplier havingApplier) {
63-
F finisher = getFinisher();
63+
F finisher = having();
6464
havingApplier.accept(finisher);
6565
return finisher;
6666
}
6767

68-
protected abstract F getFinisher();
68+
protected abstract F having();
6969
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@
3333
import org.mybatis.dynamic.sql.select.join.JoinSpecification;
3434
import org.mybatis.dynamic.sql.select.join.JoinType;
3535
import org.mybatis.dynamic.sql.util.Buildable;
36-
import org.mybatis.dynamic.sql.where.AbstractWhereDSL;
37-
import org.mybatis.dynamic.sql.where.AbstractWhereSupport;
36+
import org.mybatis.dynamic.sql.where.AbstractWhereFinisher;
37+
import org.mybatis.dynamic.sql.where.AbstractWhereStarter;
3838

39-
public abstract class AbstractQueryExpressionDSL<W extends AbstractWhereDSL<?>,
39+
public abstract class AbstractQueryExpressionDSL<W extends AbstractWhereFinisher<?>,
4040
T extends AbstractQueryExpressionDSL<W, T>>
41-
extends AbstractWhereSupport<W, T> {
41+
extends AbstractWhereStarter<W, T> {
4242

4343
private final List<JoinSpecification.Builder> joinSpecificationBuilders = new ArrayList<>();
4444
private final Map<SqlTable, String> tableAliases = new HashMap<>();

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import org.mybatis.dynamic.sql.SqlTable;
2626
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2727
import org.mybatis.dynamic.sql.util.Buildable;
28-
import org.mybatis.dynamic.sql.where.AbstractWhereDSL;
28+
import org.mybatis.dynamic.sql.where.AbstractWhereFinisher;
2929
import org.mybatis.dynamic.sql.where.WhereModel;
3030

3131
/**
@@ -131,7 +131,7 @@ public CountDSL<R> from(SqlTable table) {
131131
}
132132
}
133133

134-
public class CountWhereBuilder extends AbstractWhereDSL<CountWhereBuilder>
134+
public class CountWhereBuilder extends AbstractWhereFinisher<CountWhereBuilder>
135135
implements Buildable<R> {
136136
private CountWhereBuilder() {
137137
super(statementConfiguration);
@@ -149,7 +149,7 @@ protected CountWhereBuilder getThis() {
149149
}
150150

151151
protected WhereModel buildWhereModel() {
152-
return internalBuild();
152+
return buildModel();
153153
}
154154
}
155155
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
@FunctionalInterface
3131
public interface HavingApplier {
3232

33-
void accept(AbstractBooleanExpressionDSL<?> havingStarter);
33+
void accept(AbstractHavingFinisher<?> havingFinisher);
3434

3535
/**
3636
* Return a composed having applier that performs this operation followed by the after operation.
@@ -53,12 +53,12 @@ static <T> HavingApplier having(BindableColumn<T> column, VisitableCondition<T>
5353

5454
static <T> HavingApplier having(BindableColumn<T> column, VisitableCondition<T> condition,
5555
List<AndOrCriteriaGroup> subCriteria) {
56-
ColumnAndConditionCriterion<T> initialCriterion = ColumnAndConditionCriterion.withColumn(column)
56+
ColumnAndConditionCriterion<T> ic = ColumnAndConditionCriterion.withColumn(column)
5757
.withCondition(condition)
5858
.withSubCriteria(subCriteria)
5959
.build();
6060

61-
return d -> d.and(initialCriterion);
61+
return d -> d.initialize(ic);
6262
}
6363

6464
static HavingApplier having(SqlCriterion initialCriterion, AndOrCriteriaGroup... subCriteria) {
@@ -71,6 +71,6 @@ static HavingApplier having(SqlCriterion initialCriterion, List<AndOrCriteriaGro
7171
.withSubCriteria(subCriteria)
7272
.build();
7373

74-
return d -> d.and(ic);
74+
return d -> d.initialize(ic);
7575
}
7676
}

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@
3434
import org.mybatis.dynamic.sql.select.join.JoinSpecification;
3535
import org.mybatis.dynamic.sql.select.join.JoinType;
3636
import org.mybatis.dynamic.sql.util.Buildable;
37-
import org.mybatis.dynamic.sql.where.AbstractWhereDSL;
38-
import org.mybatis.dynamic.sql.where.AbstractWhereSupport;
37+
import org.mybatis.dynamic.sql.where.AbstractWhereFinisher;
38+
import org.mybatis.dynamic.sql.where.AbstractWhereStarter;
3939
import org.mybatis.dynamic.sql.where.WhereModel;
4040

4141
public class QueryExpressionDSL<R>
@@ -79,6 +79,11 @@ public QueryExpressionDSL<R> configureStatement(Consumer<StatementConfiguration>
7979
return this;
8080
}
8181

82+
/**
83+
* This method is protected here because it doesn't make sense at this point in the DSL.
84+
*
85+
* @return The having builder
86+
*/
8287
protected QueryExpressionHavingBuilder having() {
8388
if (havingBuilder == null) {
8489
havingBuilder = new QueryExpressionHavingBuilder();
@@ -277,7 +282,7 @@ public FromGatherer<R> build() {
277282
}
278283
}
279284

280-
public class QueryExpressionWhereBuilder extends AbstractWhereDSL<QueryExpressionWhereBuilder>
285+
public class QueryExpressionWhereBuilder extends AbstractWhereFinisher<QueryExpressionWhereBuilder>
281286
implements Buildable<R> {
282287
private QueryExpressionWhereBuilder() {
283288
super(statementConfiguration);
@@ -331,7 +336,7 @@ protected QueryExpressionWhereBuilder getThis() {
331336
}
332337

333338
protected WhereModel buildWhereModel() {
334-
return internalBuild();
339+
return buildModel();
335340
}
336341
}
337342

@@ -355,7 +360,7 @@ public JoinSpecificationFinisher on(BasicColumn joinColumn, JoinCondition onJoin
355360
}
356361

357362
public class JoinSpecificationFinisher
358-
extends AbstractWhereSupport<QueryExpressionWhereBuilder, JoinSpecificationFinisher>
363+
extends AbstractWhereStarter<QueryExpressionWhereBuilder, JoinSpecificationFinisher>
359364
implements Buildable<R> {
360365
private final JoinSpecification.Builder joinSpecificationBuilder;
361366

@@ -538,7 +543,7 @@ public SelectDSL<R>.FetchFirstFinisher fetchFirst(long fetchFirstRows) {
538543
}
539544

540545
@Override
541-
public QueryExpressionHavingBuilder getFinisher() {
546+
public QueryExpressionHavingBuilder having() {
542547
return QueryExpressionDSL.this.having();
543548
}
544549
}
@@ -619,7 +624,7 @@ protected QueryExpressionHavingBuilder getThis() {
619624
}
620625

621626
protected HavingModel buildHavingModel() {
622-
return new HavingModel(getInitialCriterion(), subCriteria);
627+
return buildModel();
623628
}
624629
}
625630
}

src/main/java/org/mybatis/dynamic/sql/update/UpdateDSL.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@
4242
import org.mybatis.dynamic.sql.util.ValueMapping;
4343
import org.mybatis.dynamic.sql.util.ValueOrNullMapping;
4444
import org.mybatis.dynamic.sql.util.ValueWhenPresentMapping;
45-
import org.mybatis.dynamic.sql.where.AbstractWhereDSL;
46-
import org.mybatis.dynamic.sql.where.AbstractWhereSupport;
45+
import org.mybatis.dynamic.sql.where.AbstractWhereFinisher;
46+
import org.mybatis.dynamic.sql.where.AbstractWhereStarter;
4747
import org.mybatis.dynamic.sql.where.WhereModel;
4848

49-
public class UpdateDSL<R> extends AbstractWhereSupport<UpdateDSL<R>.UpdateWhereBuilder, UpdateDSL<R>>
49+
public class UpdateDSL<R> extends AbstractWhereStarter<UpdateDSL<R>.UpdateWhereBuilder, UpdateDSL<R>>
5050
implements Buildable<R> {
5151

5252
private final Function<UpdateModel, R> adapterFunction;
@@ -192,7 +192,7 @@ public UpdateDSL<R> equalToWhenPresent(Supplier<T> valueSupplier) {
192192
}
193193
}
194194

195-
public class UpdateWhereBuilder extends AbstractWhereDSL<UpdateWhereBuilder> implements Buildable<R> {
195+
public class UpdateWhereBuilder extends AbstractWhereFinisher<UpdateWhereBuilder> implements Buildable<R> {
196196

197197
private UpdateWhereBuilder() {
198198
super(statementConfiguration);
@@ -223,7 +223,7 @@ protected UpdateWhereBuilder getThis() {
223223
}
224224

225225
protected WhereModel buildWhereModel() {
226-
return internalBuild();
226+
return buildModel();
227227
}
228228
}
229229
}

src/main/java/org/mybatis/dynamic/sql/where/AbstractWhereDSL.java

Lines changed: 0 additions & 112 deletions
This file was deleted.

0 commit comments

Comments
 (0)