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 8896f2c..9731d23 100644 --- a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeResultSetMapper.java +++ b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeResultSetMapper.java @@ -44,7 +44,7 @@ public class CompileTimeResultSetMapper { } public final Types types; - public final TypeMirror collectionType, mapType, mapCollectionType, iteratorType, listIteratorType, finishableType, resultSetType, resultSetIterableType; + public final TypeMirror collectionType, mapType, mapCollectionType, iteratorType, listIteratorType, finishableType, resultSetType, resultSetIterableType, byteArrayType; //IFJAVA8_START public final TypeMirror streamType; //IFJAVA8_END @@ -69,6 +69,8 @@ public class CompileTimeResultSetMapper { resultSetIterableType = types.getDeclaredType(elements.getTypeElement(ResultSetIterable.class.getCanonicalName()), types.getWildcardType(null, null)); + byteArrayType = types.getArrayType(types.getPrimitiveType(TypeKind.BYTE)); + //IFJAVA8_START streamType = types.getDeclaredType(elements.getTypeElement(Stream.class.getCanonicalName()), types.getWildcardType(null, null)); //IFJAVA8_END @@ -96,7 +98,7 @@ public class CompileTimeResultSetMapper { //final Class returnType = m.getReturnType(); final TypeMirror returnTypeMirror = eeMethod.getReturnType(); //final Class returnType = typeMirrorToClass(returnTypeMirror); - if (returnTypeMirror.getKind() == TypeKind.ARRAY) { + if (returnTypeMirror.getKind() == TypeKind.ARRAY && !types.isSameType(returnTypeMirror, byteArrayType)) { final TypeMirror componentType = ((ArrayType) returnTypeMirror).getComponentType(); toArray(w, keys, componentType, maxRows, cal, cleaner, reflectionFields); } else if (types.isAssignable(returnTypeMirror, collectionType)) { 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 b0868c4..edbf81a 100644 --- a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeRowToObjectMapper.java +++ b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeRowToObjectMapper.java @@ -76,7 +76,7 @@ public class CompileTimeRowToObjectMapper { } else { _returnTypeClass = returnTypeClass; // detect if we want an array back - componentType = returnTypeClass.getKind() == TypeKind.ARRAY ? ((ArrayType) returnTypeClass).getComponentType() : null; + componentType = returnTypeClass.getKind() == TypeKind.ARRAY && !rsm.types.isSameType(returnTypeClass, rsm.byteArrayType) ? ((ArrayType) returnTypeClass).getComponentType() : null; // detect if returnTypeClass has a constructor that takes a ResultSet, if so, our job couldn't be easier... boolean resultSetConstructor = false, defaultConstructor = false, paramConstructor = false; 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 c02b43c..f612cba 100644 --- a/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java +++ b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java @@ -223,4 +223,8 @@ public interface PersonDAO extends JdbcMapper { ZoneOffset getZoneOffsetStr(long valNo); //IFJAVA8_END + + // test blob + @JdbcMapper.SQL("SELECT some_blob FROM val WHERE val_no = {valNo}") + byte[] getBlob(long valNo); } diff --git a/presto-sqlparser/genPrestoPersonDAO.sh b/presto-sqlparser/genPrestoPersonDAO.sh index a77c17a..044882e 100755 --- a/presto-sqlparser/genPrestoPersonDAO.sh +++ b/presto-sqlparser/genPrestoPersonDAO.sh @@ -1,5 +1,5 @@ #!/bin/bash cd "$(dirname "$0")" -sed -e 's/PersonDAO extends Closeable/PrestoPersonDAO extends PersonDAO/' -e 's@// , sqlParser = SimpleSQLParser.class@ , sqlParser = PrestoSQLParser.class@' ../jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java > src/test/java/com/moparisthebest/jdbc/codegen/PrestoPersonDAO.java +sed -e 's/PersonDAO extends JdbcMapper/PrestoPersonDAO extends PersonDAO/' -e 's@// , sqlParser = SimpleSQLParser.class@ , sqlParser = PrestoSQLParser.class@' ../jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java > src/test/java/com/moparisthebest/jdbc/codegen/PrestoPersonDAO.java 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 fd46e85..2722571 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 @@ -22,7 +22,7 @@ import java.time.*; * Created by mopar on 5/24/17. */ @JdbcMapper.Mapper( -// jndiName = "bob", + jndiName = "bob", // databaseType = JdbcMapper.DatabaseType.ORACLE cachePreparedStatements = JdbcMapper.OptionalBool.FALSE , sqlParser = PrestoSQLParser.class @@ -223,4 +223,8 @@ public interface PrestoPersonDAO extends PersonDAO { ZoneOffset getZoneOffsetStr(long valNo); //IFJAVA8_END + + // test blob + @JdbcMapper.SQL("SELECT some_blob FROM val WHERE val_no = {valNo}") + byte[] getBlob(long valNo); }