Skip to content

Commit bd7210d

Browse files
committed
Add tests
1 parent c6086df commit bd7210d

File tree

13 files changed

+372
-67
lines changed

13 files changed

+372
-67
lines changed

doma-core/src/main/java/org/seasar/doma/internal/jdbc/sql/NodePreparedSqlBuilder.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.ListIterator;
2828
import java.util.StringJoiner;
2929
import java.util.function.BiConsumer;
30+
import java.util.function.BiFunction;
3031
import java.util.function.Consumer;
3132
import java.util.function.Function;
3233
import java.util.function.Supplier;
@@ -121,7 +122,7 @@ public class NodePreparedSqlBuilder
121122

122123
protected final BiConsumer<PopulateNode, SqlContext> valuesPopulater;
123124

124-
protected final Function<ExpandNode, List<String>> aggregateColumnsExpander;
125+
protected final BiFunction<ExpandNode, String, List<String>> aggregateColumnsExpander;
125126

126127
public NodePreparedSqlBuilder(Config config, SqlKind kind, String sqlFilePath) {
127128
this(
@@ -185,7 +186,7 @@ public NodePreparedSqlBuilder(
185186
sqlLogType,
186187
columnsExpander,
187188
valuesPopulater,
188-
(node) -> Collections.emptyList());
189+
(node, alias) -> Collections.emptyList());
189190
}
190191

