Skip to content

Commit 9c120ec

Browse files
authored
Use compareTo instead of equals in BigDecimal comparisons (#927)
* Use `compareTo` instead of `equals` in BigDecimal comparisons * Pass test with Oracle database
1 parent 4e13b88 commit 9c120ec

File tree

4 files changed

+37
-0
lines changed

4 files changed

+37
-0
lines changed

doma-core/src/main/java/org/seasar/doma/wrapper/BigDecimalWrapper.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ public void decrement() {
4343
}
4444
}
4545

46+
@Override
47+
protected boolean doHasEqualValue(Object otherValue) {
48+
BigDecimal value = doGet();
49+
if (value == null) {
50+
return otherValue == null;
51+
}
52+
if (otherValue instanceof BigDecimal) {
53+
return value.compareTo((BigDecimal) otherValue) == 0;
54+
}
55+
return false;
56+
}
57+
4658
@Override
4759
public <R, P, Q, TH extends Throwable> R accept(WrapperVisitor<R, P, Q, TH> visitor, P p, Q q)
4860
throws TH {

doma-core/src/test/java/org/seasar/doma/wrapper/BigDecimalWrapperTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.seasar.doma.wrapper;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
5+
import static org.junit.jupiter.api.Assertions.assertTrue;
46

57
import java.math.BigDecimal;
68
import java.math.BigInteger;
@@ -42,4 +44,11 @@ public void testDecrement() {
4244
wrapper.decrement();
4345
assertEquals(new BigDecimal(9), wrapper.get());
4446
}
47+
48+
@Test
49+
public void testHasEqualValue() {
50+
BigDecimalWrapper wrapper = new BigDecimalWrapper(new BigDecimal("10"));
51+
assertTrue(wrapper.hasEqualValue(new BigDecimal("10.00")));
52+
assertNotEquals(wrapper.get(), new BigDecimal("10.00"));
53+
}
4554
}

integration-test-java/src/main/java/org/seasar/doma/it/dao/EmployeeDao.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.seasar.doma.SelectType;
1616
import org.seasar.doma.Sql;
1717
import org.seasar.doma.Suppress;
18+
import org.seasar.doma.Update;
1819
import org.seasar.doma.it.domain.Hiredate;
1920
import org.seasar.doma.it.entity.Employee;
2021
import org.seasar.doma.jdbc.Config;
@@ -150,4 +151,7 @@ default Stream<Employee> streamWithBuilder() {
150151

151152
@Insert
152153
int insert(Employee entity);
154+
155+
@Update
156+
int update(Employee entity);
153157
}

integration-test-java/src/test/java/org/seasar/doma/it/auto/AutoUpdateTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import org.seasar.doma.it.dao.DepartmentDaoImpl;
2424
import org.seasar.doma.it.dao.DeptDao;
2525
import org.seasar.doma.it.dao.DeptDaoImpl;
26+
import org.seasar.doma.it.dao.EmployeeDao;
27+
import org.seasar.doma.it.dao.EmployeeDaoImpl;
2628
import org.seasar.doma.it.dao.NoIdDao;
2729
import org.seasar.doma.it.dao.NoIdDaoImpl;
2830
import org.seasar.doma.it.dao.SalesmanDao;
@@ -37,6 +39,7 @@
3739
import org.seasar.doma.it.entity.CompKeyDepartment;
3840
import org.seasar.doma.it.entity.Department;
3941
import org.seasar.doma.it.entity.Dept;
42+
import org.seasar.doma.it.entity.Employee;
4043
import org.seasar.doma.it.entity.NoId;
4144
import org.seasar.doma.it.entity.Salesman;
4245
import org.seasar.doma.it.entity.Staff;
@@ -254,6 +257,15 @@ public void testUpdate(Config config) throws Exception {
254257
assertEquals(1, staff.addressId.intValue());
255258
}
256259

260+
@Test
261+
public void testUpdateUsingOriginalStates(Config config) throws Exception {
262+
EmployeeDao dao = new EmployeeDaoImpl(config);
263+
Employee employee = dao.selectById(8);
264+
employee.setSalary(new Salary(new BigDecimal("3000")));
265+
int result = dao.update(employee);
266+
assertEquals(0, result);
267+
}
268+
257269
@Test
258270
public void testNestedEntity(Config config) throws Exception {
259271
BranchDao dao = new BranchDaoImpl(config);

0 commit comments

Comments
 (0)