Skip to content

Commit e114cf9

Browse files
committed
Improve option classes (+4 squashed commits)
Squashed commits: [74c7f2e55] Improve the LikeOption class [b34ec830e] Improve the AssociationOption class [167b92794] Improve the DistinctOption class [220cc3b28] Improve the ForUpdateOption class
1 parent 334927a commit e114cf9

22 files changed

+789
-136
lines changed

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/context/SelectContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@
1818
public class SelectContext implements Context {
1919
public final EntityMetamodel<?> entityMetamodel;
2020
public Projection projection = Projection.All;
21-
public DistinctOption distinct = DistinctOption.DISABLED;
21+
public DistinctOption distinct = DistinctOption.none();
2222
public final List<Join> joins = new ArrayList<>();
2323
public List<Criterion> where = new ArrayList<>();
2424
public final List<PropertyMetamodel<?>> groupBy = new ArrayList<>();
2525
public List<Criterion> having = new ArrayList<>();
2626
public final List<Pair<OrderByItem, String>> orderBy = new ArrayList<>();
2727
public Integer limit;
2828
public Integer offset;
29-
public ForUpdate forUpdate = new ForUpdate(ForUpdateOption.DISABLED);
29+
public ForUpdate forUpdate = new ForUpdate(ForUpdateOption.none());
3030
public final Map<Pair<EntityMetamodel<?>, EntityMetamodel<?>>, BiConsumer<Object, Object>>
3131
associations = new LinkedHashMap<>();
3232
public final SelectSettings settings = new SelectSettings();

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/declaration/SelectFromDeclaration.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,19 +109,19 @@ public <ENTITY1, ENTITY2> void associate(
109109
EntityMetamodel<ENTITY1> first,
110110
EntityMetamodel<ENTITY2> second,
111111
BiConsumer<ENTITY1, ENTITY2> associator,
112-
AssociationOption kind) {
112+
AssociationOption option) {
113113
Objects.requireNonNull(first);
114114
Objects.requireNonNull(second);
115115
Objects.requireNonNull(associator);
116-
Objects.requireNonNull(kind);
116+
Objects.requireNonNull(option);
117117
if (!context.getEntityMetamodels().contains(first)) {
118-
if (kind == AssociationOption.MANDATORY) {
118+
if (option == AssociationOption.Kind.MANDATORY) {
119119
throw new DomaException(Message.DOMA6001, "first");
120120
}
121121
return;
122122
}
123123
if (!context.getEntityMetamodels().contains(second)) {
124-
if (kind == AssociationOption.MANDATORY) {
124+
if (option == AssociationOption.Kind.MANDATORY) {
125125
throw new DomaException(Message.DOMA6001, "second");
126126
}
127127
return;

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/declaration/WhereDeclaration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public <PROPERTY> void like(PropertyMetamodel<PROPERTY> left, PROPERTY right) {
4646
Objects.requireNonNull(left);
4747
add(
4848
new Criterion.Like(
49-
new Operand.Prop(left), new Operand.Param(left, right), LikeOption.NONE));
49+
new Operand.Prop(left), new Operand.Param(left, right), LikeOption.none()));
5050
}
5151

5252
public <PROPERTY> void like(PropertyMetamodel<PROPERTY> left, PROPERTY right, LikeOption option) {
@@ -58,7 +58,7 @@ public <PROPERTY> void notLike(PropertyMetamodel<PROPERTY> left, PROPERTY right)
5858
Objects.requireNonNull(left);
5959
add(
6060
new Criterion.NotLike(
61-
new Operand.Prop(left), new Operand.Param(left, right), LikeOption.NONE));
61+
new Operand.Prop(left), new Operand.Param(left, right), LikeOption.none()));
6262
}
6363

6464
public <PROPERTY> void notLike(
Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
package org.seasar.doma.jdbc.criteria.option;
22

3-
public enum AssociationOption {
4-
MANDATORY,
5-
OPTIONAL
3+
public interface AssociationOption {
4+
enum Kind implements AssociationOption {
5+
MANDATORY,
6+
OPTIONAL
7+
}
8+
9+
static AssociationOption mandatory() {
10+
return Kind.MANDATORY;
11+
}
12+
13+
static AssociationOption optional() {
14+
return Kind.OPTIONAL;
15+
}
616
}
Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
package org.seasar.doma.jdbc.criteria.option;
22

3-
public enum DistinctOption {
4-
ENABLED,
5-
DISABLED
3+
public interface DistinctOption {
4+
enum Kind implements DistinctOption {
5+
NONE,
6+
BASIC
7+
}
8+
9+
static DistinctOption none() {
10+
return Kind.NONE;
11+
}
12+
13+
static DistinctOption basic() {
14+
return Kind.BASIC;
15+
}
616
}
Lines changed: 97 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,100 @@
11
package org.seasar.doma.jdbc.criteria.option;
22

3-
public enum ForUpdateOption {
4-
WAIT,
5-
NOWAIT,
6-
DISABLED
3+
import java.util.Arrays;
4+
import java.util.Collections;
5+
import java.util.List;
6+
import java.util.Objects;
7+
import org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel;
8+
9+
public interface ForUpdateOption {
10+
11+
static ForUpdateOption none() {
12+
return None.INSTANCE;
13+
}
14+
15+
static ForUpdateOption basic(PropertyMetamodel<?>... propertyMetamodels) {
16+
Objects.requireNonNull(propertyMetamodels);
17+
return new Basic(Arrays.asList(propertyMetamodels));
18+
}
19+
20+
static ForUpdateOption noWait(PropertyMetamodel<?>... propertyMetamodels) {
21+
Objects.requireNonNull(propertyMetamodels);
22+
return new NoWait(Arrays.asList(propertyMetamodels));
23+
}
24+
25+
static ForUpdateOption wait(int seconds, PropertyMetamodel<?>... propertyMetamodels) {
26+
Objects.requireNonNull(propertyMetamodels);
27+
return new Wait(seconds, Arrays.asList(propertyMetamodels));
28+
}
29+
30+
void accept(Visitor visitor);
31+
32+
class None implements ForUpdateOption {
33+
private static final None INSTANCE = new None();
34+
35+
private None() {}
36+
37+
@Override
38+
public void accept(Visitor visitor) {
39+
Objects.requireNonNull(visitor);
40+
visitor.visit(this);
41+
}
42+
}
43+
44+
class Basic implements ForUpdateOption {
45+
public final List<PropertyMetamodel<?>> propertyMetamodels;
46+
47+
public Basic(List<PropertyMetamodel<?>> propertyMetamodels) {
48+
Objects.requireNonNull(propertyMetamodels);
49+
this.propertyMetamodels = Collections.unmodifiableList(propertyMetamodels);
50+
}
51+
52+
@Override
53+
public void accept(Visitor visitor) {
54+
Objects.requireNonNull(visitor);
55+
visitor.visit(this);
56+
}
57+
}
58+
59+
class NoWait implements ForUpdateOption {
60+
public final List<PropertyMetamodel<?>> propertyMetamodels;
61+
62+
public NoWait(List<PropertyMetamodel<?>> propertyMetamodels) {
63+
Objects.requireNonNull(propertyMetamodels);
64+
this.propertyMetamodels = Collections.unmodifiableList(propertyMetamodels);
65+
}
66+
67+
@Override
68+
public void accept(Visitor visitor) {
69+
Objects.requireNonNull(visitor);
70+
visitor.visit(this);
71+
}
72+
}
73+
74+
class Wait implements ForUpdateOption {
75+
public final int second;
76+
public final List<PropertyMetamodel<?>> propertyMetamodels;
77+
78+
public Wait(int second, List<PropertyMetamodel<?>> propertyMetamodels) {
79+
Objects.requireNonNull(propertyMetamodels);
80+
this.second = second;
81+
this.propertyMetamodels = Collections.unmodifiableList(propertyMetamodels);
82+
}
83+
84+
@Override
85+
public void accept(Visitor visitor) {
86+
Objects.requireNonNull(visitor);
87+
visitor.visit(this);
88+
}
89+
}
90+
91+
interface Visitor {
92+
default void visit(None none) {}
93+
94+
void visit(Basic basic);
95+
96+
void visit(NoWait wait);
97+
98+
void visit(Wait noWait);
99+
}
7100
}
Lines changed: 123 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,126 @@
11
package org.seasar.doma.jdbc.criteria.option;
22

3-
public enum LikeOption {
4-
NONE,
5-
ESCAPE,
6-
PREFIX,
7-
INFIX,
8-
SUFFIX
3+
import java.util.Objects;
4+
5+
public interface LikeOption {
6+
7+
char DEFAULT_ESCAPE_CHAR = '$';
8+
9+
static LikeOption none() {
10+
return None.INSTANCE;
11+
}
12+
13+
static LikeOption escape() {
14+
return new Escape(DEFAULT_ESCAPE_CHAR);
15+
}
16+
17+
static LikeOption escape(char escapeChar) {
18+
return new Escape(escapeChar);
19+
}
20+
21+
static LikeOption prefix() {
22+
return new Prefix(DEFAULT_ESCAPE_CHAR);
23+
}
24+
25+
static LikeOption prefix(char escapeChar) {
26+
return new Prefix(escapeChar);
27+
}
28+
29+
static LikeOption infix() {
30+
return new Infix(DEFAULT_ESCAPE_CHAR);
31+
}
32+
33+
static LikeOption infix(char escapeChar) {
34+
return new Infix(escapeChar);
35+
}
36+
37+
static LikeOption suffix() {
38+
return new Suffix(DEFAULT_ESCAPE_CHAR);
39+
}
40+
41+
static LikeOption suffix(char escapeChar) {
42+
return new Suffix(escapeChar);
43+
}
44+
45+
void accept(Visitor visitor);
46+
47+
class None implements LikeOption {
48+
private static final None INSTANCE = new None();
49+
50+
private None() {}
51+
52+
@Override
53+
public void accept(Visitor visitor) {
54+
Objects.requireNonNull(visitor);
55+
visitor.visit(this);
56+
}
57+
}
58+
59+
class Escape implements LikeOption {
60+
public final char escapeChar;
61+
62+
public Escape(char escapeChar) {
63+
this.escapeChar = escapeChar;
64+
}
65+
66+
@Override
67+
public void accept(Visitor visitor) {
68+
Objects.requireNonNull(visitor);
69+
visitor.visit(this);
70+
}
71+
}
72+
73+
class Prefix implements LikeOption {
74+
public final char escapeChar;
75+
76+
public Prefix(char escapeChar) {
77+
this.escapeChar = escapeChar;
78+
}
79+
80+
@Override
81+
public void accept(Visitor visitor) {
82+
Objects.requireNonNull(visitor);
83+
visitor.visit(this);
84+
}
85+
}
86+
87+
class Infix implements LikeOption {
88+
public final char escapeChar;
89+
90+
public Infix(char escapeChar) {
91+
this.escapeChar = escapeChar;
92+
}
93+
94+
@Override
95+
public void accept(Visitor visitor) {
96+
Objects.requireNonNull(visitor);
97+
visitor.visit(this);
98+
}
99+
}
100+
101+
class Suffix implements LikeOption {
102+
public final char escapeChar;
103+
104+
public Suffix(char escapeChar) {
105+
this.escapeChar = escapeChar;
106+
}
107+
108+
@Override
109+
public void accept(Visitor visitor) {
110+
Objects.requireNonNull(visitor);
111+
visitor.visit(this);
112+
}
113+
}
114+
115+
interface Visitor {
116+
void visit(None none);
117+
118+
void visit(Escape escape);
119+
120+
void visit(Prefix prefix);
121+
122+
void visit(Infix infix);
123+
124+
void visit(Suffix suffix);
125+
}
9126
}

0 commit comments

Comments
 (0)