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 728e2fe..d0df435 100644 --- a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeResultSetMapper.java +++ b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeResultSetMapper.java @@ -35,7 +35,7 @@ import static com.moparisthebest.jdbc.codegen.JdbcMapperProcessor.typeMirrorToCl public class CompileTimeResultSetMapper { public final Types types; - public final TypeMirror collectionType, mapType, mapCollectionType, iteratorType, listIteratorType, finishableType, resultSetType, resultSetIterableType, byteArrayType; + public final TypeMirror collectionType, mapType, mapCollectionType, iteratorType, listIteratorType, finishableType, resultSetType, resultSetIterableType, byteArrayType, enumType; //IFJAVA8_START public final TypeMirror streamType; //IFJAVA8_END @@ -58,6 +58,8 @@ public class CompileTimeResultSetMapper { byteArrayType = types.getArrayType(types.getPrimitiveType(TypeKind.BYTE)); + enumType = types.getDeclaredType(elements.getTypeElement(Enum.class.getCanonicalName()), types.getWildcardType(null, null)); + //IFJAVA8_START streamType = types.getDeclaredType(elements.getTypeElement(Stream.class.getCanonicalName()), types.getWildcardType(null, null)); //IFJAVA8_END diff --git a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeRowToObjectMapper.java b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeRowToObjectMapper.java index ffcb2e8..f5245ee 100644 --- a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeRowToObjectMapper.java +++ b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeRowToObjectMapper.java @@ -438,12 +438,11 @@ public class CompileTimeRowToObjectMapper { java.append("ret.finish(rs);\n"); } - public static int getTypeId(TypeMirror classType) { + public int getTypeId(TypeMirror classType) { try { return _tmf.getTypeId(typeMirrorToClass(classType)); } catch (ClassNotFoundException e) { - // todo: what about enums? - return TypeMappingsFactory.TYPE_UNKNOWN; + return rsm.types.isAssignable(classType, rsm.enumType) ? TypeMappingsFactory.TYPE_ENUM : TypeMappingsFactory.TYPE_UNKNOWN; } } diff --git a/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java index a5e9eda..f216b30 100644 --- a/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java +++ b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java @@ -211,6 +211,21 @@ public interface PersonDAO extends JdbcMapper { @JdbcMapper.SQL("SELECT first_name AS M_PERSON_FIRST_NAME FROM person WHERE person_no = {personNo}") CaseSensitivePerson getCaseSensitivePerson(long personNo); + @JdbcMapper.SQL("SELECT first_name, last_name FROM person WHERE person_no = {personNo}") + SameClassPathEnumPerson getSameClassPathEnumPerson(long personNo) throws SQLException; + + @JdbcMapper.SQL("SELECT first_name FROM person WHERE person_no = {personNo}") + SameClassPathEnumPerson getSameClassPathEnumPersonConstructor(long personNo) throws SQLException; + + @JdbcMapper.SQL("SELECT first_name FROM person WHERE person_no = {personNo}") + SameClassPathEnumPerson.FirstName getSameClassPathFirstNameEnum(long personNo) throws SQLException; + + @JdbcMapper.SQL("SELECT str_val as first_name, str_val as last_name FROM val WHERE val_no = 4") + SameClassPathEnumPerson getSameClassPathEnumPersonNull() throws SQLException; + + @JdbcMapper.SQL("SELECT str_val FROM val WHERE val_no = 4") + SameClassPathEnumPerson.FirstName getSameClassPathEnumNull() throws SQLException; + //IFJAVA8_START @JdbcMapper.SQL("SELECT birth_date FROM person WHERE person_no = {personNo}") diff --git a/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/SameClassPathEnumPerson.java b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/SameClassPathEnumPerson.java new file mode 100644 index 0000000..2e2f196 --- /dev/null +++ b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/SameClassPathEnumPerson.java @@ -0,0 +1,67 @@ +package com.moparisthebest.jdbc.codegen; + +import com.moparisthebest.jdbc.dto.Person; + +import java.util.Date; + +public class SameClassPathEnumPerson implements Person { + + public enum FirstName { + First, + Second, + Third, + } + + public FirstName firstName; + public String lastName; + + public SameClassPathEnumPerson() { + } + + public SameClassPathEnumPerson(final FirstName firstName) { + this.firstName = firstName; + } + + @Override + public long getPersonNo() { + return 0; + } + + @Override + public Date getBirthDate() { + return null; + } + + @Override + public String getFirstName() { + return firstName.name(); + } + + @Override + public String getLastName() { + return lastName; + } + + public void setFirstName(final FirstName firstName) { + this.firstName = firstName; + } + + public void setLastName(final String lastName) { + this.lastName = lastName; + } + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (!(o instanceof SameClassPathEnumPerson)) return false; + + final SameClassPathEnumPerson that = (SameClassPathEnumPerson) o; + + return firstName == that.firstName; + } + + @Override + public int hashCode() { + return firstName != null ? firstName.hashCode() : 0; + } +} diff --git a/presto-sqlparser/src/test/java/com/moparisthebest/jdbc/codegen/PrestoPersonDAO.java b/presto-sqlparser/src/test/java/com/moparisthebest/jdbc/codegen/PrestoPersonDAO.java index dca0841..a16f8f0 100644 --- a/presto-sqlparser/src/test/java/com/moparisthebest/jdbc/codegen/PrestoPersonDAO.java +++ b/presto-sqlparser/src/test/java/com/moparisthebest/jdbc/codegen/PrestoPersonDAO.java @@ -211,6 +211,21 @@ public interface PrestoPersonDAO extends PersonDAO { @JdbcMapper.SQL("SELECT first_name AS M_PERSON_FIRST_NAME FROM person WHERE person_no = {personNo}") CaseSensitivePerson getCaseSensitivePerson(long personNo); + @JdbcMapper.SQL("SELECT first_name, last_name FROM person WHERE person_no = {personNo}") + SameClassPathEnumPerson getSameClassPathEnumPerson(long personNo) throws SQLException; + + @JdbcMapper.SQL("SELECT first_name FROM person WHERE person_no = {personNo}") + SameClassPathEnumPerson getSameClassPathEnumPersonConstructor(long personNo) throws SQLException; + + @JdbcMapper.SQL("SELECT first_name FROM person WHERE person_no = {personNo}") + SameClassPathEnumPerson.FirstName getSameClassPathFirstNameEnum(long personNo) throws SQLException; + + @JdbcMapper.SQL("SELECT str_val as first_name, str_val as last_name FROM val WHERE val_no = 4") + SameClassPathEnumPerson getSameClassPathEnumPersonNull() throws SQLException; + + @JdbcMapper.SQL("SELECT str_val FROM val WHERE val_no = 4") + SameClassPathEnumPerson.FirstName getSameClassPathEnumNull() throws SQLException; + //IFJAVA8_START @JdbcMapper.SQL("SELECT birth_date FROM person WHERE person_no = {personNo}")