From 1632dc641e1e44efc7e31d31d6d73a4e46ca88a6 Mon Sep 17 00:00:00 2001 From: Toshihiro Nakamura Date: Sun, 18 Oct 2015 22:01:37 +0900 Subject: [PATCH] =?UTF-8?q?UnknownColumnHandler=20=E3=81=AE=20handle()=20?= =?UTF-8?q?=E3=82=92=E7=A9=BA=E5=AE=9F=E8=A3=85=E3=81=AB=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=81=A8=20NullPointerException=20=E3=81=8C=E7=99=BA=E7=94=9F?= =?UTF-8?q?=E3=81=99=E3=82=8B=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix #101 --- .../internal/jdbc/command/EntityProvider.java | 5 +- .../jdbc/command/EntityProviderTest.java | 82 +++++++++++++++++-- 2 files changed, 80 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/seasar/doma/internal/jdbc/command/EntityProvider.java b/src/main/java/org/seasar/doma/internal/jdbc/command/EntityProvider.java index 5f02ae0a7..1611e4283 100644 --- a/src/main/java/org/seasar/doma/internal/jdbc/command/EntityProvider.java +++ b/src/main/java/org/seasar/doma/internal/jdbc/command/EntityProvider.java @@ -117,9 +117,10 @@ protected ENTITY build(ResultSet resultSet) throws SQLException { } unknownColumnHandler.handle(query, entityType, lowerCaseColumnName); + } else { + unmappedPropertySet.remove(propertyType); + indexMap.put(i, propertyType); } - unmappedPropertySet.remove(propertyType); - indexMap.put(i, propertyType); } if (resultMappingEnsured && !unmappedPropertySet.isEmpty()) { throwResultMappingException(unmappedPropertySet); diff --git a/src/test/java/org/seasar/doma/internal/jdbc/command/EntityProviderTest.java b/src/test/java/org/seasar/doma/internal/jdbc/command/EntityProviderTest.java index b1730d13e..e124062a7 100644 --- a/src/test/java/org/seasar/doma/internal/jdbc/command/EntityProviderTest.java +++ b/src/test/java/org/seasar/doma/internal/jdbc/command/EntityProviderTest.java @@ -17,6 +17,7 @@ import java.lang.reflect.Method; import java.math.BigDecimal; +import java.util.Collections; import junit.framework.TestCase; @@ -29,7 +30,12 @@ import org.seasar.doma.internal.jdbc.sql.PreparedSql; import org.seasar.doma.jdbc.Config; import org.seasar.doma.jdbc.SelectOptions; +import org.seasar.doma.jdbc.SqlKind; import org.seasar.doma.jdbc.SqlLogType; +import org.seasar.doma.jdbc.UnknownColumnException; +import org.seasar.doma.jdbc.UnknownColumnHandler; +import org.seasar.doma.jdbc.entity.EntityType; +import org.seasar.doma.jdbc.query.Query; import org.seasar.doma.jdbc.query.SelectQuery; import example.entity.Emp; @@ -41,8 +47,6 @@ */ public class EntityProviderTest extends TestCase { - private final MockConfig runtimeConfig = new MockConfig(); - public void testGetEntity() throws Exception { MockResultSetMetaData metaData = new MockResultSetMetaData(); metaData.columns.add(new ColumnMetaData("id")); @@ -55,7 +59,52 @@ public void testGetEntity() throws Exception { _Emp entityType = _Emp.getSingletonInternal(); EntityProvider provider = new EntityProvider<>(entityType, - new MySelectQuery(), false); + new MySelectQuery(new MockConfig()), false); + Emp emp = provider.get(resultSet); + + assertEquals(new Integer(1), emp.getId()); + assertEquals("aaa", emp.getName()); + assertEquals(new BigDecimal(10), emp.getSalary()); + assertEquals(new Integer(100), emp.getVersion()); + } + + public void testGetEntity_UnknownColumnException() throws Exception { + MockResultSetMetaData metaData = new MockResultSetMetaData(); + metaData.columns.add(new ColumnMetaData("id")); + metaData.columns.add(new ColumnMetaData("name")); + metaData.columns.add(new ColumnMetaData("salary")); + metaData.columns.add(new ColumnMetaData("version")); + metaData.columns.add(new ColumnMetaData("unknown")); + MockResultSet resultSet = new MockResultSet(metaData); + resultSet.rows + .add(new RowData(1, "aaa", new BigDecimal(10), 100, "bbb")); + resultSet.next(); + + _Emp entityType = _Emp.getSingletonInternal(); + EntityProvider provider = new EntityProvider<>(entityType, + new MySelectQuery(new MockConfig()), false); + try { + provider.get(resultSet); + fail(); + } catch (UnknownColumnException expected) { + } + } + + public void testGetEntity_EmptyUnknownColumnHandler() throws Exception { + MockResultSetMetaData metaData = new MockResultSetMetaData(); + metaData.columns.add(new ColumnMetaData("id")); + metaData.columns.add(new ColumnMetaData("name")); + metaData.columns.add(new ColumnMetaData("salary")); + metaData.columns.add(new ColumnMetaData("version")); + metaData.columns.add(new ColumnMetaData("unknown")); + MockResultSet resultSet = new MockResultSet(metaData); + resultSet.rows + .add(new RowData(1, "aaa", new BigDecimal(10), 100, "bbb")); + resultSet.next(); + + _Emp entityType = _Emp.getSingletonInternal(); + EntityProvider provider = new EntityProvider<>(entityType, + new MySelectQuery(new EmptyUnknownColumnHandlerConfig()), false); Emp emp = provider.get(resultSet); assertEquals(new Integer(1), emp.getId()); @@ -66,6 +115,12 @@ public void testGetEntity() throws Exception { protected class MySelectQuery implements SelectQuery { + private final Config config; + + MySelectQuery(Config config) { + this.config = config; + } + @Override public SelectOptions getOptions() { return SelectOptions.get(); @@ -73,7 +128,7 @@ public SelectOptions getOptions() { @Override public Config getConfig() { - return runtimeConfig; + return config; } @Override @@ -88,7 +143,8 @@ public String getMethodName() { @Override public PreparedSql getSql() { - return null; + return new PreparedSql(SqlKind.SELECT, "dummy", "dummy", "dummy", + Collections.emptyList(), SqlLogType.FORMATTED); } @Override @@ -146,4 +202,20 @@ public String comment(String sql) { } } + + protected static class EmptyUnknownColumnHandler implements + UnknownColumnHandler { + @Override + public void handle(Query query, EntityType entityType, + String unknownColumnName) { + } + } + + protected static class EmptyUnknownColumnHandlerConfig extends MockConfig { + @Override + public UnknownColumnHandler getUnknownColumnHandler() { + return new EmptyUnknownColumnHandler(); + } + + } }