191192
public NodePreparedSqlBuilder(
@@ -196,7 +197,7 @@ public NodePreparedSqlBuilder(
196197
SqlLogType sqlLogType,
197198
Function<ExpandNode, List<String>> columnsExpander,
198199
BiConsumer<PopulateNode, SqlContext> valuesPopulater,
199-
Function<ExpandNode, List<String>> aggregateColumnsExpander) {
200+
BiFunction<ExpandNode, String, List<String>> aggregateColumnsExpander) {
200201
assertNotNull(
201202
config, kind, evaluator, columnsExpander, valuesPopulater, aggregateColumnsExpander);
202203
this.config = config;
@@ -827,7 +828,7 @@ public Void visitExpandNode(ExpandNode node, Context p) {
827828
for (String column : columnsExpander.apply(node)) {
828829
joiner.add(prefix + column);
829830
}
830-
for (String column : aggregateColumnsExpander.apply(node)) {
831+
for (String column : aggregateColumnsExpander.apply(node, alias)) {
831832
joiner.add(column);
832833
}
833834
String joined = joiner.toString();

doma-core/src/main/java/org/seasar/doma/jdbc/query/AbstractSelectQuery.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717

1818
import static org.seasar.doma.internal.util.AssertionUtil.assertNotNull;
1919

20+
import java.util.Arrays;
2021
import java.util.HashMap;
2122
import java.util.List;
2223
import java.util.Map;
24+
import java.util.Set;
2325
import java.util.function.BiFunction;
2426
import java.util.function.Function;
2527
import java.util.stream.Collectors;
@@ -127,7 +129,7 @@ protected List<String> expandColumns(ExpandNode node) {
127129
.collect(Collectors.toList());
128130
}
129131

130-
protected List<String> expandAggregateColumns(ExpandNode node) {
132+
protected List<String> expandAggregateColumns(ExpandNode node, String aliasCsv) {
131133
if (entityType == null) {
132134
SqlLocation location = node.getLocation();
133135
throw new JdbcException(
@@ -136,6 +138,11 @@ protected List<String> expandAggregateColumns(ExpandNode node) {
136138
if (aggregateStrategyType == null) {
137139
return List.of();
138140
}
141+
Set<String> aliases =
142+
Arrays.stream(aliasCsv.split(","))
143+
.map(String::trim)
144+
.filter(s -> !s.isEmpty())
145+
.collect(Collectors.toSet());
139146
Stream<Pair<String, EntityPropertyType<?, ?>>> rootColumns =
140147
entityType.getEntityPropertyTypes().stream()
141148
.map(
@@ -154,6 +161,7 @@ protected List<String> expandAggregateColumns(ExpandNode node) {
154161
Naming naming = config.getNaming();
155162
Dialect dialect = config.getDialect();
156163
return Stream.concat(rootColumns, associationColumns)
164+
.filter(p -> aliases.isEmpty() || aliases.contains(p.fst))
157165
.map(
158166
p -> {
159167
String tableAlias = p.fst;

integration-test-java/src/main/java/org/seasar/doma/it/criteria/Street.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.seasar.doma.it.criteria;
1717

18+
import java.util.Objects;
1819
import org.seasar.doma.Domain;
1920

2021
@Domain(valueType = String.class)
@@ -43,4 +44,16 @@ public char charAt(int index) {
4344
public CharSequence subSequence(int start, int end) {
4445
return value.subSequence(start, end);
4546
}
47+
48+
@Override
49+
public boolean equals(Object o) {
50+
if (o == null || getClass() != o.getClass()) return false;
51+
Street street = (Street) o;
52+
return Objects.equals(value, street.value);
53+
}
54+
55+
@Override
56+
public int hashCode() {
57+
return Objects.hashCode(value);
58+
}
4659
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ int updateBySqlFile_nonEntity(
116116
@Select(aggregateStrategy = DepartmentStrategy.class)
117117
Department selectByIdAsAggregate(Integer departmentId);
118118

119+
@Select(aggregateStrategy = DepartmentStrategy.class)
120+
List<Department> selectByIdsAsAggregate(List<Integer> departmentIds);
121+
119122
@Select(aggregateStrategy = DepartmentStrategy.class)
120123
List<Department> selectAllAsAggregate();
121124

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ interface EmployeeStrategy {
195195
BiFunction<Employee, Department, Employee> department =
196196
(e, d) -> {
197197
e.setDepartment(d);
198+
d.getEmployeeList().add(e);
198199
return e;
199200
};
200201

integration-test-java/src/main/java/org/seasar/doma/it/domain/Identity.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.seasar.doma.it.domain;
1717

18+
import java.util.Objects;
1819
import org.seasar.doma.Domain;
1920

2021
@Domain(valueType = Integer.class)
@@ -29,4 +30,16 @@ public Identity(Integer value) {
2930
public Integer getValue() {
3031
return this.value;
3132
}
33+
34+
@Override
35+
public boolean equals(Object o) {
36+
if (o == null || getClass() != o.getClass()) return false;
37+
Identity<?> identity = (Identity<?>) o;
38+
return Objects.equals(value, identity.value);
39+
}
40+
41+
@Override
42+
public int hashCode() {
43+
return Objects.hashCode(value);
44+
}
3245
}

integration-test-java/src/main/java/org/seasar/doma/it/domain/Salary.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,35 @@ public Salary(String value) {
3434
public BigDecimal getValue() {
3535
return value;
3636
}
37+
38+
@Override
39+
public boolean equals(Object o) {
40+
if (this == o) {
41+
return true;
42+
}
43+
if (o == null || getClass() != o.getClass()) {
44+
return false;
45+
}
46+
Salary salary = (Salary) o;
47+
if (value == null && salary.value == null) {
48+
return true;
49+
}
50+
if (value == null || salary.value == null) {
51+
return false;
52+
}
53+
return value.compareTo(salary.value) == 0;
54+
}
55+
56+
@Override
57+
public int hashCode() {
58+
if (value == null) {
59+
return 0;
60+
}
61+
return value.stripTrailingZeros().hashCode();
62+
}
63+
64+
@Override
65+
public String toString() {
66+
return value == null ? null : value.toPlainString();
67+
}
3768
}

integration-test-java/src/main/resources/META-INF/org/seasar/doma/it/dao/DepartmentDao/selectAllAsAggregate.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ select
1212
e.salary as e_salary,
1313
e.department_id as e_department_id,
1414
e.address_id as e_address_id,
15+
e.version as e_version,
1516
a.address_id as a_address_id,
1617
a.street as a_street,
1718
a.version as a_version

integration-test-java/src/main/resources/META-INF/org/seasar/doma/it/dao/DepartmentDao/selectByIdAsAggregate.sql

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
select
2-
/*%expand "d" */*
2+
/*%expand "d, e" */*,
3+
a.address_id as a_address_id,
4+
a.street as a_street,
5+
a.version as a_version
36
from
47
DEPARTMENT d
58
left outer join EMPLOYEE e
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
select
2+
/*%expand */*
3+
from
4+
DEPARTMENT d
5+
left outer join EMPLOYEE e
6+
on d.department_id = e.department_id
7+
left outer join ADDRESS a
8+
on e.address_id = a.address_id
9+
where
10+
d.department_id in /*departmentIds*/(0)

0 commit comments

Comments
 (0)