Skip to content

Commit 5907637

Browse files
committed
Merge remote-tracking branch 'origin/querydsl-5.0.0'
2 parents 7218ed2 + 7ccfbfc commit 5907637

File tree

6 files changed

+55
-54
lines changed

6 files changed

+55
-54
lines changed

querydsl-examples/pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@
1212
<packaging>pom</packaging>
1313
<name>Querydsl - Examples</name>
1414

15-
<properties>
16-
<main.java.version>17</main.java.version>
17-
</properties>
18-
1915
<modules>
2016
<module>querydsl-example-sql-guice</module>
2117
<module>querydsl-example-sql-spring</module>
@@ -31,6 +27,10 @@
3127
<module>querydsl-example-r2dbc-sql-codegen</module>
3228
</modules>
3329

30+
<properties>
31+
<main.java.version>17</main.java.version>
32+
</properties>
33+
3434
<dependencyManagement>
3535
<dependencies>
3636
<dependency>

querydsl-libraries/querydsl-core/src/main/java/com/querydsl/core/group/GroupByList.java

Lines changed: 17 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,11 @@
1414
package com.querydsl.core.group;
1515

1616
import com.querydsl.core.FetchableQuery;
17-
import com.querydsl.core.Tuple;
1817
import com.querydsl.core.types.Expression;
19-
import com.querydsl.core.types.FactoryExpression;
20-
import com.querydsl.core.types.FactoryExpressionUtils;
21-
import com.querydsl.core.types.Projections;
2218
import java.util.ArrayList;
19+
import java.util.LinkedHashMap;
2320
import java.util.List;
24-
import java.util.Objects;
21+
import java.util.Map;
2522

