Skip to content

Commit d3efd1e

Browse files
committed
Initial support for not criteria group
1 parent 60872ac commit d3efd1e

File tree

8 files changed

+308
-65
lines changed

8 files changed

+308
-65
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* Copyright 2016-2022 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+
* http://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;
17+
18+
import java.util.Objects;
19+
20+
/**
21+
* This class represents a criteria group with a NOT.
22+
*
23+
* @author Jeff Butler
24+
* @since 1.4.0
25+
*/
26+
public class NotCriterion extends SqlCriterion {
27+
private final SqlCriterion initialCriterion;
28+
29+
private NotCriterion(Builder builder) {
30+
super(builder);
31+
initialCriterion = Objects.requireNonNull(builder.initialCriterion);
32+
}
33+
34+
public SqlCriterion initialCriterion() {
35+
return initialCriterion;
36+
}
37+
38+
@Override
39+
public <R> R accept(SqlCriterionVisitor<R> visitor) {
40+
return visitor.visit(this);
41+
}
42+
43+
public static class Builder extends AbstractBuilder<Builder> {
44+
private SqlCriterion initialCriterion;
45+
46+
public Builder withInitialCriterion(SqlCriterion initialCriterion) {
47+
this.initialCriterion = initialCriterion;
48+
return this;
49+
}
50+
51+
public NotCriterion build() {
52+
return new NotCriterion(this);
53+
}
54+
55+
@Override
56+
protected Builder getThis() {
57+
return this;
58+
}
59+
}
60+
}

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,43 @@ static CriteriaGroup group(CriteriaGroup criteriaGroup, List<AndOrCriteriaGroup>
265265
.build();
266266
}
267267

