From ccbe04b1b5baf7aa1ccbb69d1b55b422b9546e7c Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 7 Aug 2024 15:49:29 +0200 Subject: [PATCH] [jOOQ/jOOQ#17019] Wrong cast being generated for H2's MySQL style enum types, when a EnumConverter is present --- .../org/jooq/meta/cubrid/CUBRIDDatabase.java | 16 +++---- .../java/org/jooq/meta/h2/H2Database.java | 42 +++++++------------ .../org/jooq/meta/mysql/MySQLDatabase.java | 25 +++++------ 3 files changed, 31 insertions(+), 52 deletions(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/cubrid/CUBRIDDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/cubrid/CUBRIDDatabase.java index 381da0b66b..5477af29f0 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/cubrid/CUBRIDDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/cubrid/CUBRIDDatabase.java @@ -243,18 +243,12 @@ public class CUBRIDDatabase extends AbstractDatabase { String columnType = record.get("Type", String.class); String name = table + "_" + column; - ColumnDefinition columnDefinition = tableDefinition.getColumn(column); - - // [#1137] Avoid generating enum classes for enum types that - // are explicitly forced to another type - if (getConfiguredForcedType(columnDefinition) == null) { - DefaultEnumDefinition definition = new DefaultEnumDefinition(getSchemata().get(0), name, "", true); - for (String string : columnType.replaceAll("ENUM\\(|\\)", "").split(",")) { - definition.addLiteral(string.trim().replaceAll("'", "")); - } - - result.add(definition); + DefaultEnumDefinition definition = new DefaultEnumDefinition(getSchemata().get(0), name, "", true); + for (String string : columnType.replaceAll("ENUM\\(|\\)", "").split(",")) { + definition.addLiteral(string.trim().replaceAll("'", "")); } + + result.add(definition); } } diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2Database.java b/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2Database.java index c88aafbb25..eadf3afa4e 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2Database.java @@ -969,18 +969,13 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase ColumnDefinition columnDefinition = tableDefinition.getColumn(r.value3()); if (columnDefinition != null) { + String name = r.value2() + "_" + r.value3(); + DefaultEnumDefinition definition = new DefaultEnumDefinition(schema, name, "", true); - // [#1137] Avoid generating enum classes for enum types that - // are explicitly forced to another type - if (getConfiguredForcedType(columnDefinition, columnDefinition.getType()) == null) { - String name = r.value2() + "_" + r.value3(); - DefaultEnumDefinition definition = new DefaultEnumDefinition(schema, name, "", true); + for (String string : r.value4()) + definition.addLiteral(string); - for (String string : r.value4()) - definition.addLiteral(string); - - result.add(definition); - } + result.add(definition); } } }); @@ -1019,25 +1014,20 @@ public class H2Database extends AbstractDatabase implements ResultQueryDatabase ColumnDefinition columnDefinition = tableDefinition.getColumn(r.column); if (columnDefinition != null) { + String name = r.table + "_" + r.column; + DefaultEnumDefinition definition = new DefaultEnumDefinition(schema, name, "", true); - // [#1137] Avoid generating enum classes for enum types that - // are explicitly forced to another type - if (getConfiguredForcedType(columnDefinition, columnDefinition.getType()) == null) { - String name = r.table + "_" + r.column; - DefaultEnumDefinition definition = new DefaultEnumDefinition(schema, name, "", true); + CSVReader reader = new CSVReader( + new StringReader(r.type.replaceAll("(^enum\\()|(\\)[^)]*$)", "")) + ,',' // Separator + ,'\'' // Quote character + ,true // Strict quotes + ); - CSVReader reader = new CSVReader( - new StringReader(r.type.replaceAll("(^enum\\()|(\\)[^)]*$)", "")) - ,',' // Separator - ,'\'' // Quote character - ,true // Strict quotes - ); + for (String string : reader.next()) + definition.addLiteral(string); - for (String string : reader.next()) - definition.addLiteral(string); - - result.add(definition); - } + result.add(definition); } } } diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLDatabase.java index d536929b3f..d680d47d68 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/mysql/MySQLDatabase.java @@ -634,24 +634,19 @@ public class MySQLDatabase extends AbstractDatabase implements ResultQueryDataba ColumnDefinition columnDefinition = tableDefinition.getColumn(r.column); if (columnDefinition != null) { + DefaultEnumDefinition definition = new DefaultEnumDefinition(schema, name, r.comment, true); - // [#1137] Avoid generating enum classes for enum types that - // are explicitly forced to another type - if (getConfiguredForcedType(columnDefinition, columnDefinition.getType()) == null) { - DefaultEnumDefinition definition = new DefaultEnumDefinition(schema, name, r.comment, true); + CSVReader reader = new CSVReader( + new StringReader(r.type.replaceAll("(^enum\\()|(\\)$)", "")) + ,',' // Separator + ,'\'' // Quote character + ,true // Strict quotes + ); - CSVReader reader = new CSVReader( - new StringReader(r.type.replaceAll("(^enum\\()|(\\)$)", "")) - ,',' // Separator - ,'\'' // Quote character - ,true // Strict quotes - ); + for (String string : reader.next()) + definition.addLiteral(string); - for (String string : reader.next()) - definition.addLiteral(string); - - result.add(definition); - } + result.add(definition); } } }