Skip to content

Commit 5466104

Browse files
committed
Merge pull request #102 from domaframework/issue-101
UnknownColumnHandler の handle() を空実装にすると NullPointerException が発生する問題を修正
2 parents d41c22a + 1632dc6 commit 5466104

File tree

2 files changed

+80
-7
lines changed

2 files changed

+80
-7
lines changed

src/main/java/org/seasar/doma/internal/jdbc/command/EntityProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,10 @@ protected ENTITY build(ResultSet resultSet) throws SQLException {
117117
}
118118
unknownColumnHandler.handle(query, entityType,
119119
lowerCaseColumnName);
120+
} else {
121+
unmappedPropertySet.remove(propertyType);
122+
indexMap.put(i, propertyType);
120123
}
121-
unmappedPropertySet.remove(propertyType);
122-
indexMap.put(i, propertyType);
123124
}
124125
if (resultMappingEnsured && !unmappedPropertySet.isEmpty()) {
125126
throwResultMappingException(unmappedPropertySet);

src/test/java/org/seasar/doma/internal/jdbc/command/EntityProviderTest.java

Lines changed: 77 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.lang.reflect.Method;
1919
import java.math.BigDecimal;
20+
import java.util.Collections;
2021

2122
import junit.framework.TestCase;
2223

@@ -29,7 +30,12 @@
2930
import org.seasar.doma.internal.jdbc.sql.PreparedSql;
3031
import org.seasar.doma.jdbc.Config;
3132
import org.seasar.doma.jdbc.SelectOptions;
33+
import org.seasar.doma.jdbc.SqlKind;
3234
import org.seasar.doma.jdbc.SqlLogType;
35+
import org.seasar.doma.jdbc.UnknownColumnException;
36+
import org.seasar.doma.jdbc.UnknownColumnHandler;
37+
import org.seasar.doma.jdbc.entity.EntityType;
38+
import org.seasar.doma.jdbc.query.Query;
3339
import org.seasar.doma.jdbc.query.SelectQuery;
3440

3541
import example.entity.Emp;
@@ -41,8 +47,6 @@
4147
*/
4248
public class EntityProviderTest extends TestCase {
4349

44-
private final MockConfig runtimeConfig = new MockConfig();
45-
4650
public void testGetEntity() throws Exception {
4751
MockResultSetMetaData metaData = new MockResultSetMetaData();
4852
metaData.columns.add(new ColumnMetaData("id"));
@@ -55,7 +59,52 @@ public void testGetEntity() throws Exception {
5559

5660
_Emp entityType = _Emp.getSingletonInternal();
5761
EntityProvider<Emp> provider = new EntityProvider<>(entityType,
58-
new MySelectQuery(), false);
62+
new MySelectQuery(new MockConfig()), false);
63+
Emp emp = provider.get(resultSet);
64+
65+
assertEquals(new Integer(1), emp.getId());
66+
assertEquals("aaa", emp.getName());
67+
assertEquals(new BigDecimal(10), emp.getSalary());
68+
assertEquals(new Integer(100), emp.getVersion());
69+
}
70+
71+
public void testGetEntity_UnknownColumnException() throws Exception {
72+
MockResultSetMetaData metaData = new MockResultSetMetaData();
73+
metaData.columns.add(new ColumnMetaData("id"));
74+
metaData.columns.add(new ColumnMetaData("name"));
75+
metaData.columns.add(new ColumnMetaData("salary"));
76+
metaData.columns.add(new ColumnMetaData("version"));
77+
metaData.columns.add(new ColumnMetaData("unknown"));
78+
MockResultSet resultSet = new MockResultSet(metaData);
79+
resultSet.rows
80+
.add(new RowData(1, "aaa", new BigDecimal(10), 100, "bbb"));
81+
resultSet.next();
82+
83+
_Emp entityType = _Emp.getSingletonInternal();
84+
EntityProvider<Emp> provider = new EntityProvider<>(entityType,
85+
new MySelectQuery(new MockConfig()), false);
86+
try {
87+
provider.get(resultSet);
88+
fail();
89+
} catch (UnknownColumnException expected) {
90+
}
91+
}
92+
93+
public void testGetEntity_EmptyUnknownColumnHandler() throws Exception {
94+
MockResultSetMetaData metaData = new MockResultSetMetaData();
95+
metaData.columns.add(new ColumnMetaData("id"));
96+
metaData.columns.add(new ColumnMetaData("name"));
97+
metaData.columns.add(new ColumnMetaData("salary"));
98+
metaData.columns.add(new ColumnMetaData("version"));
99+
metaData.columns.add(new ColumnMetaData("unknown"));
100+
MockResultSet resultSet = new MockResultSet(metaData);
101+
resultSet.rows
102+
.add(new RowData(1, "aaa", new BigDecimal(10), 100, "bbb"));
103+
resultSet.next();
104+
105+
_Emp entityType = _Emp.getSingletonInternal();
106+
EntityProvider<Emp> provider = new EntityProvider<>(entityType,
107+
new MySelectQuery(new EmptyUnknownColumnHandlerConfig()), false);
59108
Emp emp = provider.get(resultSet);
60109

61110
assertEquals(new Integer(1), emp.getId());
@@ -66,14 +115,20 @@ public void testGetEntity() throws Exception {
66115

67116
protected class MySelectQuery implements SelectQuery {
68117

118+
private final Config config;
119+
120+
MySelectQuery(Config config) {
121+
this.config = config;
122+
}
123+
69124
@Override
70125
public SelectOptions getOptions() {
71126
return SelectOptions.get();
72127
}
73128

74129
@Override
75130
public Config getConfig() {
76-
return runtimeConfig;
131+
return config;
77132
}
78133

79134
@Override
@@ -88,7 +143,8 @@ public String getMethodName() {
88143

89144
@Override
90145
public PreparedSql getSql() {
91-
return null;
146+
return new PreparedSql(SqlKind.SELECT, "dummy", "dummy", "dummy",
147+
Collections.emptyList(), SqlLogType.FORMATTED);
92148
}
93149

94150
@Override
@@ -146,4 +202,20 @@ public String comment(String sql) {
146202
}
147203

148204
}
205+
206+
protected static class EmptyUnknownColumnHandler implements
207+
UnknownColumnHandler {
208+
@Override
209+
public void handle(Query query, EntityType<?> entityType,
210+
String unknownColumnName) {
211+
}
212+
}
213+
214+
protected static class EmptyUnknownColumnHandlerConfig extends MockConfig {
215+
@Override
216+
public UnknownColumnHandler getUnknownColumnHandler() {
217+
return new EmptyUnknownColumnHandler();
218+
}
219+
220+
}
149221
}

0 commit comments

Comments
 (0)