Skip to content

Commit bc28534

Browse files
authored
Fix expression equality (#1003)
1 parent e11c6f1 commit bc28534

File tree

4 files changed

+56
-4
lines changed

4 files changed

+56
-4
lines changed

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public PropertyMetamodel<?> argument() {
4343
@Override
4444
public boolean equals(Object o) {
4545
if (this == o) return true;
46-
if (!(o instanceof AbstractFunction)) return false;
46+
if (o == null || getClass() != o.getClass()) return false;
4747
AbstractFunction<?> that = (AbstractFunction<?>) o;
4848
return name.equals(that.name) && argument.equals(that.argument);
4949
}
@@ -124,6 +124,20 @@ public void accept(PropertyMetamodel.Visitor visitor) {
124124
v.visit(this);
125125
}
126126
}
127+
128+
@Override
129+
public boolean equals(Object o) {
130+
if (this == o) return true;
131+
if (o == null || getClass() != o.getClass()) return false;
132+
if (!super.equals(o)) return false;
133+
Count count = (Count) o;
134+
return distinct == count.distinct;
135+
}
136+
137+
@Override
138+
public int hashCode() {
139+
return Objects.hash(super.hashCode(), distinct);
140+
}
127141
}
128142

129143
class Max<PROPERTY> extends AbstractFunction<PROPERTY> {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public Class<?> asClass() {
3232
@Override
3333
public boolean equals(Object o) {
3434
if (this == o) return true;
35-
if (!(o instanceof AbstractArithmeticExpression)) return false;
35+
if (o == null || getClass() != o.getClass()) return false;
3636
AbstractArithmeticExpression<?> that = (AbstractArithmeticExpression<?>) o;
3737
return propertyMetamodel.equals(that.propertyMetamodel)
3838
&& left.equals(that.left)

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public Class<?> asClass() {
3434
@Override
3535
public boolean equals(Object o) {
3636
if (this == o) return true;
37-
if (!(o instanceof StringExpression.OneArgumentStringExpression)) return false;
37+
if (o == null || getClass() != o.getClass()) return false;
3838
OneArgumentStringExpression<?> that = (OneArgumentStringExpression<?>) o;
3939
return argument.equals(that.argument);
4040
}
@@ -80,7 +80,7 @@ public Class<?> asClass() {
8080
@Override
8181
public boolean equals(Object o) {
8282
if (this == o) return true;
83-
if (!(o instanceof StringExpression.TwoArgumentsStringExpression)) return false;
83+
if (o == null || getClass() != o.getClass()) return false;
8484
TwoArgumentsStringExpression<?> that = (TwoArgumentsStringExpression<?>) o;
8585
return propertyMetamodel.equals(that.propertyMetamodel)
8686
&& first.equals(that.first)

doma-core/src/test/java/org/seasar/doma/jdbc/criteria/expression/ExpressionsTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.junit.jupiter.api.Test;
2626
import org.seasar.doma.DomaIllegalArgumentException;
2727
import org.seasar.doma.jdbc.criteria.entity.Emp_;
28+
import org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel;
2829

2930
class ExpressionsTest {
3031

@@ -229,4 +230,41 @@ void testSum() {
229230
assertEquals("sum", sum(e.id).getName());
230231
assertEquals(e.id, sum(e.id).argument());
231232
}
233+
234+
@Test
235+
void testEquality() {
236+
PropertyMetamodel<?> sum = sum(e.id);
237+
PropertyMetamodel<?> div = div(sum(e.id), 1);
238+
PropertyMetamodel<?> mod = mod(sum(e.id), 1);
239+
PropertyMetamodel<?> mul = mul(sum(e.id), 1);
240+
PropertyMetamodel<?> sub = sub(sum(e.id), 1);
241+
PropertyMetamodel<?> add = add(sum(e.id), 1);
242+
243+
assertEquals(sum, sum(e.id));
244+
assertEquals(div, div(sum(e.id), 1));
245+
assertEquals(mod, mod(sum(e.id), 1));
246+
assertEquals(mul, mul(sum(e.id), 1));
247+
assertEquals(sub, sub(sum(e.id), 1));
248+
assertEquals(add, add(sum(e.id), 1));
249+
250+
assertNotEquals(sum, div);
251+
assertNotEquals(sum, mod);
252+
assertNotEquals(sum, mul);
253+
assertNotEquals(sum, sub);
254+
assertNotEquals(sum, add);
255+
256+
assertNotEquals(div, mod);
257+
assertNotEquals(div, mul);
258+
assertNotEquals(div, sub);
259+
assertNotEquals(div, add);
260+
261+
assertNotEquals(mod, mul);
262+
assertNotEquals(mod, sub);
263+
assertNotEquals(mod, add);
264+
265+
assertNotEquals(mul, sub);
266+
assertNotEquals(mul, add);
267+
268+
assertNotEquals(sub, add);
269+
}
232270
}

0 commit comments

Comments
 (0)