From 90202fbb90f68c84d2aa6c33942490a745edfd8e Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 5 May 2014 14:03:17 +0200 Subject: [PATCH] [#3232] Add optional configuration to in order to specify different converters for the same Java type --- .../java/org/jooq/util/AbstractDatabase.java | 9 +++++-- .../util/AbstractTypedElementDefinition.java | 27 ++++++++++++++++--- .../main/resources/xsd/jooq-codegen-3.4.0.xsd | 5 ++++ .../generatedclasses/tables/T_2781.java | 6 ++--- .../tables/records/T_2781Record.java | 6 ++--- .../configuration/lukas/postgres/library.xml | 5 ++-- 6 files changed, 44 insertions(+), 14 deletions(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java index b37acc1cee..75c554b9bc 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java @@ -360,9 +360,14 @@ public abstract class AbstractDatabase implements Database { } @Override - public final CustomType getConfiguredCustomType(String name) { + public final CustomType getConfiguredCustomType(String typeName) { for (CustomType type : configuredCustomTypes) { - if (type.getName().equals(name)) { + if (type == null || (type.getName() == null && type.getType() == null)) { + log.warn("Invalid custom type encountered: " + type); + continue; + } + + if (StringUtils.equals(type.getType() != null ? type.getType() : type.getName(), typeName)) { return type; } } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractTypedElementDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractTypedElementDefinition.java index b08f159c09..c0b83a1701 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractTypedElementDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractTypedElementDefinition.java @@ -50,6 +50,8 @@ import org.jooq.exception.SQLDialectNotSupportedException; import org.jooq.impl.DefaultDataType; import org.jooq.impl.SQLDataType; import org.jooq.tools.JooqLogger; +import org.jooq.tools.StringUtils; +import org.jooq.util.jaxb.CustomType; import org.jooq.util.jaxb.ForcedType; abstract class AbstractTypedElementDefinition @@ -128,7 +130,9 @@ abstract class AbstractTypedElementDefinition // [#677] Forced types for matching regular expressions ForcedType forcedType = db.getConfiguredForcedType(child, definedType); if (forcedType != null) { - log.debug("Forcing type", child + " into " + forcedType.getName()); + String type = getCustomType(db, forcedType.getName()); + + log.info("Forcing type", child + " into " + type); DataType forcedDataType = null; String t = result.getType(); @@ -139,20 +143,35 @@ abstract class AbstractTypedElementDefinition boolean d = result.isDefaulted(); try { - forcedDataType = DefaultDataType.getDataType(db.getDialect(), forcedType.getName(), p, s); + forcedDataType = DefaultDataType.getDataType(db.getDialect(), type, p, s); } catch (SQLDialectNotSupportedException ignore) {} // [#677] SQLDataType matches are actual type-rewrites if (forcedDataType != null) { - result = new DefaultDataTypeDefinition(db, child.getSchema(), forcedType.getName(), l, p, s, n, d); + result = new DefaultDataTypeDefinition(db, child.getSchema(), type, l, p, s, n, d); } // Other forced types are UDT's, enums, etc. else { - result = new DefaultDataTypeDefinition(db, child.getSchema(), t, l, p, s, n, d, forcedType.getName()); + result = new DefaultDataTypeDefinition(db, child.getSchema(), t, l, p, s, n, d, type); } } return result; } + + private static String getCustomType(Database db, String name) { + for (CustomType type : db.getConfiguredCustomTypes()) { + if (name.equals(type.getName())) { + if (!StringUtils.isBlank(type.getType())) { + return type.getType(); + } + else { + return type.getName(); + } + } + } + + return name; + } } diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.4.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.4.0.xsd index 52be5a4ca3..ffa2eb7813 100644 --- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.4.0.xsd +++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.4.0.xsd @@ -485,6 +485,11 @@ + + + diff --git a/jOOQ-test/src/test/java/org/jooq/test/postgres/generatedclasses/tables/T_2781.java b/jOOQ-test/src/test/java/org/jooq/test/postgres/generatedclasses/tables/T_2781.java index 5b964b4233..e85da51e0a 100644 --- a/jOOQ-test/src/test/java/org/jooq/test/postgres/generatedclasses/tables/T_2781.java +++ b/jOOQ-test/src/test/java/org/jooq/test/postgres/generatedclasses/tables/T_2781.java @@ -9,7 +9,7 @@ package org.jooq.test.postgres.generatedclasses.tables; @java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class T_2781 extends org.jooq.impl.TableImpl { - private static final long serialVersionUID = -56691512; + private static final long serialVersionUID = 605276217; /** * The singleton instance of public.t_2781 @@ -27,12 +27,12 @@ public class T_2781 extends org.jooq.impl.TableImplpublic.t_2781.org. */ - public final org.jooq.TableField ORG = createField("org", org.jooq.impl.SQLDataType.CLOB, this, ""); + public final org.jooq.TableField org_ = createField("org", org.jooq.impl.SQLDataType.CLOB, this, ""); /** * The column public.t_2781.jooq. */ - public final org.jooq.TableField JOOQ = createField("jooq", org.jooq.impl.SQLDataType.CLOB, this, ""); + public final org.jooq.TableField jooq = createField("jooq", org.jooq.impl.SQLDataType.CLOB, this, ""); /** * Create a public.t_2781 table reference diff --git a/jOOQ-test/src/test/java/org/jooq/test/postgres/generatedclasses/tables/records/T_2781Record.java b/jOOQ-test/src/test/java/org/jooq/test/postgres/generatedclasses/tables/records/T_2781Record.java index d30d7d453f..4458a96bc5 100644 --- a/jOOQ-test/src/test/java/org/jooq/test/postgres/generatedclasses/tables/records/T_2781Record.java +++ b/jOOQ-test/src/test/java/org/jooq/test/postgres/generatedclasses/tables/records/T_2781Record.java @@ -9,7 +9,7 @@ package org.jooq.test.postgres.generatedclasses.tables.records; @java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class T_2781Record extends org.jooq.impl.TableRecordImpl implements org.jooq.Record2, org.jooq.test.postgres.generatedclasses.tables.interfaces.IT_2781 { - private static final long serialVersionUID = -579115035; + private static final long serialVersionUID = -1293660246; /** * Setter for public.t_2781.org. @@ -68,7 +68,7 @@ public class T_2781Record extends org.jooq.impl.TableRecordImpl field1() { - return org.jooq.test.postgres.generatedclasses.tables.T_2781.T_2781.ORG; + return org.jooq.test.postgres.generatedclasses.tables.T_2781.T_2781.org_; } /** @@ -76,7 +76,7 @@ public class T_2781Record extends org.jooq.impl.TableRecordImpl field2() { - return org.jooq.test.postgres.generatedclasses.tables.T_2781.T_2781.JOOQ; + return org.jooq.test.postgres.generatedclasses.tables.T_2781.T_2781.jooq; } /** diff --git a/jOOQ-test/src/test/resources/org/jooq/configuration/lukas/postgres/library.xml b/jOOQ-test/src/test/resources/org/jooq/configuration/lukas/postgres/library.xml index 1117fdb33d..5b49b40cb6 100644 --- a/jOOQ-test/src/test/resources/org/jooq/configuration/lukas/postgres/library.xml +++ b/jOOQ-test/src/test/resources/org/jooq/configuration/lukas/postgres/library.xml @@ -29,7 +29,8 @@ true - org.jooq.test._.converters.Boolean_10 + B10 + org.jooq.test._.converters.Boolean_10 org.jooq.test._.converters.Boolean_10_Converter @@ -107,7 +108,7 @@ (?i:(.*?.)?T_BOOLEANS.TRUE_FALSE_UC) - org.jooq.test._.converters.Boolean_10 + B10 (?i:(.*?.)?T_BOOLEANS.ONE_ZERO)