diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/DefaultDataTypeDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/DefaultDataTypeDefinition.java index 5290a39b32..ef9a936fa7 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/DefaultDataTypeDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/DefaultDataTypeDefinition.java @@ -48,6 +48,7 @@ import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.regex.Pattern; import org.jooq.Name; import org.jooq.SQLDialect; @@ -67,6 +68,8 @@ import org.jooq.types.UShort; */ public class DefaultDataTypeDefinition implements DataTypeDefinition { + private static final Pattern P_UNSIGNED = Pattern.compile("(?i:\\s*unsigned)"); + private final Database database; private final SchemaDefinition schema; private final String type; @@ -127,6 +130,10 @@ public class DefaultDataTypeDefinition implements DataTypeDefinition { this.database = database; this.schema = schema; + // [#519] [#17135] Some types have unsigned versions + if (!database.supportsUnsignedTypes() && typeName.toLowerCase().endsWith("unsigned")) + typeName = P_UNSIGNED.matcher(typeName).replaceFirst(""); + // [#3420] Some databases report NULL as a data type, e.g. Oracle for (some) AQ tables this.type = typeName == null ? "OTHER" : typeName; this.userType = userType; diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLRoutineDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLRoutineDefinition.java index 434bf925ec..1e9e75888d 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLRoutineDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLRoutineDefinition.java @@ -113,12 +113,9 @@ public class MySQLRoutineDefinition extends AbstractRoutineDefinition { String inOut = record.get(PARAMETERS.PARAMETER_MODE); String dataType = record.get(PARAMETERS.DATA_TYPE); - // [#519] Some types have unsigned versions - if (getDatabase().supportsUnsignedTypes()) { - if (asList("tinyint", "smallint", "mediumint", "int", "bigint").contains(dataType.toLowerCase())) { - if (record.get(PARAMETERS.DTD_IDENTIFIER).toLowerCase().contains("unsigned")) { - dataType += "unsigned"; - } + if (asList("tinyint", "smallint", "mediumint", "int", "bigint").contains(dataType.toLowerCase())) { + if (record.get(PARAMETERS.DTD_IDENTIFIER).toLowerCase().contains("unsigned")) { + dataType += "unsigned"; } } diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLTableDefinition.java index c71ccf2982..19f6829060 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLTableDefinition.java @@ -113,9 +113,6 @@ public class MySQLTableDefinition extends AbstractTableDefinition { String dataType = record.get(COLUMNS.DATA_TYPE); - // [#519] Some types have unsigned versions - boolean unsigned = getDatabase().supportsUnsignedTypes(); - // [#7719] boolean displayWidths = getDatabase().integerDisplayWidths(); @@ -131,7 +128,7 @@ public class MySQLTableDefinition extends AbstractTableDefinition { boolean generated = generationOption != null; columnTypeFix: - if (unsigned || displayWidths) { + if (displayWidths) { if (asList("tinyint", "smallint", "mediumint", "int", "bigint").contains(dataType.toLowerCase())) { String columnType = record.get(COLUMNS.COLUMN_TYPE).toLowerCase(); @@ -148,7 +145,7 @@ public class MySQLTableDefinition extends AbstractTableDefinition { String mUnsigned = matcher.group(3); dataType = mType - + (unsigned && mUnsigned != null ? mUnsigned : "") + + (mUnsigned != null ? mUnsigned : "") + (displayWidths && mPrecision != null ? mPrecision : ""); } }