diff --git a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeResultSetMapper.java b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeResultSetMapper.java index 33850cc..b9cba92 100644 --- a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeResultSetMapper.java +++ b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeResultSetMapper.java @@ -349,7 +349,7 @@ public class CompileTimeResultSetMapper { if(cleaner == null) w.write("ret"); else { - w.append(cleaner).append(".clean(ret)"); + w.append(cleaner).append(" == null ? ret : ").append(cleaner).append(".clean(ret)"); } return w; } diff --git a/test/src/main/java/com/moparisthebest/jdbc/codegen/CleaningPersonDao.java b/test/src/main/java/com/moparisthebest/jdbc/codegen/CleaningPersonDao.java new file mode 100644 index 0000000..1c3179d --- /dev/null +++ b/test/src/main/java/com/moparisthebest/jdbc/codegen/CleaningPersonDao.java @@ -0,0 +1,15 @@ +package com.moparisthebest.jdbc.codegen; + +import com.moparisthebest.jdbc.Cleaner; +import com.moparisthebest.jdbc.dto.FieldPerson; + +import java.sql.SQLException; + +@JdbcMapper.Mapper( + cachePreparedStatements = JdbcMapper.OptionalBool.FALSE + , allowReflection = JdbcMapper.OptionalBool.TRUE +) +public interface CleaningPersonDao { + @JdbcMapper.SQL(value = "SELECT person_no, first_name, last_name, birth_date FROM person WHERE person_no = {personNo}") + FieldPerson getPerson(long personNo, Cleaner personCleaner) throws SQLException; +} diff --git a/test/src/test/java/com/moparisthebest/jdbc/CleaningQueryMapperTest.java b/test/src/test/java/com/moparisthebest/jdbc/CleaningQueryMapperTest.java index ce334cf..60db7d4 100644 --- a/test/src/test/java/com/moparisthebest/jdbc/CleaningQueryMapperTest.java +++ b/test/src/test/java/com/moparisthebest/jdbc/CleaningQueryMapperTest.java @@ -1,5 +1,8 @@ package com.moparisthebest.jdbc; +import com.moparisthebest.jdbc.codegen.CleaningPersonDao; +import com.moparisthebest.jdbc.codegen.JdbcMapper; +import com.moparisthebest.jdbc.codegen.JdbcMapperFactory; import com.moparisthebest.jdbc.dto.*; import org.junit.*; import org.junit.runner.RunWith; @@ -35,15 +38,21 @@ public class CleaningQueryMapperTest { } protected QueryMapper qm; + protected CleaningPersonDao cleaningPersonDao; + protected final Cleaner personCleaner; protected final ResultSetMapper rsm; - public CleaningQueryMapperTest(final ResultSetMapper rsm) { + public CleaningQueryMapperTest(final Cleaner personCleaner, final ResultSetMapper rsm) { + this.personCleaner = personCleaner; this.rsm = rsm; } @Before public void open() { - this.qm = new QueryMapper(conn, rsm); + if(rsm == null) + this.cleaningPersonDao = JdbcMapperFactory.create(CleaningPersonDao.class, conn); + else + this.qm = new QueryMapper(conn, rsm); } @After @@ -61,9 +70,10 @@ public class CleaningQueryMapperTest { } }; return Arrays.asList(new Object[][] { - { new CleaningResultSetMapper(personCleaner) }, - { new CleaningCachingResultSetMapper(personCleaner) }, - { new CleaningCompilingResultSetMapper(personCleaner, new CompilingRowToObjectMapper.Cache(true)) }, + { null, new CleaningResultSetMapper(personCleaner) }, + { null, new CleaningCachingResultSetMapper(personCleaner) }, + { null, new CleaningCompilingResultSetMapper(personCleaner, new CompilingRowToObjectMapper.Cache(true)) }, + { personCleaner, null }, }); } @@ -72,7 +82,10 @@ public class CleaningQueryMapperTest { @Test public void testFieldRegularPerson() throws Throwable { final Person expected = fieldPerson1; - final Person actual = qm.toObject(personRegular, expected.getClass(), expected.getPersonNo()); + final Person actual = this.cleaningPersonDao == null ? + qm.toObject("SELECT * FROM person WHERE person_no = ?", expected.getClass(), expected.getPersonNo()) + : + this.cleaningPersonDao.getPerson(expected.getPersonNo(), personCleaner); assertEquals(expected.getFirstName() + " " + expected.getLastName(), actual.getFirstName()); assertNull(actual.getLastName()); } diff --git a/test/src/test/java/com/moparisthebest/jdbc/QueryRunnerTest.java b/test/src/test/java/com/moparisthebest/jdbc/QueryRunnerTest.java index e4b4183..9293017 100644 --- a/test/src/test/java/com/moparisthebest/jdbc/QueryRunnerTest.java +++ b/test/src/test/java/com/moparisthebest/jdbc/QueryRunnerTest.java @@ -23,6 +23,7 @@ public class QueryRunnerTest { private void testPerson(final Person expected, final String query) throws Throwable { //final QueryRunner lqr = qr.withFactory(() -> new ListQueryMapper(QueryMapperTest::getConnection)); + final int[] failCount = new int[]{0}; final Person actual = //qr.run( //qr.runRetry( @@ -31,8 +32,8 @@ public class QueryRunnerTest { new QueryRunner.Runner() { @Override public Person run(final QueryMapper qm) throws SQLException { - if(Math.random() < 0.5) { - System.out.println("fake fail"); + if(++failCount[0] < 5) { + //System.out.println("fake fail"); throw new SQLException("fake 50% failure rate"); } return qm.toObject(query, expected.getClass(), expected.getPersonNo());