From 2d36126c0053b0804af0c42e92839da73d687c49 Mon Sep 17 00:00:00 2001 From: moparisthebest Date: Thu, 10 May 2018 16:37:05 -0400 Subject: [PATCH] Run all tests with new QueryMapper.toType function --- .../jdbc/codegen/QueryMapperQmDao.java | 2 +- .../jdbc/codegen/QueryMapperTypeQmDao.java | 346 ++++++++++++++++++ .../moparisthebest/jdbc/QueryMapperTest.java | 34 +- 3 files changed, 374 insertions(+), 8 deletions(-) create mode 100644 test/src/main/java/com/moparisthebest/jdbc/codegen/QueryMapperTypeQmDao.java diff --git a/test/src/main/java/com/moparisthebest/jdbc/codegen/QueryMapperQmDao.java b/test/src/main/java/com/moparisthebest/jdbc/codegen/QueryMapperQmDao.java index 6f6778d..1c44a4b 100644 --- a/test/src/main/java/com/moparisthebest/jdbc/codegen/QueryMapperQmDao.java +++ b/test/src/main/java/com/moparisthebest/jdbc/codegen/QueryMapperQmDao.java @@ -56,7 +56,7 @@ public class QueryMapperQmDao implements QmDao { public static final String selectNumVal = "SELECT num_val FROM val WHERE val_no = ?"; public static final String selectStrVal = "SELECT str_val FROM val WHERE val_no = ?"; - private final QueryMapper qm; + protected final QueryMapper qm; public QueryMapperQmDao(final Connection conn, final ResultSetMapper rsm) { this.qm = new QueryMapper(conn, rsm); diff --git a/test/src/main/java/com/moparisthebest/jdbc/codegen/QueryMapperTypeQmDao.java b/test/src/main/java/com/moparisthebest/jdbc/codegen/QueryMapperTypeQmDao.java new file mode 100644 index 0000000..4af4804 --- /dev/null +++ b/test/src/main/java/com/moparisthebest/jdbc/codegen/QueryMapperTypeQmDao.java @@ -0,0 +1,346 @@ +package com.moparisthebest.jdbc.codegen; + +import com.moparisthebest.jdbc.ResultSetMapper; +import com.moparisthebest.jdbc.TypeReference; +import com.moparisthebest.jdbc.dto.*; +import com.moparisthebest.jdbc.util.CaseInsensitiveHashMap; +import com.moparisthebest.jdbc.util.ResultSetIterable; + +import java.sql.Connection; +import java.sql.SQLException; +import java.time.*; +import java.util.List; +import java.util.Map; + +//IFJAVA8_START +import java.util.stream.Stream; +//IFJAVA8_END + +public class QueryMapperTypeQmDao extends QueryMapperQmDao { + + public QueryMapperTypeQmDao(final Connection conn, final ResultSetMapper rsm) { + super(conn, rsm); + } + + @Override + public FieldPerson getFieldRegularPerson(final long personNo) throws SQLException { + return qm.toType(personRegular, new TypeReference() {}, personNo); + } + + @Override + public BuilderPerson getBuilderPerson(final long personNo) throws SQLException { + return qm.toType(personRegular, new TypeReference() {}, personNo); + } + + @Override + public FieldBoss getFieldRegularAndUnderscore(final long personNo) throws SQLException { + return qm.toType(bossRegularAndUnderscore, new TypeReference() {}, personNo); + } + + @Override + public FieldBoss getFieldRegularAndUnderscoreReverse(final long personNo) throws SQLException { + return qm.toType(bossRegularAndUnderscoreReverse, new TypeReference() {}, personNo); + } + + @Override + public FieldBoss getFieldRegularAndUnderscoreNoConstructor(final long personNo) throws SQLException { + return qm.toType(bossRegularAndUnderscoreNoConstructor, new TypeReference() {}, personNo); + } + + @Override + public FieldBoss getFieldRegularAndUnderscoreReverseNoConstructor(final long personNo) throws SQLException { + return qm.toType(bossRegularAndUnderscoreReverseNoConstructor, new TypeReference() {}, personNo); + } + + @Override + public FieldBoss getFieldRegular(final long personNo) throws SQLException { + return qm.toType(bossRegular, new TypeReference() {}, personNo); + } + + @Override + public FieldBoss getFieldUnderscore(final long personNo) throws SQLException { + return qm.toType(bossUnderscore, new TypeReference() {}, personNo); + } + + @Override + public SetPerson getSetRegularPerson(final long personNo) throws SQLException { + return qm.toType(personRegular, new TypeReference() {}, personNo); + } + + @Override + public SetPerson getSetRegularPersonNoConstructor(final long personNo) throws SQLException { + return qm.toType(personRegularNoConstructor, new TypeReference() {}, personNo); + } + + @Override + public SetBoss getSetRegularAndUnderscore(final long personNo) throws SQLException { + return qm.toType(bossRegularAndUnderscore, new TypeReference() {}, personNo); + } + + @Override + public SetBoss getSetRegularAndUnderscoreReverse(final long personNo) throws SQLException { + return qm.toType(bossRegularAndUnderscoreReverse, new TypeReference() {}, personNo); + } + + @Override + public SetBoss getSetRegular(final long personNo) throws SQLException { + return qm.toType(bossRegular, new TypeReference() {}, personNo); + } + + @Override + public SetBoss getSetUnderscore(final long personNo) throws SQLException { + return qm.toType(bossUnderscore, new TypeReference() {}, personNo); + } + + @Override + public ReverseFieldPerson getReverseFieldRegularPerson(final long personNo) throws SQLException { + return qm.toType(personRegular, new TypeReference() {}, personNo); + } + + @Override + public ReverseFieldBoss getReverseFieldRegularAndUnderscore(final long personNo) throws SQLException { + return qm.toType(bossRegularAndUnderscore, new TypeReference() {}, personNo); + } + + @Override + public ReverseFieldBoss getReverseFieldRegularAndUnderscoreReverse(final long personNo) throws SQLException { + return qm.toType(bossRegularAndUnderscoreReverse, new TypeReference() {}, personNo); + } + + @Override + public ReverseFieldBoss getReverseFieldRegular(final long personNo) throws SQLException { + return qm.toType(bossRegular, new TypeReference() {}, personNo); + } + + @Override + public ReverseFieldBoss getReverseFieldUnderscore(final long personNo) throws SQLException { + return qm.toType(bossUnderscore, new TypeReference() {}, personNo); + } + + @Override + public ReverseSetPerson getReverseSetRegularPerson(final long personNo) throws SQLException { + return qm.toType(personRegular, new TypeReference() {}, personNo); + } + + @Override + public ReverseSetBoss getReverseSetRegularAndUnderscore(final long personNo) throws SQLException { + return qm.toType(bossRegularAndUnderscore, new TypeReference() {}, personNo); + } + + @Override + public ReverseSetBoss getReverseSetRegularAndUnderscoreReverse(final long personNo) throws SQLException { + return qm.toType(bossRegularAndUnderscoreReverse, new TypeReference() {}, personNo); + } + + @Override + public ReverseSetBoss getReverseSetRegular(final long personNo) throws SQLException { + return qm.toType(bossRegular, new TypeReference() {}, personNo); + } + + @Override + public ReverseSetBoss getReverseSetUnderscore(final long personNo) throws SQLException { + return qm.toType(bossUnderscore, new TypeReference() {}, personNo); + } + + @Override + public Long getPersonNo(final long personNo) throws SQLException { + return qm.toType(selectPersonNo, new TypeReference() {}, personNo); + } + + @Override + public long getPersonNoPrimitive(final long personNo) throws SQLException { + return super.getPersonNoPrimitive(personNo); + // todo: anything we can do with primitives here? + //return qm.toType(selectPersonNo, new TypeReference() {}, personNo); + } + + @Override + public int getPersonNoPrimitiveInt(final int personNo) throws SQLException { + return super.getPersonNoPrimitiveInt(personNo); + // todo: anything we can do with primitives here? + //return qm.toType(selectPersonNo, new TypeReference() {}, personNo); + } + + @Override + public Long[] getPersonNoObjectArray(final Long personNo) throws SQLException { + return qm.toType(selectPersonNo, new TypeReference() {}, personNo); + } + + @Override + public List> getAllNames() throws SQLException { + return qm.toType(allNames, new TypeReference>>() {}); + } + + @Override + public Map[] getAllNamesArray() throws SQLException { + return super.getAllNamesArray(); + // todo: fix this + //return qm.toType(allNames, new TypeReference[]>() {}); + } + + @Override + public Map getAllNameMap() throws SQLException { + return qm.toType(allNames, new TypeReference>() {}); + } + + @Override + public Map getMapLongPerson() throws SQLException { + return qm.toType(selectMapLongPerson, new TypeReference>() {}); + } + + @Override + public Map getMapLongLong() throws SQLException { + return qm.toType(selectLongLong, new TypeReference>() {}); + } + + @Override + public Long[] getLongObjectArray() throws SQLException { + return super.getLongObjectArray(); + // todo: anything we can do with @SingleRow here? + //return qm.toType(selectLongArray, new TypeReference() {}); + } + + @Override + public long[] getLongPrimitiveArray() throws SQLException { + return super.getLongPrimitiveArray(); + // todo: anything we can do with @SingleRow here? + //return qm.toType(selectLongArray, new TypeReference() {}); + } + + @Override + public List> getBobTomMap() throws SQLException { + return qm.toType(bobTomMap, new TypeReference>>() {}); + } + + @Override + public List> getBobTomMapCaseInsensitive() throws SQLException { + return qm.toType(bobTomMap, new TypeReference>>() {}); + } + + @Override + public List> getBobTomMapCaseInsensitiveType() throws SQLException { + return qm.toType(bobTomMap, new TypeReference>>() {}); + } + + @Override + public List getThreePeople(final long personNo1, final long personNo2, final long personNo3) throws SQLException { + return qm.toType(selectThreePeople, + new TypeReference>() {}, personNo1, personNo2, personNo3); + } + + @Override + public List getThreePeopleType(final long personNo1, final long personNo2, final long personNo3) throws SQLException { + return qm.toType(selectThreePeople, + new TypeReference>() {}, personNo1, personNo2, personNo3); + } + + @Override + public ResultSetIterable getThreePeopleResultSetIterable(final long personNo1, final long personNo2, final long personNo3) throws SQLException { + return qm.toType(selectThreePeople, + new TypeReference>() {}, personNo1, personNo2, personNo3); + } + + //IFJAVA8_START + + @Override + public Stream getThreePeopleStream(final long personNo1, final long personNo2, final long personNo3) throws SQLException { + return qm.toType(selectThreePeople, + new TypeReference>() {}, personNo1, personNo2, personNo3); + } + + //IFJAVA8_END + + @Override + public EnumPerson getEnumPerson(long personNo) throws SQLException { + return qm.toType("SELECT first_name, last_name FROM person WHERE person_no = ?", new TypeReference() {}, personNo); + } + + @Override + public EnumPerson getEnumPersonConstructor(long personNo) throws SQLException { + return qm.toType("SELECT first_name FROM person WHERE person_no = ?", new TypeReference() {}, personNo); + } + + @Override + public FirstName getFirstName(long personNo) throws SQLException { + return qm.toType("SELECT first_name FROM person WHERE person_no = ?", new TypeReference() {}, personNo); + } + + @Override + public EnumPerson getEnumPersonNull() throws SQLException { + return qm.toType("SELECT str_val as first_name, str_val as last_name FROM val WHERE val_no = 4", new TypeReference() {}); + } + + @Override + public FirstName getFirstNameNull() throws SQLException { + return qm.toType("SELECT str_val FROM val WHERE val_no = 4", new TypeReference() {}); + } + + @Override + public CaseSensitivePerson getCaseSensitivePerson(long personNo) throws SQLException { + return qm.toType("SELECT first_name AS M_PERSON_FIRST_NAME FROM person WHERE person_no = ?", new TypeReference() {}, personNo); + } + + //IFJAVA8_START + + @Override + public Instant getBirthdateInstant(long personNo) throws SQLException { + return qm.toType(selectBirthDate, new TypeReference() {}, personNo); + } + + @Override + public LocalDateTime getBirthdateLocalDateTime(long personNo) throws SQLException { + return qm.toType(selectBirthDate, new TypeReference() {}, personNo); + } + + @Override + public LocalDate getBirthdateLocalDate(long personNo) throws SQLException { + return qm.toType(selectBirthDate, new TypeReference() {}, personNo); + } + + @Override + public LocalTime getBirthdateLocalTime(long personNo) throws SQLException { + return qm.toType(selectBirthDate, new TypeReference() {}, personNo); + } + + @Override + public ZonedDateTime getBirthdateZonedDateTime(long personNo) throws SQLException { + return qm.toType(selectBirthDate, new TypeReference() {}, personNo); + } + + @Override + public OffsetDateTime getBirthdateOffsetDateTime(long personNo) throws SQLException { + return qm.toType(selectBirthDate, new TypeReference() {}, personNo); + } + + @Override + public OffsetTime getBirthdateOffsetTime(long personNo) throws SQLException { + return qm.toType(selectBirthDate, new TypeReference() {}, personNo); + } + + @Override + public Year getYearInt(long valNo) throws SQLException { + return qm.toType(selectNumVal, new TypeReference() {}, valNo); + } + + @Override + public Year getYearString(long valNo) throws SQLException { + return qm.toType(selectStrVal, new TypeReference() {}, valNo); + } + + @Override + public ZoneId getZoneId(long valNo) throws SQLException { + return qm.toType(selectStrVal, new TypeReference() {}, valNo); + } + + @Override + public ZoneOffset getZoneOffsetInt(long valNo) throws SQLException { + return qm.toType(selectNumVal, new TypeReference() {}, valNo); + } + + @Override + public ZoneOffset getZoneOffsetString(long valNo) throws SQLException { + return qm.toType(selectStrVal, new TypeReference() {}, valNo); + } + + //IFJAVA8_END +} diff --git a/test/src/test/java/com/moparisthebest/jdbc/QueryMapperTest.java b/test/src/test/java/com/moparisthebest/jdbc/QueryMapperTest.java index 270c30b..0db033a 100644 --- a/test/src/test/java/com/moparisthebest/jdbc/QueryMapperTest.java +++ b/test/src/test/java/com/moparisthebest/jdbc/QueryMapperTest.java @@ -3,6 +3,7 @@ package com.moparisthebest.jdbc; import com.moparisthebest.jdbc.codegen.JdbcMapperFactory; import com.moparisthebest.jdbc.codegen.QmDao; import com.moparisthebest.jdbc.codegen.QueryMapperQmDao; +import com.moparisthebest.jdbc.codegen.QueryMapperTypeQmDao; import com.moparisthebest.jdbc.dto.*; import com.moparisthebest.jdbc.util.ResultSetIterable; import org.junit.*; @@ -117,15 +118,28 @@ public class QueryMapperTest { } protected QmDao qm; + protected final int qmDaoType; protected final ResultSetMapper rsm; - public QueryMapperTest(final ResultSetMapper rsm) { + public QueryMapperTest(final int qmDaoType, final ResultSetMapper rsm) { + this.qmDaoType = qmDaoType; this.rsm = rsm; } @Before public void open() { - qm = this.rsm == null ? JdbcMapperFactory.create(QmDao.class, conn) : new QueryMapperQmDao(conn, rsm); + switch (qmDaoType) { + case 0: + this.qm = new QueryMapperQmDao(conn, rsm); + return; + case 1: + this.qm = new QueryMapperTypeQmDao(conn, rsm); + return; + case 2: + this.qm = JdbcMapperFactory.create(QmDao.class, conn); + return; + } + throw new RuntimeException("unknown qmDaoType"); } @After @@ -137,11 +151,17 @@ public class QueryMapperTest { public static Collection getParameters() { return Arrays.asList(new Object[][] { - { new ResultSetMapper() }, - { new CachingResultSetMapper() }, - { new CaseInsensitiveMapResultSetMapper() }, - { new CompilingResultSetMapper(new CompilingRowToObjectMapper.Cache(true)) }, - { null /* means QmDao.class is used */ }, + { 0, new ResultSetMapper() }, + { 0, new CachingResultSetMapper() }, + { 0, new CaseInsensitiveMapResultSetMapper() }, + { 0, new CompilingResultSetMapper(new CompilingRowToObjectMapper.Cache(true)) }, + + { 1, new ResultSetMapper() }, + { 1, new CachingResultSetMapper() }, + { 1, new CaseInsensitiveMapResultSetMapper() }, + { 1, new CompilingResultSetMapper(new CompilingRowToObjectMapper.Cache(true)) }, + + { 2, null /* means QmDao.class is used */ }, }); }