diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java index 734b9f3c5f..d0694bf8b7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java @@ -38,6 +38,7 @@ package org.jooq.impl; import static org.jooq.impl.SQLDataType.BLOB; import static org.jooq.impl.SQLDataType.CLOB; import static org.jooq.impl.SQLDataType.NCLOB; +import static org.jooq.tools.reflect.Reflect.wrapper; import java.lang.reflect.Array; import java.math.BigDecimal; @@ -596,6 +597,9 @@ public class DefaultDataType implements DataType { public static DataType getDataType(SQLDialect dialect, Class type) { + // Treat primitive types the same way as their respective wrapper types + type = (Class) wrapper(type); + // Recurse for arrays if (byte[].class != type && type.isArray()) { return (DataType) getDataType(dialect, type.getComponentType()).getArrayDataType(); diff --git a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java index c61da785d1..5104584681 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java @@ -179,7 +179,23 @@ class MetaImpl implements Meta { try { columnCache = executor - .fetch(meta().getColumns(null, getName(), "%", "%")) + .fetch( + meta().getColumns(null, getName(), "%", "%"), + + // Work around a bug in the SQL Server JDBC driver by + // coercing data types to the expected types + // The bug was reported here: + // https://connect.microsoft.com/SQLServer/feedback/details/775425/jdbc-4-0-databasemetadata-getcolumns-returns-a-resultset-whose-resultsetmetadata-is-inconsistent + String.class, // TABLE_CAT + String.class, // TABLE_SCHEM + String.class, // TABLE_NAME + String.class, // COLUMN_NAME + int.class, // DATA_TYPE + String.class, // TYPE_NAME + int.class, // COLUMN_SIZE + String.class, // BUFFER_LENGTH + int.class // DECIMAL_DIGITS + ) .intoGroups(fieldByName(String.class, "TABLE_NAME")); List> result = new ArrayList>();