Skip to content

Commit 2efc81a

Browse files
committed
Initial refactor of where support
Factor common where methods out of the DSL classes. THis will allow for an easier implementation of future where support such as "exists".
1 parent 1239bce commit 2efc81a

File tree

7 files changed

+55
-63
lines changed

7 files changed

+55
-63
lines changed

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

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,13 @@
1919
import java.util.function.Function;
2020

2121
import org.jetbrains.annotations.NotNull;
22-
import org.mybatis.dynamic.sql.BindableColumn;
23-
import org.mybatis.dynamic.sql.SqlCriterion;
2422
import org.mybatis.dynamic.sql.SqlTable;
25-
import org.mybatis.dynamic.sql.VisitableCondition;
2623
import org.mybatis.dynamic.sql.util.Buildable;
2724
import org.mybatis.dynamic.sql.where.AbstractWhereDSL;
28-
import org.mybatis.dynamic.sql.where.WhereApplier;
25+
import org.mybatis.dynamic.sql.where.AbstractWhereSupportingDSL;
2926
import org.mybatis.dynamic.sql.where.WhereModel;
3027

31-
public class DeleteDSL<R> implements Buildable<R> {
28+
public class DeleteDSL<R> extends AbstractWhereSupportingDSL<DeleteDSL<R>.DeleteWhereBuilder> implements Buildable<R> {
3229

3330
private final Function<DeleteModel, R> adapterFunction;
3431
private final SqlTable table;
@@ -39,20 +36,11 @@ private DeleteDSL(SqlTable table, Function<DeleteModel, R> adapterFunction) {
3936
this.adapterFunction = Objects.requireNonNull(adapterFunction);
4037
}
4138

42-
public DeleteWhereBuilder where() {
43-
return whereBuilder;
44-
}
45-
46-
public <T> DeleteWhereBuilder where(BindableColumn<T> column, VisitableCondition<T> condition,
47-
SqlCriterion<?>...subCriteria) {
48-
whereBuilder.where(column, condition, subCriteria);
39+
@Override
40+
protected DeleteWhereBuilder whereDsl() {
4941
return whereBuilder;
5042
}
5143

52-
public DeleteWhereBuilder applyWhere(WhereApplier whereApplier) {
53-
return whereBuilder.applyWhere(whereApplier);
54-
}
55-
5644
/**
5745
* WARNING! Calling this method could result in an delete statement that deletes
5846
* all rows in a table.

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,11 @@
3131
import org.mybatis.dynamic.sql.select.join.JoinSpecification;
3232
import org.mybatis.dynamic.sql.select.join.JoinType;
3333
import org.mybatis.dynamic.sql.util.Buildable;
34+
import org.mybatis.dynamic.sql.where.AbstractWhereDSL;
35+
import org.mybatis.dynamic.sql.where.AbstractWhereSupportingDSL;
3436

35-
public abstract class AbstractQueryExpressionDSL<T extends AbstractQueryExpressionDSL<T, R>, R>
37+
public abstract class AbstractQueryExpressionDSL<W extends AbstractWhereDSL<?>, T extends AbstractQueryExpressionDSL<W, T, R>, R>
38+
extends AbstractWhereSupportingDSL<W>
3639
implements Buildable<R> {
3740

3841
private final List<JoinSpecification.Builder> joinSpecificationBuilders = new ArrayList<>();

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

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,10 @@
2020

2121
import org.jetbrains.annotations.NotNull;
2222
import org.mybatis.dynamic.sql.BasicColumn;
23-
import org.mybatis.dynamic.sql.BindableColumn;
2423
import org.mybatis.dynamic.sql.SqlBuilder;
25-
import org.mybatis.dynamic.sql.SqlCriterion;
2624
import org.mybatis.dynamic.sql.SqlTable;
27-
import org.mybatis.dynamic.sql.VisitableCondition;
2825
import org.mybatis.dynamic.sql.util.Buildable;
2926
import org.mybatis.dynamic.sql.where.AbstractWhereDSL;
30-
import org.mybatis.dynamic.sql.where.WhereApplier;
3127
import org.mybatis.dynamic.sql.where.WhereModel;
3228

3329
/**
@@ -39,7 +35,7 @@
3935
*
4036
* @author Jeff Butler
4137
*/
42-
public class CountDSL<R> extends AbstractQueryExpressionDSL<CountDSL<R>, R> implements Buildable<R> {
38+
public class CountDSL<R> extends AbstractQueryExpressionDSL<CountDSL<R>.CountWhereBuilder, CountDSL<R>, R> implements Buildable<R> {
4339

4440
private final Function<SelectModel, R> adapterFunction;
4541
private final CountWhereBuilder whereBuilder = new CountWhereBuilder();
@@ -51,20 +47,11 @@ private CountDSL(BasicColumn countColumn, SqlTable table, Function<SelectModel,
5147
this.adapterFunction = Objects.requireNonNull(adapterFunction);
5248
}
5349

54-
public CountWhereBuilder where() {
55-
return whereBuilder;
56-
}
57-
58-
public <T> CountWhereBuilder where(BindableColumn<T> column, VisitableCondition<T> condition,
59-
SqlCriterion<?>...subCriteria) {
60-
whereBuilder.where(column, condition, subCriteria);
50+
@Override
51+
protected CountWhereBuilder whereDsl() {
6152
return whereBuilder;
6253
}
6354

64-
public CountWhereBuilder applyWhere(WhereApplier whereApplier) {
65-
return whereBuilder.applyWhere(whereApplier);
66-
}
67-
6855
@NotNull
6956
@Override
7057
public R build() {

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

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import org.mybatis.dynamic.sql.where.WhereApplier;
3939
import org.mybatis.dynamic.sql.where.WhereModel;
4040

41-
public class QueryExpressionDSL<R> extends AbstractQueryExpressionDSL<QueryExpressionDSL<R>, R>
41+
public class QueryExpressionDSL<R> extends AbstractQueryExpressionDSL<QueryExpressionDSL<R>.QueryExpressionWhereBuilder, QueryExpressionDSL<R>, R>
4242
implements Buildable<R> {
4343

4444
private final String connector;
@@ -61,20 +61,11 @@ public class QueryExpressionDSL<R> extends AbstractQueryExpressionDSL<QueryExpre
6161
tableAliases.put(table, tableAlias);
6262
}
6363

64-
public QueryExpressionWhereBuilder where() {
65-
return whereBuilder;
66-
}
67-
68-
public <T> QueryExpressionWhereBuilder where(BindableColumn<T> column, VisitableCondition<T> condition,
69-
SqlCriterion<?>...subCriteria) {
70-
whereBuilder.where(column, condition, subCriteria);
64+
@Override
65+
protected QueryExpressionWhereBuilder whereDsl() {
7166
return whereBuilder;
7267
}
7368

74-
public QueryExpressionWhereBuilder applyWhere(WhereApplier whereApplier) {
75-
return whereBuilder.applyWhere(whereApplier);
76-
}
77-
7869
@NotNull
7970
@Override
8071
public R build() {

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

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,8 @@
2323

2424
import org.jetbrains.annotations.NotNull;
2525
import org.mybatis.dynamic.sql.BasicColumn;
26-
import org.mybatis.dynamic.sql.BindableColumn;
2726
import org.mybatis.dynamic.sql.SqlColumn;
28-
import org.mybatis.dynamic.sql.SqlCriterion;
2927
import org.mybatis.dynamic.sql.SqlTable;
30-
import org.mybatis.dynamic.sql.VisitableCondition;
3128
import org.mybatis.dynamic.sql.select.SelectModel;
3229
import org.mybatis.dynamic.sql.util.AbstractColumnMapping;
3330
import org.mybatis.dynamic.sql.util.Buildable;
@@ -39,10 +36,10 @@
3936
import org.mybatis.dynamic.sql.util.ValueMapping;
4037
import org.mybatis.dynamic.sql.util.ValueWhenPresentMapping;
4138
import org.mybatis.dynamic.sql.where.AbstractWhereDSL;
42-
import org.mybatis.dynamic.sql.where.WhereApplier;
39+
import org.mybatis.dynamic.sql.where.AbstractWhereSupportingDSL;
4340
import org.mybatis.dynamic.sql.where.WhereModel;
4441

45-
public class UpdateDSL<R> implements Buildable<R> {
42+
public class UpdateDSL<R> extends AbstractWhereSupportingDSL<UpdateDSL<R>.UpdateWhereBuilder> implements Buildable<R> {
4643

4744
private final Function<UpdateModel, R> adapterFunction;
4845
private final List<AbstractColumnMapping> columnMappings = new ArrayList<>();
@@ -58,20 +55,11 @@ public <T> SetClauseFinisher<T> set(SqlColumn<T> column) {
5855
return new SetClauseFinisher<>(column);
5956
}
6057

61-
public UpdateWhereBuilder where() {
62-
return whereBuilder;
63-
}
64-
65-
public <T> UpdateWhereBuilder where(BindableColumn<T> column, VisitableCondition<T> condition,
66-
SqlCriterion<?>...subCriteria) {
67-
whereBuilder.where(column, condition, subCriteria);
58+
@Override
59+
protected UpdateWhereBuilder whereDsl() {
6860
return whereBuilder;
6961
}
7062

71-
public UpdateWhereBuilder applyWhere(WhereApplier whereApplier) {
72-
return whereBuilder.applyWhere(whereApplier);
73-
}
74-
7563
/**
7664
* WARNING! Calling this method could result in an update statement that updates
7765
* all rows in a table.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.mybatis.dynamic.sql.where;
2+
3+
import org.mybatis.dynamic.sql.BindableColumn;
4+
import org.mybatis.dynamic.sql.SqlCriterion;
5+
import org.mybatis.dynamic.sql.VisitableCondition;
6+
7+
import java.util.function.Consumer;
8+
9+
/**
10+
* Base class for DSLs that support where clauses.
11+
*
12+
* @param <W> the implementation of the Where DSL.
13+
*/
14+
public abstract class AbstractWhereSupportingDSL<W extends AbstractWhereDSL<?>> {
15+
16+
public W where() {
17+
return whereDsl();
18+
}
19+
20+
public <T> W where(BindableColumn<T> column, VisitableCondition<T> condition, SqlCriterion<?>...subCriteria) {
21+
return apply(w -> w.where(column, condition, subCriteria));
22+
}
23+
24+
public W applyWhere(WhereApplier whereApplier) {
25+
return apply(w -> w.applyWhere(whereApplier));
26+
}
27+
28+
private W apply(Consumer<W> block) {
29+
W dsl = whereDsl();
30+
block.accept(dsl);
31+
return dsl;
32+
}
33+
34+
protected abstract W whereDsl();
35+
}

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/KotlinBaseBuilders.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ abstract class KotlinBaseBuilder<W : AbstractWhereDSL<W>, B : KotlinBaseBuilder<
7777
}
7878

7979
@Suppress("TooManyFunctions")
80-
abstract class KotlinBaseJoiningBuilder<T : AbstractQueryExpressionDSL<T, SelectModel>, W : AbstractWhereDSL<W>,
80+
abstract class KotlinBaseJoiningBuilder<T : AbstractQueryExpressionDSL<W, T, SelectModel>, W : AbstractWhereDSL<W>,
8181
B : KotlinBaseJoiningBuilder<T, W, B>> : KotlinBaseBuilder<W, B>() {
8282

8383
fun join(table: SqlTable, joinCriteria: JoinReceiver) =
@@ -161,5 +161,5 @@ abstract class KotlinBaseJoiningBuilder<T : AbstractQueryExpressionDSL<T, Select
161161
JoinCollector().apply(joinCriteria).apply(block)
162162
}
163163

164-
protected abstract fun getDsl(): AbstractQueryExpressionDSL<T, SelectModel>
164+
protected abstract fun getDsl(): AbstractQueryExpressionDSL<W, T, SelectModel>
165165
}

0 commit comments

Comments
 (0)