diff --git a/jOOQ-meta/src/main/java/META-INF/sun-jaxb.episode b/jOOQ-meta/src/main/java/META-INF/sun-jaxb.episode index e0bac97cb5..636ec00030 100644 --- a/jOOQ-meta/src/main/java/META-INF/sun-jaxb.episode +++ b/jOOQ-meta/src/main/java/META-INF/sun-jaxb.episode @@ -221,6 +221,12 @@ + + + + + + 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.]]> + + + + + + + + + + + + + + +