2623
/**
2724
* Provides aggregated results as a list
@@ -32,44 +29,27 @@
3229
*/
3330
public class GroupByList<K, V> extends AbstractGroupByTransformer<K, List<V>> {
3431

32+
private final GroupByMap<K, V> mapTransformer;
33+
3534
GroupByList(Expression<K> key, Expression<?>... expressions) {
3635
super(key, expressions);
36+
mapTransformer =
37+
new GroupByMap<K, V>(key, expressions) {
38+
@Override
39+
protected Map<K, V> transform(Map<K, Group> groups) {
40+
var results = new LinkedHashMap<K, V>((int) Math.ceil(groups.size() / 0.75), 0.75f);
41+
for (var entry : groups.entrySet()) {
42+
results.put(entry.getKey(), GroupByList.this.transform(entry.getValue()));
43+
}
44+
return results;
45+
}
46+
};
3747
}
3848

3949
@Override
4050
public List<V> transform(FetchableQuery<?, ?> query) {
41-
// create groups
42-
FactoryExpression<Tuple> expr = FactoryExpressionUtils.wrap(Projections.tuple(expressions));
43-
var hasGroups = false;
44-
for (Expression<?> e : expr.getArgs()) {
45-
hasGroups |= e instanceof GroupExpression;
46-
}
47-
if (hasGroups) {
48-
expr = withoutGroupExpressions(expr);
49-
}
50-
final var iter = query.select(expr).iterate();
51-
52-
List<V> list = new ArrayList<>();
53-
GroupImpl group = null;
54-
K groupId = null;
55-
while (iter.hasNext()) {
56-
@SuppressWarnings("unchecked") // This type is mandated by the key type
57-
var row = (K[]) iter.next().toArray();
58-
if (group == null) {
59-
group = new GroupImpl(groupExpressions, maps);
60-
groupId = row[0];
61-
} else if (!Objects.equals(groupId, row[0])) {
62-
list.add(transform(group));
63-
group = new GroupImpl(groupExpressions, maps);
64-
groupId = row[0];
65-
}
66-
group.add(row);
67-
}
68-
if (group != null) {
69-
list.add(transform(group));
70-
}
71-
iter.close();
72-
return list;
51+
var result = mapTransformer.transform(query);
52+
return new ArrayList<V>(result.values());
7353
}
7454

7555
@SuppressWarnings("unchecked")

querydsl-libraries/querydsl-core/src/main/java/com/querydsl/core/types/ConstructorExpression.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public T newInstance(Object... args) {
148148
}
149149

150150
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
151-
ois.readObject();
151+
ois.defaultReadObject();
152152
try {
153153
var constructor = ConstructorExpression.class.getDeclaredField("constructor");
154154
constructor.setAccessible(true);

querydsl-libraries/querydsl-core/src/test/java/com/querydsl/core/group/GroupByListTest.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,26 +134,43 @@ public void map3() {
134134

135135
Object postId = null;
136136
Map<Integer, Map<Integer, String>> posts = null;
137-
List<Map<Integer, Map<Integer, String>>> expected = new LinkedList<>();
137+
var expected = new LinkedList<Map<Integer, Map<Integer, String>>>();
138138
for (Iterator<Tuple> iterator = MAP3_RESULTS.iterate(); iterator.hasNext(); ) {
139139
var tuple = iterator.next();
140140
var array = tuple.toArray();
141141

142142
if (posts == null || !(postId == array[0] || postId != null && postId.equals(array[0]))) {
143-
posts = new LinkedHashMap<>();
144-
expected.add(posts);
143+
posts = findPostsById(expected, array[0]);
144+
if (posts == null) {
145+
posts = new LinkedHashMap<Integer, Map<Integer, String>>();
146+
expected.add(posts);
147+
}
145148
}
146149
postId = array[0];
147150
@SuppressWarnings("unchecked")
148151
var pair = (Pair<Integer, Pair<Integer, String>>) array[1];
149152
var first = pair.getFirst();
150-
var comments = posts.computeIfAbsent(first, k -> new LinkedHashMap<Integer, String>());
153+
var comments = posts.get(first);
154+
if (comments == null) {
155+
comments = new LinkedHashMap<Integer, String>();
156+
posts.put(first, comments);
157+
}
151158
var second = pair.getSecond();
152159
comments.put(second.getFirst(), second.getSecond());
153160
}
154161
assertThat(actual).hasToString(expected.toString());
155162
}
156163

164+
private Map<Integer, Map<Integer, String>> findPostsById(
165+
List<Map<Integer, Map<Integer, String>>> allPosts, Object postId) {
166+
for (var posts : allPosts) {
167+
if (posts.containsKey(postId)) {
168+
return posts;
169+
}
170+
}
171+
return null;
172+
}
173+
157174
@Override
158175
@Test
159176
public void map4() {

querydsl-libraries/querydsl-core/src/test/java/com/querydsl/core/types/ConstructorExpressionTest.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,13 +126,18 @@ public void serializability() {
126126
@Test
127127
public void threadSafety() {
128128
final ConstructorExpression<String> expr = Projections.constructor(String.class);
129-
Runnable invoker =
130-
new Runnable() {
131-
@Override
132-
public void run() {
133-
expr.newInstance();
134-
}
135-
};
129+
Runnable invoker = () -> expr.newInstance();
136130
ThreadSafety.check(invoker, invoker);
137131
}
132+
133+
@Test
134+
public void constructorArgsShouldBeSerialized() {
135+
var longArg = ConstantImpl.create(1L);
136+
var stringArg = ConstantImpl.create("");
137+
var projection =
138+
new ConstructorExpression<ProjectionExample>(
139+
ProjectionExample.class, new Class<?>[] {long.class, String.class}, longArg, stringArg);
140+
var deserializationResult = Serialization.serialize(projection);
141+
assertThat(deserializationResult).isEqualTo(projection);
142+
}
138143
}

querydsl-tooling/querydsl-kotlin-codegen/pom.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@
6565
<dependency>
6666
<groupId>jakarta.inject</groupId>
6767
<artifactId>jakarta.inject-api</artifactId>
68-
<version>2.0.1</version>
6968
</dependency>
7069

7170
<dependency>

0 commit comments

Comments
 (0)