Skip to content

Commit 99703ff

Browse files
committed
Implement standalone having
1 parent 392cf02 commit 99703ff

File tree

5 files changed

+79
-39
lines changed

5 files changed

+79
-39
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.mybatis.dynamic.sql.insert.MultiRowInsertDSL;
3131
import org.mybatis.dynamic.sql.select.ColumnSortSpecification;
3232
import org.mybatis.dynamic.sql.select.CountDSL;
33+
import org.mybatis.dynamic.sql.select.HavingDSL;
3334
import org.mybatis.dynamic.sql.select.MultiSelectDSL;
3435
import org.mybatis.dynamic.sql.select.QueryExpressionDSL.FromGatherer;
3536
import org.mybatis.dynamic.sql.select.SelectDSL;
@@ -257,6 +258,15 @@ static WhereDSL.StandaloneWhereFinisher where(ExistsPredicate existsPredicate, A
257258
return new WhereDSL().where(existsPredicate, subCriteria);
258259
}
259260

261+
static <T> HavingDSL.StandaloneHavingFinisher having(BindableColumn<T> column, VisitableCondition<T> condition,
262+
AndOrCriteriaGroup... subCriteria) {
263+
return new HavingDSL().having(column, condition, subCriteria);
264+
}
265+
266+
static HavingDSL.StandaloneHavingFinisher having(SqlCriterion initialCriterion, AndOrCriteriaGroup... subCriteria) {
267+
return new HavingDSL().having(initialCriterion, subCriteria);
268+
}
269+
260270
// where condition connectors
261271
static <T> CriteriaGroup group(BindableColumn<T> column, VisitableCondition<T> condition,
262272
AndOrCriteriaGroup... subCriteria) {

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

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,8 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select;
1717

18-
import java.util.Arrays;
19-
import java.util.List;
2018
import java.util.function.Consumer;
2119

22-
import org.mybatis.dynamic.sql.AndOrCriteriaGroup;
23-
import org.mybatis.dynamic.sql.BindableColumn;
24-
import org.mybatis.dynamic.sql.ColumnAndConditionCriterion;
25-
import org.mybatis.dynamic.sql.CriteriaGroup;
26-
import org.mybatis.dynamic.sql.SqlCriterion;
27-
import org.mybatis.dynamic.sql.VisitableCondition;
2820
import org.mybatis.dynamic.sql.common.AbstractBooleanExpressionDSL;
2921

3022
@FunctionalInterface
@@ -45,32 +37,4 @@ default HavingApplier andThen(Consumer<AbstractBooleanExpressionDSL<?>> after) {
4537
after.accept(t);
4638
};
4739
}
48-
49-
static <T> HavingApplier having(BindableColumn<T> column, VisitableCondition<T> condition,
50-
AndOrCriteriaGroup... subCriteria) {
51-
return having(column, condition, Arrays.asList(subCriteria));
52-
}
53-
54-
static <T> HavingApplier having(BindableColumn<T> column, VisitableCondition<T> condition,
55-
List<AndOrCriteriaGroup> subCriteria) {
56-
ColumnAndConditionCriterion<T> ic = ColumnAndConditionCriterion.withColumn(column)
57-
.withCondition(condition)
58-
.withSubCriteria(subCriteria)
59-
.build();
60-
61-
return d -> d.initialize(ic);
62-
}
63-
64-
static HavingApplier having(SqlCriterion initialCriterion, AndOrCriteriaGroup... subCriteria) {
65-
return having(initialCriterion, Arrays.asList(subCriteria));
66-
}
67-
68-
static HavingApplier having(SqlCriterion initialCriterion, List<AndOrCriteriaGroup> subCriteria) {
69-
CriteriaGroup ic = new CriteriaGroup.Builder()
70-
.withInitialCriterion(initialCriterion)
71-
.withSubCriteria(subCriteria)
72-
.build();
73-
74-
return d -> d.initialize(ic);
75-
}
7640
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
* Copyright 2016-2023 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.jetbrains.annotations.NotNull;
19+
import org.mybatis.dynamic.sql.CriteriaGroup;
20+
import org.mybatis.dynamic.sql.util.Buildable;
21+
22+
public class HavingDSL extends AbstractHavingStarter <HavingDSL.StandaloneHavingFinisher>
23+
implements Buildable<HavingModel> {
24+
private StandaloneHavingFinisher havingFinisher;
25+
26+
@Override
27+
protected StandaloneHavingFinisher having() {
28+
if (havingFinisher == null) {
29+
havingFinisher = new StandaloneHavingFinisher();
30+
}
31+
32+
return havingFinisher;
33+
}
34+
35+
@NotNull
36+
@Override
37+
public HavingModel build() {
38+
return havingFinisher.buildModel();
39+
}
40+
41+
public class StandaloneHavingFinisher extends AbstractHavingFinisher<StandaloneHavingFinisher>
42+
implements Buildable<HavingModel> {
43+
44+
@Override
45+
protected StandaloneHavingFinisher getThis() {
46+
return this;
47+
}
48+
49+
@NotNull
50+
@Override
51+
public HavingModel build() {
52+
return HavingDSL.this.build();
53+
}
54+
55+
public HavingApplier toHavingApplier() {
56+
CriteriaGroup ic = new CriteriaGroup.Builder()
57+
.withInitialCriterion(getInitialCriterion())
58+
.withSubCriteria(subCriteria)
59+
.build();
60+
61+
return d -> d.initialize(ic);
62+
}
63+
}
64+
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2323
import org.mybatis.dynamic.sql.util.Buildable;
2424

25-
public class WhereDSL extends AbstractWhereStarter<WhereDSL.StandaloneWhereFinisher, WhereDSL> implements Buildable<WhereModel> {
25+
public class WhereDSL extends AbstractWhereStarter<WhereDSL.StandaloneWhereFinisher, WhereDSL>
26+
implements Buildable<WhereModel> {
2627
private StandaloneWhereFinisher whereBuilder;
2728
private final StatementConfiguration statementConfiguration = new StatementConfiguration();
2829

@@ -48,7 +49,8 @@ public WhereDSL configureStatement(Consumer<StatementConfiguration> consumer) {
4849
return this;
4950
}
5051

51-
public class StandaloneWhereFinisher extends AbstractWhereFinisher<StandaloneWhereFinisher> implements Buildable<WhereModel> {
52+
public class StandaloneWhereFinisher extends AbstractWhereFinisher<StandaloneWhereFinisher>
53+
implements Buildable<WhereModel> {
5254
private StandaloneWhereFinisher() {
5355
super(statementConfiguration);
5456
}

src/test/java/examples/groupby/GroupByTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -712,5 +712,5 @@ void testComposedHaving() {
712712
}
713713
}
714714

715-
private final HavingApplier commonHaving = HavingApplier.having(count(), isEqualTo(3L));
715+
private final HavingApplier commonHaving = having(count(), isEqualTo(3L)).toHavingApplier();
716716
}

0 commit comments

Comments
 (0)