Skip to content

Commit 92263eb

Browse files
authored
Merge pull request #412 from domaframework/make-aggregate-queries-typesafe
Make aggregate queries more typesafe
2 parents ec378fb + d171180 commit 92263eb

File tree

57 files changed

+1608
-688
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1608
-688
lines changed

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

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import java.util.Objects;
44
import java.util.function.Consumer;
5+
import java.util.function.Function;
6+
import org.seasar.doma.internal.jdbc.command.EntityProvider;
57
import org.seasar.doma.jdbc.Config;
8+
import org.seasar.doma.jdbc.ObjectProvider;
69
import org.seasar.doma.jdbc.criteria.context.DeleteContext;
710
import org.seasar.doma.jdbc.criteria.context.InsertContext;
811
import org.seasar.doma.jdbc.criteria.context.Options;
@@ -17,6 +20,7 @@
1720
import org.seasar.doma.jdbc.criteria.statement.NativeSqlInsertStarting;
1821
import org.seasar.doma.jdbc.criteria.statement.NativeSqlSelectStarting;
1922
import org.seasar.doma.jdbc.criteria.statement.NativeSqlUpdateStarting;
23+
import org.seasar.doma.jdbc.query.SelectQuery;
2024

2125
public class NativeSql {
2226

@@ -26,27 +30,29 @@ public NativeSql(Config config) {
2630
this.config = Objects.requireNonNull(config);
2731
}
2832

29-
public <ELEMENT> NativeSqlSelectStarting<ELEMENT> from(EntityDef<ELEMENT> entityDef) {
33+
public <ENTITY> NativeSqlSelectStarting<ENTITY> from(EntityDef<ENTITY> entityDef) {
3034
return from(entityDef, (options) -> {});
3135
}
3236

33-
public <ELEMENT> NativeSqlSelectStarting<ELEMENT> from(
34-
EntityDef<ELEMENT> entityDef, Consumer<Options> optionsConsumer) {
37+
public <ENTITY> NativeSqlSelectStarting<ENTITY> from(
38+
EntityDef<ENTITY> entityDef, Consumer<Options> optionsConsumer) {
3539
Objects.requireNonNull(entityDef);
3640
Objects.requireNonNull(optionsConsumer);
3741
SelectContext context = new SelectContext(entityDef);
3842
optionsConsumer.accept(context.getOptions());
3943
SelectFromDeclaration declaration = new SelectFromDeclaration(context);
40-
return new NativeSqlSelectStarting<>(config, declaration, entityDef);
44+
Function<SelectQuery, ObjectProvider<ENTITY>> factory =
45+
query -> new EntityProvider<>(entityDef.asType(), query, false);
46+
return new NativeSqlSelectStarting<>(config, declaration, entityDef, factory);
4147
}
4248

43-
public <ELEMENT> NativeSqlUpdateStarting update(EntityDef<ELEMENT> entityDef) {
49+
public <ENTITY> NativeSqlUpdateStarting update(EntityDef<ENTITY> entityDef) {
4450
Objects.requireNonNull(entityDef);
4551
return this.update(entityDef, options -> {});
4652
}
4753

48-
public <ELEMENT> NativeSqlUpdateStarting update(
49-
EntityDef<ELEMENT> entityDef, Consumer<Options> optionsConsumer) {
54+
public <ENTITY> NativeSqlUpdateStarting update(
55+
EntityDef<ENTITY> entityDef, Consumer<Options> optionsConsumer) {
5056
Objects.requireNonNull(entityDef);
5157
Objects.requireNonNull(optionsConsumer);
5258
UpdateContext context = new UpdateContext(entityDef);
@@ -55,13 +61,13 @@ public <ELEMENT> NativeSqlUpdateStarting update(
5561
return new NativeSqlUpdateStarting(config, declaration);
5662
}
5763

58-
public <ELEMENT> NativeSqlDeleteStarting delete(EntityDef<ELEMENT> entityDef) {
64+
public <ENTITY> NativeSqlDeleteStarting delete(EntityDef<ENTITY> entityDef) {
5965
Objects.requireNonNull(entityDef);
6066
return this.delete(entityDef, options -> {});
6167
}
6268

63-
public <ELEMENT> NativeSqlDeleteStarting delete(
64-
EntityDef<ELEMENT> entityDef, Consumer<Options> optionsConsumer) {
69+
public <ENTITY> NativeSqlDeleteStarting delete(
70+
EntityDef<ENTITY> entityDef, Consumer<Options> optionsConsumer) {
6571
Objects.requireNonNull(entityDef);
6672
Objects.requireNonNull(optionsConsumer);
6773
DeleteContext context = new DeleteContext(entityDef);
@@ -70,13 +76,13 @@ public <ELEMENT> NativeSqlDeleteStarting delete(
7076
return new NativeSqlDeleteStarting(config, declaration);
7177
}
7278

73-
public <ELEMENT> NativeSqlInsertStarting insert(EntityDef<ELEMENT> entityDef) {
79+
public <ENTITY> NativeSqlInsertStarting insert(EntityDef<ENTITY> entityDef) {
7480
Objects.requireNonNull(entityDef);
7581
return this.insert(entityDef, options -> {});
7682
}
7783

78-
public <ELEMENT> NativeSqlInsertStarting insert(
79-
EntityDef<ELEMENT> entityDef, Consumer<Options> optionsConsumer) {
84+
public <ENTITY> NativeSqlInsertStarting insert(
85+
EntityDef<ENTITY> entityDef, Consumer<Options> optionsConsumer) {
8086
Objects.requireNonNull(entityDef);
8187
Objects.requireNonNull(optionsConsumer);
8288
InsertContext context = new InsertContext(entityDef);

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

Lines changed: 0 additions & 47 deletions
This file was deleted.

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

Lines changed: 0 additions & 59 deletions
This file was deleted.

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/command/MappedObjectProvider.java

Lines changed: 0 additions & 64 deletions
This file was deleted.

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/command/MappedObjectStreamHandler.java

Lines changed: 0 additions & 31 deletions
This file was deleted.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
import org.seasar.doma.jdbc.entity.Property;
1212
import org.seasar.doma.jdbc.query.Query;
1313

14-
public class SetOperationResultProvider<RESULT> extends AbstractObjectProvider<RESULT> {
14+
public class MappedResultProvider<RESULT> extends AbstractObjectProvider<RESULT> {
1515
private final Function<Row, RESULT> mapper;
1616
private final JdbcMappingVisitor jdbcMappingVisitor;
1717

18-
public SetOperationResultProvider(Query query, Function<Row, RESULT> mapper) {
18+
public MappedResultProvider(Query query, Function<Row, RESULT> mapper) {
1919
Objects.requireNonNull(query);
2020
Objects.requireNonNull(mapper);
2121
this.mapper = mapper;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.seasar.doma.jdbc.criteria.command;
2+
3+
import java.util.Objects;
4+
import java.util.function.Function;
5+
import java.util.stream.Stream;
6+
import org.seasar.doma.internal.jdbc.command.AbstractStreamHandler;
7+
import org.seasar.doma.jdbc.ObjectProvider;
8+
import org.seasar.doma.jdbc.query.SelectQuery;
9+
10+
public class MappedResultStreamHandler<ELEMENT, RESULT>
11+
extends AbstractStreamHandler<ELEMENT, RESULT> {
12+
private final Function<SelectQuery, ObjectProvider<ELEMENT>> objectProviderFactory;
13+
14+
public MappedResultStreamHandler(
15+
Function<Stream<ELEMENT>, RESULT> streamMapper,
16+
Function<SelectQuery, ObjectProvider<ELEMENT>> objectProviderFactory) {
17+
super(Objects.requireNonNull(streamMapper));
18+
this.objectProviderFactory = Objects.requireNonNull(objectProviderFactory);
19+
}
20+
21+
@Override
22+
protected ObjectProvider<ELEMENT> createObjectProvider(SelectQuery query) {
23+
return objectProviderFactory.apply(query);
24+
}
25+
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/command/SetOperationResultStreamHandler.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.util.Collections;
44
import java.util.List;
55
import org.seasar.doma.jdbc.criteria.LikeOption;
6-
import org.seasar.doma.jdbc.criteria.Tuple2;
6+
import org.seasar.doma.jdbc.criteria.tuple.Tuple2;
77

88
public interface Criterion {
99
void accept(Visitor visitor);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
import java.util.Objects;
44
import java.util.function.Consumer;
5-
import org.seasar.doma.jdbc.criteria.Tuple2;
65
import org.seasar.doma.jdbc.criteria.context.Projection;
76
import org.seasar.doma.jdbc.criteria.context.SelectContext;
87
import org.seasar.doma.jdbc.criteria.context.SubSelectContext;
98
import org.seasar.doma.jdbc.criteria.def.EntityDef;
109
import org.seasar.doma.jdbc.criteria.def.PropertyDef;
10+
import org.seasar.doma.jdbc.criteria.tuple.Tuple2;
1111

1212
public class SubSelectFromDeclaration {
1313

0 commit comments

Comments
 (0)