Skip to content

Commit dee0d3a

Browse files
authored
Merge pull request #436 from domaframework/case-when-expression
Support the case expression
2 parents 1abec92 + eaa72c6 commit dee0d3a

File tree

8 files changed

+457
-124
lines changed

8 files changed

+457
-124
lines changed

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/expression/AggregateFunction.java

Lines changed: 2 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,8 @@
11
package org.seasar.doma.jdbc.criteria.expression;
22

33
import java.util.Objects;
4-
import java.util.Optional;
5-
import java.util.function.BiFunction;
6-
import java.util.function.Function;
7-
import org.seasar.doma.internal.jdbc.scalar.BasicScalar;
8-
import org.seasar.doma.internal.jdbc.scalar.Scalar;
9-
import org.seasar.doma.internal.jdbc.sql.ScalarInParameter;
10-
import org.seasar.doma.jdbc.InParameter;
114
import org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel;
125
import org.seasar.doma.jdbc.entity.EntityPropertyType;
13-
import org.seasar.doma.jdbc.entity.NamingType;
14-
import org.seasar.doma.jdbc.entity.Property;
15-
import org.seasar.doma.wrapper.LongWrapper;
16-
import org.seasar.doma.wrapper.Wrapper;
176

187
public interface AggregateFunction<PROPERTY> extends PropertyMetamodel<PROPERTY> {
198
Asterisk Asterisk = new Asterisk();
@@ -81,7 +70,6 @@ public void accept(PropertyMetamodel.Visitor visitor) {
8170
}
8271

8372
class Count extends AbstractFunction<Long> {
84-
private final LongEntityPropertyType propertyType = new LongEntityPropertyType();
8573

8674
public final boolean distinct;
8775

@@ -101,7 +89,7 @@ public Class<?> asClass() {
10189

10290
@Override
10391
public EntityPropertyType<?, Long> asType() {
104-
return propertyType;
92+
return LongPropertyType.INSTANCE;
10593
}
10694

10795
@Override
@@ -158,7 +146,6 @@ public void accept(PropertyMetamodel.Visitor visitor) {
158146
}
159147

160148
class Asterisk implements PropertyMetamodel<Long> {
161-
private final LongEntityPropertyType propertyType = new LongEntityPropertyType();
162149

163150
private Asterisk() {}
164151

@@ -174,7 +161,7 @@ public Class<?> asClass() {
174161

175162
@Override
176163
public EntityPropertyType<?, ?> asType() {
177-
return propertyType;
164+
return LongPropertyType.INSTANCE;
178165
}
179166

180167
@Override
@@ -200,106 +187,3 @@ interface Visitor {
200187
void visit(AggregateFunction.Asterisk asterisk);
201188
}
202189
}
203-
204-
class LongEntityPropertyType implements EntityPropertyType<Object, Long> {
205-
@Override
206-
public String getName() {
207-
throw new UnsupportedOperationException();
208-
}
209-
210-
@Override
211-
public String getColumnName() {
212-
throw new UnsupportedOperationException();
213-
}
214-
215-
@Override
216-
public String getColumnName(Function<String, String> quoteFunction) {
217-
throw new UnsupportedOperationException();
218-
}
219-
220-
@Override
221-
public String getColumnName(BiFunction<NamingType, String, String> namingFunction) {
222-
throw new UnsupportedOperationException();
223-
}
224-
225-
@Override
226-
public String getColumnName(
227-
BiFunction<NamingType, String, String> namingFunction,
228-
Function<String, String> quoteFunction) {
229-
throw new UnsupportedOperationException();
230-
}
231-
232-
@Override
233-
public boolean isQuoteRequired() {
234-
return false;
235-
}
236-
237-
@Override
238-
public boolean isId() {
239-
return false;
240-
}
241-
242-
@Override
243-
public boolean isVersion() {
244-
return false;
245-
}
246-
247-
@Override
248-
public boolean isTenantId() {
249-
return false;
250-
}
251-
252-
@Override
253-
public boolean isInsertable() {
254-
return false;
255-
}
256-
257-
@Override
258-
public boolean isUpdatable() {
259-
return false;
260-
}
261-
262-
@Override
263-
public Property<Object, Long> createProperty() {
264-
return new LongProperty();
265-
}
266-
267-
@Override
268-
public void copy(Object dest, Object src) {
269-
throw new UnsupportedOperationException();
270-
}
271-
}
272-
273-
class LongProperty implements Property<Object, Long> {
274-
private final Scalar<Long, Long> scalar = new BasicScalar<>(LongWrapper::new);
275-
276-
@Override
277-
public Object get() {
278-
return scalar.get();
279-
}
280-
281-
@Override
282-
public Property<Object, Long> load(Object o) {
283-
throw new UnsupportedOperationException();
284-
}
285-
286-
@Override
287-
public Property<Object, Long> save(Object o) {
288-
throw new UnsupportedOperationException();
289-
}
290-
291-
@Override
292-
public InParameter<Long> asInParameter() {
293-
return new ScalarInParameter<>(scalar);
294-
}
295-
296-
@Override
297-
public Wrapper<Long> getWrapper() {
298-
return scalar.getWrapper();
299-
}
300-
301-
@Override
302-
public Optional<Class<?>> getDomainClass() {
303-
return scalar.getDomainClass();
304-
}
305-
}
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
package org.seasar.doma.jdbc.criteria.expression;
2+
3+
import java.util.Objects;
4+
import java.util.Optional;
5+
import java.util.function.BiFunction;
6+
import java.util.function.Function;
7+
import org.seasar.doma.internal.jdbc.scalar.BasicScalar;
8+
import org.seasar.doma.internal.jdbc.scalar.Scalar;
9+
import org.seasar.doma.internal.jdbc.sql.ScalarInParameter;
10+
import org.seasar.doma.jdbc.InParameter;
11+
import org.seasar.doma.jdbc.entity.EntityPropertyType;
12+
import org.seasar.doma.jdbc.entity.NamingType;
13+
import org.seasar.doma.jdbc.entity.Property;
14+
import org.seasar.doma.wrapper.IntegerWrapper;
15+
import org.seasar.doma.wrapper.LongWrapper;
16+
import org.seasar.doma.wrapper.StringWrapper;
17+
import org.seasar.doma.wrapper.Wrapper;
18+
19+
abstract class BasicPropertyType<BASIC> implements EntityPropertyType<Object, BASIC> {
20+
21+
@Override
22+
public String getName() {
23+
throw new UnsupportedOperationException();
24+
}
25+
26+
@Override
27+
public String getColumnName() {
28+
throw new UnsupportedOperationException();
29+
}
30+
31+
@Override
32+
public String getColumnName(Function<String, String> quoteFunction) {
33+
throw new UnsupportedOperationException();
34+
}
35+
36+
@Override
37+
public String getColumnName(BiFunction<NamingType, String, String> namingFunction) {
38+
throw new UnsupportedOperationException();
39+
}
40+
41+
@Override
42+
public String getColumnName(
43+
BiFunction<NamingType, String, String> namingFunction,
44+
Function<String, String> quoteFunction) {
45+
throw new UnsupportedOperationException();
46+
}
47+
48+
@Override
49+
public boolean isQuoteRequired() {
50+
return false;
51+
}
52+
53+
@Override
54+
public boolean isId() {
55+
return false;
56+
}
57+
58+
@Override
59+
public boolean isVersion() {
60+
return false;
61+
}
62+
63+
@Override
64+
public boolean isTenantId() {
65+
return false;
66+
}
67+
68+
@Override
69+
public boolean isInsertable() {
70+
return false;
71+
}
72+
73+
@Override
74+
public boolean isUpdatable() {
75+
return false;
76+
}
77+
78+
@Override
79+
public void copy(Object dest, Object src) {
80+
throw new UnsupportedOperationException();
81+
}
82+
}
83+
84+
abstract class BasicProperty<BASIC> implements Property<Object, BASIC> {
85+
private final Scalar<BASIC, BASIC> scalar;
86+
87+
protected BasicProperty(Scalar<BASIC, BASIC> scalar) {
88+
this.scalar = Objects.requireNonNull(scalar);
89+
}
90+
91+
@Override
92+
public Object get() {
93+
return scalar.get();
94+
}
95+
96+
@Override
97+
public Property<Object, BASIC> load(Object o) {
98+
throw new UnsupportedOperationException();
99+
}
100+
101+
@Override
102+
public Property<Object, BASIC> save(Object o) {
103+
throw new UnsupportedOperationException();
104+
}
105+
106+
@Override
107+
public InParameter<BASIC> asInParameter() {
108+
return new ScalarInParameter<>(scalar);
109+
}
110+
111+
@Override
112+
public Wrapper<BASIC> getWrapper() {
113+
return scalar.getWrapper();
114+
}
115+
116+
@Override
117+
public Optional<Class<?>> getDomainClass() {
118+
return scalar.getDomainClass();
119+
}
120+
}
121+
122+
class StringPropertyType extends BasicPropertyType<String> {
123+
124+
static final StringPropertyType INSTANCE = new StringPropertyType();
125+
126+
@Override
127+
public Property<Object, String> createProperty() {
128+
return new StringProperty();
129+
}
130+
131+
static class StringProperty extends BasicProperty<String> {
132+
133+
protected StringProperty() {
134+
super(new BasicScalar<>(new StringWrapper()));
135+
}
136+
}
137+
}
138+
139+
class IntegerPropertyType extends BasicPropertyType<Integer> {
140+
141+
static final IntegerPropertyType INSTANCE = new IntegerPropertyType();
142+
143+
@Override
144+
public Property<Object, Integer> createProperty() {
145+
return new IntegerProperty();
146+
}
147+
148+
static class IntegerProperty extends BasicProperty<Integer> {
149+
150+
protected IntegerProperty() {
151+
super(new BasicScalar<>(new IntegerWrapper()));
152+
}
153+
}
154+
}
155+
156+
class LongPropertyType extends BasicPropertyType<Long> {
157+
158+
static final LongPropertyType INSTANCE = new LongPropertyType();
159+
160+
@Override
161+
public Property<Object, Long> createProperty() {
162+
return new LongProperty();
163+
}
164+
165+
static class LongProperty extends BasicProperty<Long> {
166+
167+
protected LongProperty() {
168+
super(new BasicScalar<>(new LongWrapper()));
169+
}
170+
}
171+
}

0 commit comments

Comments
 (0)