diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/DefaultGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/DefaultGenerator.java index 4b68487801..c714ae1151 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/DefaultGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/DefaultGenerator.java @@ -91,7 +91,6 @@ import org.jooq.impl.StopWatch; import org.jooq.impl.StringUtils; import org.jooq.impl.TableImpl; import org.jooq.impl.TableRecordImpl; -import org.jooq.impl.UDTFieldImpl; import org.jooq.impl.UDTImpl; import org.jooq.impl.UDTRecordImpl; import org.jooq.impl.UpdatableRecordImpl; @@ -1956,7 +1955,7 @@ public class DefaultGenerator implements Generator { private void printUDTColumn(GenerationWriter out, AttributeDefinition attribute, Definition table) throws SQLException { Class declaredMemberClass = UDTField.class; - Class concreteMemberClass = UDTFieldImpl.class; + Class concreteMemberClass = null; printColumnDefinition(out, attribute, table, declaredMemberClass, concreteMemberClass); } @@ -1994,7 +1993,10 @@ public class DefaultGenerator implements Generator { out.print(strategy.getJavaIdentifierUC(column)); out.print(columnDisambiguationSuffix); - if (concreteMemberClass == null) { + if (declaredMemberClass == TableField.class) { + out.print(" = createField"); + } + else if (declaredMemberClass == UDTField.class) { out.print(" = createField"); } else { diff --git a/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/udt/UAddressType.java b/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/udt/UAddressType.java index f5c11149fc..83eaa18f01 100644 --- a/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/udt/UAddressType.java +++ b/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/udt/UAddressType.java @@ -10,7 +10,7 @@ package org.jooq.test.oracle.generatedclasses.udt; comments = "This class is generated by jOOQ") public class UAddressType extends org.jooq.impl.UDTImpl { - private static final long serialVersionUID = 983448138; + private static final long serialVersionUID = -712150981; /** * The singleton instance of U_ADDRESS_TYPE @@ -33,32 +33,32 @@ public class UAddressType extends org.jooq.impl.UDTImpl STREET = new org.jooq.impl.UDTFieldImpl("STREET", org.jooq.test.oracle.generatedclasses.udt.UStreetType.U_STREET_TYPE.getDataType(), U_ADDRESS_TYPE); + public static final org.jooq.UDTField STREET = createField("STREET", org.jooq.test.oracle.generatedclasses.udt.UStreetType.U_STREET_TYPE.getDataType(), U_ADDRESS_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField ZIP = new org.jooq.impl.UDTFieldImpl("ZIP", org.jooq.impl.SQLDataType.VARCHAR, U_ADDRESS_TYPE); + public static final org.jooq.UDTField ZIP = createField("ZIP", org.jooq.impl.SQLDataType.VARCHAR, U_ADDRESS_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField CITY = new org.jooq.impl.UDTFieldImpl("CITY", org.jooq.impl.SQLDataType.VARCHAR, U_ADDRESS_TYPE); + public static final org.jooq.UDTField CITY = createField("CITY", org.jooq.impl.SQLDataType.VARCHAR, U_ADDRESS_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField COUNTRY = new org.jooq.impl.UDTFieldImpl("COUNTRY", org.jooq.impl.SQLDataType.VARCHAR, U_ADDRESS_TYPE); + public static final org.jooq.UDTField COUNTRY = createField("COUNTRY", org.jooq.impl.SQLDataType.VARCHAR, U_ADDRESS_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField SINCE = new org.jooq.impl.UDTFieldImpl("SINCE", org.jooq.impl.SQLDataType.DATE, U_ADDRESS_TYPE); + public static final org.jooq.UDTField SINCE = createField("SINCE", org.jooq.impl.SQLDataType.DATE, U_ADDRESS_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField CODE = new org.jooq.impl.UDTFieldImpl("CODE", org.jooq.impl.SQLDataType.INTEGER, U_ADDRESS_TYPE); + public static final org.jooq.UDTField CODE = createField("CODE", org.jooq.impl.SQLDataType.INTEGER, U_ADDRESS_TYPE); /** * No further instances allowed diff --git a/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/udt/UStreetType.java b/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/udt/UStreetType.java index ebd8636009..7fd9fe1b29 100644 --- a/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/udt/UStreetType.java +++ b/jOOQ-test/src/org/jooq/test/oracle/generatedclasses/udt/UStreetType.java @@ -10,7 +10,7 @@ package org.jooq.test.oracle.generatedclasses.udt; comments = "This class is generated by jOOQ") public class UStreetType extends org.jooq.impl.UDTImpl { - private static final long serialVersionUID = 433340382; + private static final long serialVersionUID = 753873137; /** * The singleton instance of U_STREET_TYPE @@ -33,17 +33,17 @@ public class UStreetType extends org.jooq.impl.UDTImpl STREET = new org.jooq.impl.UDTFieldImpl("STREET", org.jooq.impl.SQLDataType.VARCHAR, U_STREET_TYPE); + public static final org.jooq.UDTField STREET = createField("STREET", org.jooq.impl.SQLDataType.VARCHAR, U_STREET_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField NO = new org.jooq.impl.UDTFieldImpl("NO", org.jooq.impl.SQLDataType.VARCHAR, U_STREET_TYPE); + public static final org.jooq.UDTField NO = createField("NO", org.jooq.impl.SQLDataType.VARCHAR, U_STREET_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField FLOORS = new org.jooq.impl.UDTFieldImpl("FLOORS", org.jooq.impl.SQLDataType.INTEGER.asArrayDataType(org.jooq.test.oracle.generatedclasses.udt.records.UNumberArrayRecord.class), U_STREET_TYPE); + public static final org.jooq.UDTField FLOORS = createField("FLOORS", org.jooq.impl.SQLDataType.INTEGER.asArrayDataType(org.jooq.test.oracle.generatedclasses.udt.records.UNumberArrayRecord.class), U_STREET_TYPE); /** * No further instances allowed diff --git a/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/udt/UAddressType.java b/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/udt/UAddressType.java index 639dc768e5..639bb8b17c 100644 --- a/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/udt/UAddressType.java +++ b/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/udt/UAddressType.java @@ -10,7 +10,7 @@ package org.jooq.test.postgres.generatedclasses.udt; comments = "This class is generated by jOOQ") public class UAddressType extends org.jooq.impl.UDTImpl { - private static final long serialVersionUID = 1805761761; + private static final long serialVersionUID = -1666465402; /** * The singleton instance of u_address_type @@ -33,32 +33,32 @@ public class UAddressType extends org.jooq.impl.UDTImpl STREET = new org.jooq.impl.UDTFieldImpl("street", org.jooq.test.postgres.generatedclasses.udt.UStreetType.U_STREET_TYPE.getDataType(), U_ADDRESS_TYPE); + public static final org.jooq.UDTField STREET = createField("street", org.jooq.test.postgres.generatedclasses.udt.UStreetType.U_STREET_TYPE.getDataType(), U_ADDRESS_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField ZIP = new org.jooq.impl.UDTFieldImpl("zip", org.jooq.impl.SQLDataType.VARCHAR, U_ADDRESS_TYPE); + public static final org.jooq.UDTField ZIP = createField("zip", org.jooq.impl.SQLDataType.VARCHAR, U_ADDRESS_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField CITY = new org.jooq.impl.UDTFieldImpl("city", org.jooq.impl.SQLDataType.VARCHAR, U_ADDRESS_TYPE); + public static final org.jooq.UDTField CITY = createField("city", org.jooq.impl.SQLDataType.VARCHAR, U_ADDRESS_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField COUNTRY = new org.jooq.impl.UDTFieldImpl("country", org.jooq.util.postgres.PostgresDataType.VARCHAR.asEnumDataType(org.jooq.test.postgres.generatedclasses.enums.UCountry.class), U_ADDRESS_TYPE); + public static final org.jooq.UDTField COUNTRY = createField("country", org.jooq.util.postgres.PostgresDataType.VARCHAR.asEnumDataType(org.jooq.test.postgres.generatedclasses.enums.UCountry.class), U_ADDRESS_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField SINCE = new org.jooq.impl.UDTFieldImpl("since", org.jooq.impl.SQLDataType.DATE, U_ADDRESS_TYPE); + public static final org.jooq.UDTField SINCE = createField("since", org.jooq.impl.SQLDataType.DATE, U_ADDRESS_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField CODE = new org.jooq.impl.UDTFieldImpl("code", org.jooq.impl.SQLDataType.INTEGER, U_ADDRESS_TYPE); + public static final org.jooq.UDTField CODE = createField("code", org.jooq.impl.SQLDataType.INTEGER, U_ADDRESS_TYPE); /** * No further instances allowed diff --git a/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/udt/UStreetType.java b/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/udt/UStreetType.java index f2a8f02289..3b7e464e14 100644 --- a/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/udt/UStreetType.java +++ b/jOOQ-test/src/org/jooq/test/postgres/generatedclasses/udt/UStreetType.java @@ -10,7 +10,7 @@ package org.jooq.test.postgres.generatedclasses.udt; comments = "This class is generated by jOOQ") public class UStreetType extends org.jooq.impl.UDTImpl { - private static final long serialVersionUID = -2075501201; + private static final long serialVersionUID = -1622828094; /** * The singleton instance of u_street_type @@ -33,17 +33,17 @@ public class UStreetType extends org.jooq.impl.UDTImpl STREET = new org.jooq.impl.UDTFieldImpl("street", org.jooq.impl.SQLDataType.VARCHAR, U_STREET_TYPE); + public static final org.jooq.UDTField STREET = createField("street", org.jooq.impl.SQLDataType.VARCHAR, U_STREET_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField NO = new org.jooq.impl.UDTFieldImpl("no", org.jooq.impl.SQLDataType.VARCHAR, U_STREET_TYPE); + public static final org.jooq.UDTField NO = createField("no", org.jooq.impl.SQLDataType.VARCHAR, U_STREET_TYPE); /** * An uncommented item */ - public static final org.jooq.UDTField FLOORS = new org.jooq.impl.UDTFieldImpl("floors", org.jooq.impl.SQLDataType.INTEGER.getArrayDataType(), U_STREET_TYPE); + public static final org.jooq.UDTField FLOORS = createField("floors", org.jooq.impl.SQLDataType.INTEGER.getArrayDataType(), U_STREET_TYPE); /** * No further instances allowed diff --git a/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java b/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java index 168e6c28b3..b50434c51d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java @@ -49,8 +49,6 @@ import org.jooq.TableField; /** * A common base type for table fields. - *

- * This type is for JOOQ INTERNAL USE only. Do not reference directly * * @author Lukas Eder */ @@ -60,7 +58,7 @@ class TableFieldImpl extends AbstractField implements Ta private final Table table; - public TableFieldImpl(String name, DataType type, Table table) { + TableFieldImpl(String name, DataType type, Table table) { super(name, type); this.table = table; diff --git a/jOOQ/src/main/java/org/jooq/impl/UDTFieldImpl.java b/jOOQ/src/main/java/org/jooq/impl/UDTFieldImpl.java index fde47f08d1..f571053d2a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UDTFieldImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UDTFieldImpl.java @@ -49,18 +49,16 @@ import org.jooq.UDTRecord; /** * A common base type for UDT attributes / fields - *

- * This type is for JOOQ INTERNAL USE only. Do not reference directly * * @author Lukas Eder */ -public class UDTFieldImpl, T> extends AbstractField implements UDTField { +class UDTFieldImpl, T> extends AbstractField implements UDTField { private static final long serialVersionUID = -2211214195583539735L; private final UDT udt; - public UDTFieldImpl(String name, DataType type, UDT udt) { + UDTFieldImpl(String name, DataType type, UDT udt) { super(name, type); this.udt = udt; diff --git a/jOOQ/src/main/java/org/jooq/impl/UDTImpl.java b/jOOQ/src/main/java/org/jooq/impl/UDTImpl.java index 709d00b0d4..f6f0ceb2ce 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UDTImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UDTImpl.java @@ -48,6 +48,7 @@ import org.jooq.Record; import org.jooq.RenderContext; import org.jooq.Schema; import org.jooq.UDT; +import org.jooq.UDTField; import org.jooq.UDTRecord; /** @@ -125,4 +126,15 @@ public class UDTImpl> extends AbstractType implements public final void bind(BindContext context) { throw new UnsupportedOperationException("UDTImpl cannot be used as a true QueryPart"); } + + /** + * Subclasses may call this method to create {@link UDTField} objects that + * are linked to this table. + * + * @param name The name of the field (case-sensitive!) + * @param type The data type of the field + */ + protected static final , T> UDTField createField(String name, DataType type, UDT udt) { + return new UDTFieldImpl(name, type, udt); + } }