1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.select.caseexpression;
17
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.List;
21
22 import org.jspecify.annotations.Nullable;
23 import org.mybatis.dynamic.sql.AndOrCriteriaGroup;
24 import org.mybatis.dynamic.sql.BasicColumn;
25 import org.mybatis.dynamic.sql.BindableColumn;
26 import org.mybatis.dynamic.sql.ColumnAndConditionCriterion;
27 import org.mybatis.dynamic.sql.CriteriaGroup;
28 import org.mybatis.dynamic.sql.RenderableCondition;
29 import org.mybatis.dynamic.sql.SqlCriterion;
30 import org.mybatis.dynamic.sql.common.AbstractBooleanExpressionDSL;
31
32 public class SearchedCaseDSL implements ElseDSL<SearchedCaseDSL.SearchedCaseEnder> {
33 private final List<SearchedCaseWhenCondition> whenConditions = new ArrayList<>();
34 private @Nullable BasicColumn elseValue;
35
36 public <T> WhenDSL when(BindableColumn<T> column, RenderableCondition<T> condition,
37 AndOrCriteriaGroup... subCriteria) {
38 return when(column, condition, Arrays.asList(subCriteria));
39 }
40
41 public <T> WhenDSL when(BindableColumn<T> column, RenderableCondition<T> condition,
42 List<AndOrCriteriaGroup> subCriteria) {
43 SqlCriterion sqlCriterion = ColumnAndConditionCriterion.withColumn(column)
44 .withCondition(condition)
45 .withSubCriteria(subCriteria)
46 .build();
47
48 return initialize(sqlCriterion);
49 }
50
51 public WhenDSL when(SqlCriterion initialCriterion, AndOrCriteriaGroup... subCriteria) {
52 return when(initialCriterion, Arrays.asList(subCriteria));
53 }
54
55 public WhenDSL when(SqlCriterion initialCriterion, List<AndOrCriteriaGroup> subCriteria) {
56 SqlCriterion sqlCriterion = new CriteriaGroup.Builder()
57 .withInitialCriterion(initialCriterion)
58 .withSubCriteria(subCriteria)
59 .build();
60
61 return initialize(sqlCriterion);
62 }
63
64 private WhenDSL initialize(SqlCriterion sqlCriterion) {
65 return new WhenDSL(sqlCriterion);
66 }
67
68 @SuppressWarnings("java:S100")
69 @Override
70 public SearchedCaseEnder else_(BasicColumn column) {
71 elseValue = column;
72 return new SearchedCaseEnder();
73 }
74
75 public SearchedCaseModel end() {
76 return new SearchedCaseModel.Builder()
77 .withElseValue(elseValue)
78 .withWhenConditions(whenConditions)
79 .build();
80 }
81
82 public class WhenDSL extends AbstractBooleanExpressionDSL<WhenDSL> implements ThenDSL<SearchedCaseDSL> {
83 private WhenDSL(SqlCriterion sqlCriterion) {
84 setInitialCriterion(sqlCriterion);
85 }
86
87 @Override
88 public SearchedCaseDSL then(BasicColumn column) {
89 whenConditions.add(new SearchedCaseWhenCondition.Builder()
90 .withInitialCriterion(getInitialCriterion())
91 .withSubCriteria(subCriteria)
92 .withThenValue(column)
93 .build());
94 return SearchedCaseDSL.this;
95 }
96
97 @Override
98 protected WhenDSL getThis() {
99 return this;
100 }
101 }
102
103 public class SearchedCaseEnder {
104 public SearchedCaseModel end() {
105 return SearchedCaseDSL.this.end();
106 }
107 }
108
109 public static SearchedCaseDSL searchedCase() {
110 return new SearchedCaseDSL();
111 }
112 }