Skip to content

Commit 750b6c2

Browse files
committed
Merge pull request #93 from domaframework/fix-domain-mapping-hint
JdbcMappingHint#getDomainClass() がドメインクラスを返さない問題を修正
2 parents 69ff3d4 + 456107c commit 750b6c2

19 files changed

+197
-29
lines changed

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import org.seasar.doma.internal.expr.ExpressionParser;
3535
import org.seasar.doma.internal.expr.Value;
3636
import org.seasar.doma.internal.expr.node.ExpressionNode;
37-
import org.seasar.doma.internal.jdbc.command.JdbcMappable;
3837
import org.seasar.doma.internal.jdbc.scalar.Scalar;
3938
import org.seasar.doma.internal.jdbc.scalar.ScalarException;
4039
import org.seasar.doma.internal.jdbc.scalar.Scalars;
@@ -606,8 +605,8 @@ public void appendSql(String sql) {
606605
}
607606

608607
@Override
609-
public <BASIC> void appendParameter(JdbcMappable<BASIC> parameter) {
610-
p.appendParameter(new BasicInParameter<>(parameter::getWrapper));
608+
public <BASIC> void appendParameter(InParameter<BASIC> parameter) {
609+
p.appendParameter(parameter);
611610
}
612611
});
613612
return null;

src/main/java/org/seasar/doma/internal/jdbc/sql/PreparedSqlBuilder.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.util.List;
2222
import java.util.function.Function;
2323

24-
import org.seasar.doma.internal.jdbc.command.JdbcMappable;
2524
import org.seasar.doma.jdbc.Config;
2625
import org.seasar.doma.jdbc.SqlKind;
2726
import org.seasar.doma.jdbc.SqlLogFormattingFunction;
@@ -30,7 +29,7 @@
3029