268+
static <T> NotCriterion not(BindableColumn<T> column, VisitableCondition<T> condition,
269+
AndOrCriteriaGroup...subCriteria) {
270+
return not(column, condition, Arrays.asList(subCriteria));
271+
}
272+
273+
static <T> NotCriterion not(BindableColumn<T> column, VisitableCondition<T> condition,
274+
List<AndOrCriteriaGroup> subCriteria) {
275+
return new NotCriterion.Builder()
276+
.withInitialCriterion(new ColumnAndConditionCriterion.Builder<T>().withColumn(column)
277+
.withCondition(condition).build())
278+
.withSubCriteria(subCriteria)
279+
.build();
280+
}
281+
282+
static NotCriterion not(ExistsPredicate existsPredicate, AndOrCriteriaGroup...subCriteria) {
283+
return not(existsPredicate, Arrays.asList(subCriteria));
284+
}
285+
286+
static NotCriterion not(ExistsPredicate existsPredicate, List<AndOrCriteriaGroup> subCriteria) {
287+
return new NotCriterion.Builder()
288+
.withInitialCriterion(new ExistsCriterion.Builder()
289+
.withExistsPredicate(existsPredicate).build())
290+
.withSubCriteria(subCriteria)
291+
.build();
292+
}
293+
294+
static NotCriterion not(CriteriaGroup criteriaGroup, AndOrCriteriaGroup...subCriteria) {
295+
return not(criteriaGroup, Arrays.asList(subCriteria));
296+
}
297+
298+
static NotCriterion not(CriteriaGroup criteriaGroup, List<AndOrCriteriaGroup> subCriteria) {
299+
return new NotCriterion.Builder()
300+
.withInitialCriterion(criteriaGroup)
301+
.withSubCriteria(subCriteria)
302+
.build();
303+
}
304+
268305
static <T> AndOrCriteriaGroup or(BindableColumn<T> column, VisitableCondition<T> condition,
269306
AndOrCriteriaGroup...subCriteria) {
270307
return new AndOrCriteriaGroup.Builder()

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@ public interface SqlCriterionVisitor<R> {
2121
R visit(ExistsCriterion criterion);
2222

2323
R visit(CriteriaGroup criterion);
24+
25+
R visit(NotCriterion criterion);
2426
}

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

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,13 @@ public T where(ExistsPredicate existsPredicate, List<AndOrCriteriaGroup> subCrit
5858
}
5959

6060
@NotNull
61-
public T where(CriteriaGroup criterion, AndOrCriteriaGroup...subCriteria) {
62-
return where(criterion, Arrays.asList(subCriteria));
61+
public T where(SqlCriterion initialCriterion, AndOrCriteriaGroup...subCriteria) {
62+
return where(initialCriterion, Arrays.asList(subCriteria));
6363
}
6464

6565
@NotNull
66-
public T where(CriteriaGroup criterion, List<AndOrCriteriaGroup> subCriteria) {
67-
initialCriterion = buildCriterion(criterion, subCriteria);
66+
public T where(SqlCriterion initialCriterion, List<AndOrCriteriaGroup> subCriteria) {
67+
this.initialCriterion = buildCriterion(initialCriterion, subCriteria);
6868
return getThis();
6969
}
7070

@@ -83,7 +83,7 @@ public <S> T and(BindableColumn<S> column, VisitableCondition<S> condition,
8383
@NotNull
8484
public <S> T and(BindableColumn<S> column, VisitableCondition<S> condition,
8585
List<AndOrCriteriaGroup> subCriteria) {
86-
addCriteriaGroup("and", buildCriterion(column, condition), subCriteria);
86+
addSubCriteria("and", buildCriterion(column, condition), subCriteria);
8787
return getThis();
8888
}
8989

@@ -94,18 +94,18 @@ public T and(ExistsPredicate existsPredicate, AndOrCriteriaGroup...subCriteria)
9494

9595
@NotNull
9696
public T and(ExistsPredicate existsPredicate, List<AndOrCriteriaGroup> subCriteria) {
97-
addCriteriaGroup("and", buildCriterion(existsPredicate), subCriteria);
97+
addSubCriteria("and", buildCriterion(existsPredicate), subCriteria);
9898
return getThis();
9999
}
100100

101101
@NotNull
102-
public T and(CriteriaGroup criteriaGroup, AndOrCriteriaGroup...subCriteria) {
103-
return and(criteriaGroup, Arrays.asList(subCriteria));
102+
public T and(SqlCriterion initialCriterion, AndOrCriteriaGroup...subCriteria) {
103+
return and(initialCriterion, Arrays.asList(subCriteria));
104104
}
105105

106106
@NotNull
107-
public T and(CriteriaGroup criteriaGroup, List<AndOrCriteriaGroup> subCriteria) {
108-
addCriteriaGroup("and", buildCriterion(criteriaGroup), subCriteria);
107+
public T and(SqlCriterion initialCriterion, List<AndOrCriteriaGroup> subCriteria) {
108+
addSubCriteria("and", buildCriterion(initialCriterion), subCriteria);
109109
return getThis();
110110
}
111111

@@ -118,7 +118,7 @@ public <S> T or(BindableColumn<S> column, VisitableCondition<S> condition,
118118
@NotNull
119119
public <S> T or(BindableColumn<S> column, VisitableCondition<S> condition,
120120
List<AndOrCriteriaGroup> subCriteria) {
121-
addCriteriaGroup("or", buildCriterion(column, condition), subCriteria);
121+
addSubCriteria("or", buildCriterion(column, condition), subCriteria);
122122
return getThis();
123123
}
124124

@@ -129,57 +129,56 @@ public T or(ExistsPredicate existsPredicate, AndOrCriteriaGroup...subCriteria) {
129129

130130
@NotNull
131131
public T or(ExistsPredicate existsPredicate, List<AndOrCriteriaGroup> subCriteria) {
132-
addCriteriaGroup("or", buildCriterion(existsPredicate), subCriteria);
132+
addSubCriteria("or", buildCriterion(existsPredicate), subCriteria);
133133
return getThis();
134134
}
135135

136136
@NotNull
137-
public T or(CriteriaGroup criteriaGroup, AndOrCriteriaGroup...subCriteria) {
138-
return or(criteriaGroup, Arrays.asList(subCriteria));
137+
public T or(SqlCriterion initialCriterion, AndOrCriteriaGroup...subCriteria) {
138+
return or(initialCriterion, Arrays.asList(subCriteria));
139139
}
140140

141141
@NotNull
142-
public T or(CriteriaGroup criteriaGroup, List<AndOrCriteriaGroup> subCriteria) {
143-
addCriteriaGroup("or", buildCriterion(criteriaGroup), subCriteria);
142+
public T or(SqlCriterion initialCriterion, List<AndOrCriteriaGroup> subCriteria) {
143+
addSubCriteria("or", buildCriterion(initialCriterion), subCriteria);
144144
return getThis();
145145
}
146146

147147
protected WhereModel internalBuild() {
148148
return new WhereModel(initialCriterion, subCriteria);
149149
}
150150

151-
private <R> ColumnAndConditionCriterion<R> buildCriterion(BindableColumn<R> column,
152-
VisitableCondition<R> condition) {
151+
private <R> SqlCriterion buildCriterion(BindableColumn<R> column, VisitableCondition<R> condition) {
153152
return ColumnAndConditionCriterion.withColumn(column).withCondition(condition).build();
154153
}
155154

156-
private <R> ColumnAndConditionCriterion<R> buildCriterion(BindableColumn<R> column, VisitableCondition<R> condition,
157-
List<AndOrCriteriaGroup> subCriteria) {
155+
private <R> SqlCriterion buildCriterion(BindableColumn<R> column, VisitableCondition<R> condition,
156+
List<AndOrCriteriaGroup> subCriteria) {
158157
return ColumnAndConditionCriterion.withColumn(column)
159158
.withCondition(condition)
160159
.withSubCriteria(subCriteria)
161160
.build();
162161
}
163162

164-
private ExistsCriterion buildCriterion(ExistsPredicate existsPredicate) {
163+
private SqlCriterion buildCriterion(ExistsPredicate existsPredicate) {
165164
return new ExistsCriterion.Builder().withExistsPredicate(existsPredicate).build();
166165
}
167166

168-
private ExistsCriterion buildCriterion(ExistsPredicate existsPredicate,
169-
List<AndOrCriteriaGroup> subCriteria) {
167+
private SqlCriterion buildCriterion(ExistsPredicate existsPredicate,
168+
List<AndOrCriteriaGroup> subCriteria) {
170169
return new ExistsCriterion.Builder().withExistsPredicate(existsPredicate).withSubCriteria(subCriteria).build();
171170
}
172171

173-
private CriteriaGroup buildCriterion(CriteriaGroup criteriaGroup) {
174-
return new CriteriaGroup.Builder().withInitialCriterion(criteriaGroup).build();
172+
private SqlCriterion buildCriterion(SqlCriterion initialCriterion) {
173+
return new CriteriaGroup.Builder().withInitialCriterion(initialCriterion).build();
175174
}
176175

177-
private CriteriaGroup buildCriterion(CriteriaGroup criteriaGroup, List<AndOrCriteriaGroup> subCriteria) {
178-
return new CriteriaGroup.Builder().withInitialCriterion(criteriaGroup).withSubCriteria(subCriteria).build();
176+
private SqlCriterion buildCriterion(SqlCriterion initialCriterion, List<AndOrCriteriaGroup> subCriteria) {
177+
return new CriteriaGroup.Builder().withInitialCriterion(initialCriterion).withSubCriteria(subCriteria).build();
179178
}
180179

181-
private void addCriteriaGroup(String connector, SqlCriterion initialCriterion,
182-
List<AndOrCriteriaGroup> subCriteria) {
180+
private void addSubCriteria(String connector, SqlCriterion initialCriterion,
181+
List<AndOrCriteriaGroup> subCriteria) {
183182
this.subCriteria.add(new AndOrCriteriaGroup.Builder()
184183
.withInitialCriterion(initialCriterion)
185184
.withConnector(connector)

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121

2222
import org.mybatis.dynamic.sql.AndOrCriteriaGroup;
2323
import org.mybatis.dynamic.sql.BindableColumn;
24-
import org.mybatis.dynamic.sql.CriteriaGroup;
2524
import org.mybatis.dynamic.sql.ExistsPredicate;
25+
import org.mybatis.dynamic.sql.SqlCriterion;
2626
import org.mybatis.dynamic.sql.VisitableCondition;
2727

2828
/**
@@ -54,12 +54,12 @@ public W where(ExistsPredicate existsPredicate, List<AndOrCriteriaGroup> subCrit
5454
return apply(w -> w.where(existsPredicate, subCriteria));
5555
}
5656

57-
public W where(CriteriaGroup criterion, AndOrCriteriaGroup...subCriteria) {
58-
return where(criterion, Arrays.asList(subCriteria));
57+
public W where(SqlCriterion initialCriterion, AndOrCriteriaGroup...subCriteria) {
58+
return where(initialCriterion, Arrays.asList(subCriteria));
5959
}
6060

61-
public W where(CriteriaGroup criterion, List<AndOrCriteriaGroup> subCriteria) {
62-
return apply(w -> w.where(criterion, subCriteria));
61+
public W where(SqlCriterion initialCriterion, List<AndOrCriteriaGroup> subCriteria) {
62+
return apply(w -> w.where(initialCriterion, subCriteria));
6363
}
6464

6565
public W applyWhere(WhereApplier whereApplier) {

0 commit comments

Comments
 (0)