diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java
index 60d2d1288c..fb80d84f92 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java
@@ -78,6 +78,7 @@ import org.jooq.meta.jaxb.CatalogMappingType;
import org.jooq.meta.jaxb.CustomType;
import org.jooq.meta.jaxb.EnumType;
import org.jooq.meta.jaxb.ForcedType;
+import org.jooq.meta.jaxb.ForcedTypeObjectType;
import org.jooq.meta.jaxb.Nullability;
import org.jooq.meta.jaxb.RegexFlag;
import org.jooq.meta.jaxb.SchemaMappingType;
@@ -1406,6 +1407,15 @@ public abstract class AbstractDatabase implements Database {
String expression = StringUtils.defaultIfNull(forcedType.getExpressions(), forcedType.getExpression());
String types = forcedType.getTypes();
Nullability nullability = forcedType.getNullability();
+ ForcedTypeObjectType objectType = forcedType.getObjectType();
+
+ if ( (objectType != null && objectType != ForcedTypeObjectType.ALL)
+ && ((objectType == ForcedTypeObjectType.ATTRIBUTE && !(definition instanceof AttributeDefinition))
+ || (objectType == ForcedTypeObjectType.COLUMN && !(definition instanceof ColumnDefinition))
+ || (objectType == ForcedTypeObjectType.ELEMENT && !(definition instanceof ArrayDefinition))
+ || (objectType == ForcedTypeObjectType.PARAMETER && !(definition instanceof ParameterDefinition))
+ || (objectType == ForcedTypeObjectType.SEQUENCE && !(definition instanceof SequenceDefinition))))
+ continue forcedTypeLoop;
if ( (nullability != null && nullability != Nullability.ALL)
&& ((nullability == Nullability.NOT_NULL && definedType.isNullable())
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/ForcedType.java b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/ForcedType.java
index b4f918aa86..dd61889b7a 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/ForcedType.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/ForcedType.java
@@ -53,6 +53,9 @@ public class ForcedType implements Serializable
@XmlElement(defaultValue = "ALL")
@XmlSchemaType(name = "string")
protected Nullability nullability = Nullability.ALL;
+ @XmlElement(defaultValue = "ALL")
+ @XmlSchemaType(name = "string")
+ protected ForcedTypeObjectType objectType = ForcedTypeObjectType.ALL;
/**
* The name (in {@link org.jooq.impl.SQLDataType}) to force any matches to
@@ -276,6 +279,30 @@ public class ForcedType implements Serializable
this.nullability = value;
}
+ /**
+ * Whether this forced type should apply to all object types, or only to specific ones
+ *
+ * @return
+ * possible object is
+ * {@link ForcedTypeObjectType }
+ *
+ */
+ public ForcedTypeObjectType getObjectType() {
+ return objectType;
+ }
+
+ /**
+ * Sets the value of the objectType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link ForcedTypeObjectType }
+ *
+ */
+ public void setObjectType(ForcedTypeObjectType value) {
+ this.objectType = value;
+ }
+
public ForcedType withName(String value) {
setName(value);
return this;
@@ -321,6 +348,11 @@ public class ForcedType implements Serializable
return this;
}
+ public ForcedType withObjectType(ForcedTypeObjectType value) {
+ setObjectType(value);
+ return this;
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
@@ -369,6 +401,11 @@ public class ForcedType implements Serializable
sb.append(nullability);
sb.append("");
}
+ if (objectType!= null) {
+ sb.append("");
+ sb.append(objectType);
+ sb.append("");
+ }
return sb.toString();
}
@@ -465,6 +502,15 @@ public class ForcedType implements Serializable
return false;
}
}
+ if (objectType == null) {
+ if (other.objectType!= null) {
+ return false;
+ }
+ } else {
+ if (!objectType.equals(other.objectType)) {
+ return false;
+ }
+ }
return true;
}
@@ -481,6 +527,7 @@ public class ForcedType implements Serializable
result = ((prime*result)+((expressions == null)? 0 :expressions.hashCode()));
result = ((prime*result)+((types == null)? 0 :types.hashCode()));
result = ((prime*result)+((nullability == null)? 0 :nullability.hashCode()));
+ result = ((prime*result)+((objectType == null)? 0 :objectType.hashCode()));
return result;
}
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/ForcedTypeObjectType.java b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/ForcedTypeObjectType.java
new file mode 100644
index 0000000000..4d2543808f
--- /dev/null
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/ForcedTypeObjectType.java
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+package org.jooq.meta.jaxb;
+
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * Java class for ForcedTypeObjectType.
+ *
+ *
The following schema fragment specifies the expected content contained within this class.
+ *
+ *
+ * <simpleType name="ForcedTypeObjectType">
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+ * <enumeration value="ALL"/>
+ * <enumeration value="ATTRIBUTE"/>
+ * <enumeration value="COLUMN"/>
+ * <enumeration value="ELEMENT"/>
+ * <enumeration value="PARAMETER"/>
+ * <enumeration value="SEQUENCE"/>
+ * </restriction>
+ * </simpleType>
+ *
+ *
+ */
+@XmlType(name = "ForcedTypeObjectType")
+@XmlEnum
+public enum ForcedTypeObjectType {
+
+ ALL,
+ ATTRIBUTE,
+ COLUMN,
+ ELEMENT,
+ PARAMETER,
+ SEQUENCE;
+
+ public String value() {
+ return name();
+ }
+
+ public static ForcedTypeObjectType fromValue(String v) {
+ return valueOf(v);
+ }
+
+}
diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.12.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.12.0.xsd
index ebcf081659..f9e3d67e19 100644
--- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.12.0.xsd
+++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.12.0.xsd
@@ -873,9 +873,24 @@ type. If provided, both "expression" and "types" must match.]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+