3130
public class PreparedSqlBuilder implements SqlContext {
3231

33-
protected final List<BasicInParameter<?>> parameters = new ArrayList<>();
32+
protected final List<InParameter<?>> parameters = new ArrayList<>();
3433

3534
protected final StringBuilder rawSql = new StringBuilder(200);
3635

@@ -62,12 +61,12 @@ public void cutBackSql(int length) {
6261
formattedSql.setLength(formattedSql.length() - length);
6362
}
6463

65-
public <BASIC> void appendParameter(JdbcMappable<BASIC> parameter) {
64+
public <BASIC> void appendParameter(InParameter<BASIC> parameter) {
6665
rawSql.append("?");
6766
Wrapper<BASIC> wrapper = parameter.getWrapper();
6867
formattedSql.append(wrapper.accept(config.getDialect()
6968
.getSqlLogFormattingVisitor(), formattingFunction, null));
70-
parameters.add(new BasicInParameter<BASIC>(() -> wrapper));
69+
parameters.add(parameter);
7170
}
7271

7372
public PreparedSql build(Function<String, String> commenter) {

src/main/java/org/seasar/doma/internal/jdbc/sql/ScalarInOutParameter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void updateReference() {
5555

5656
@Override
5757
public Optional<Class<?>> getDomainClass() {
58-
return Optional.empty();
58+
return scalar.getDomainClass();
5959
}
6060

6161
@Override

src/main/java/org/seasar/doma/internal/jdbc/sql/ScalarInParameter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public Wrapper<BASIC> getWrapper() {
5858

5959
@Override
6060
public Optional<Class<?>> getDomainClass() {
61-
return Optional.empty();
61+
return scalar.getDomainClass();
6262
}
6363

6464
@Override

src/main/java/org/seasar/doma/internal/jdbc/sql/SqlContext.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,14 @@
1515
*/
1616
package org.seasar.doma.internal.jdbc.sql;
1717

18-
import org.seasar.doma.internal.jdbc.command.JdbcMappable;
1918

2019
/**
2120
* @author nakamura-to
2221
* @since 2.3.0
2322
*/
2423
public interface SqlContext {
2524

26-
<BASIC> void appendParameter(JdbcMappable<BASIC> parameter);
25+
<BASIC> void appendParameter(InParameter<BASIC> parameter);
2726

2827
void appendSql(String sql);
2928

src/main/java/org/seasar/doma/jdbc/JdbcMappingHint.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,24 @@
1818
import java.util.Optional;
1919

2020
/**
21+
* マッピングに関するヒント情報です。
22+
* <p>
23+
* {@link JdbcMappingVisitor} の実装クラスにおいて、次のマッピングのカスタマイズに利用できます。
24+
*
25+
* <ul>
26+
* <li>JavaのクラスからSQLの型へのマッピング(JavaからSQLのバインド変数へのマッピング)</li>
27+
* <li>SQLの型からJavaのクラスへのマッピング(SQLの結果セットからJavaのマッピング)</li>
28+
* </ul>
29+
*
2130
* @author nakamura-to
2231
*
2332
*/
2433
public interface JdbcMappingHint {
2534

35+
/**
36+
* ドメインクラスにマッピングされている場合、そのドメインクラスを返します。
37+
*
38+
* @return ドメインクラス
39+
*/
2640
Optional<Class<?>> getDomainClass();
2741
}

src/main/java/org/seasar/doma/jdbc/entity/DefaultPropertyType.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import org.seasar.doma.internal.jdbc.scalar.OptionalIntScalar;
3636
import org.seasar.doma.internal.jdbc.scalar.OptionalLongScalar;
3737
import org.seasar.doma.internal.jdbc.scalar.Scalar;
38+
import org.seasar.doma.internal.jdbc.sql.InParameter;
39+
import org.seasar.doma.internal.jdbc.sql.ScalarInParameter;
3840
import org.seasar.doma.internal.util.ClassUtil;
3941
import org.seasar.doma.internal.util.FieldUtil;
4042
import org.seasar.doma.jdbc.Naming;
@@ -370,6 +372,11 @@ public Property<ENTITY, BASIC> save(ENTITY entity) {
370372
return this;
371373
}
372374

375+
@Override
376+
public InParameter<BASIC> asInParameter() {
377+
return delegate.asInParameter();
378+
}
379+
373380
@Override
374381
public Wrapper<BASIC> getWrapper() {
375382
return delegate.getWrapper();
@@ -422,6 +429,11 @@ public Property<ENTITY, BASIC> save(ENTITY entity) {
422429
return this;
423430
}
424431

432+
@Override
433+
public InParameter<BASIC> asInParameter() {
434+
return new ScalarInParameter<>(scalar);
435+
}
436+
425437
@Override
426438
public Wrapper<BASIC> getWrapper() {
427439
return scalar.getWrapper();

src/main/java/org/seasar/doma/jdbc/entity/Property.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.seasar.doma.jdbc.entity;
1717

1818
import org.seasar.doma.internal.jdbc.command.JdbcMappable;
19+
import org.seasar.doma.internal.jdbc.sql.InParameter;
1920

2021
/**
2122
* プロパティです。
@@ -55,4 +56,12 @@ public interface Property<ENTITY, BASIC> extends JdbcMappable<BASIC> {
5556
*/
5657
Property<ENTITY, BASIC> save(ENTITY entity);
5758

59+
/**
60+
* このプロパティを入力用パラメータとして返します。
61+
*
62+
* @return 入力用パラメータ
63+
* @since 2.4.0
64+
*/
65+
InParameter<BASIC> asInParameter();
66+
5867
}

src/main/java/org/seasar/doma/jdbc/query/AutoBatchDeleteQuery.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ protected void prepareSql() {
109109
builder.appendSql(propertyType.getColumnName(naming::apply,
110110
dialect::applyQuote));
111111
builder.appendSql(" = ");
112-
builder.appendParameter(property);
112+
builder.appendParameter(property.asInParameter());
113113
builder.appendSql(" and ");
114114
}
115115
builder.cutBackSql(5);
@@ -125,7 +125,7 @@ protected void prepareSql() {
125125
builder.appendSql(versionPropertyType.getColumnName(naming::apply,
126126
dialect::applyQuote));
127127
builder.appendSql(" = ");
128-
builder.appendParameter(property);
128+
builder.appendParameter(property.asInParameter());
129129
}
130130
PreparedSql sql = builder.build(this::comment);
131131
sqls.add(sql);

src/main/java/org/seasar/doma/jdbc/query/AutoBatchInsertQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ protected void prepareSql() {
180180
for (EntityPropertyType<ENTITY, ?> propertyType : targetPropertyTypes) {
181181
Property<ENTITY, ?> property = propertyType.createProperty();
182182
property.load(currentEntity);
183-
builder.appendParameter(property);
183+
builder.appendParameter(property.asInParameter());
184184
builder.appendSql(", ");
185185
}
186186
builder.cutBackSql(2);

0 commit comments

Comments
 (0)