diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDataTypeX.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDataTypeX.java index 13ec40538d..b629071792 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractDataTypeX.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDataTypeX.java @@ -84,7 +84,7 @@ abstract class AbstractDataTypeX extends AbstractDataType { ); @Override - public final DataType nullability(Nullability n) { + public /* non-final */ DataType nullability(Nullability n) { return construct( precision0(), scale0(), diff --git a/jOOQ/src/main/java/org/jooq/impl/BuiltInDataType.java b/jOOQ/src/main/java/org/jooq/impl/BuiltInDataType.java index f0753dd090..8fe90b37df 100644 --- a/jOOQ/src/main/java/org/jooq/impl/BuiltInDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/BuiltInDataType.java @@ -37,7 +37,11 @@ */ package org.jooq.impl; +import static org.jooq.Nullability.NOT_NULL; +import static org.jooq.Nullability.NULL; + import org.jooq.DataType; +import org.jooq.Nullability; import org.jooq.SQLDialect; import org.jooq.util.postgres.PostgresDataType; @@ -73,4 +77,24 @@ public class BuiltInDataType extends DefaultDataType { public BuiltInDataType(SQLDialect dialect, DataType sqlDataType, String typeName, String castTypeName) { super(dialect, sqlDataType, typeName, castTypeName); } + + // [#11083] Nullability caches of built-in data types + + final DataType cachedNull; + final DataType cachedNotNull; + + { + cachedNull = super.nullability(NULL); + cachedNotNull = super.nullability(NOT_NULL); + } + + @Override + public final DataType nullability(Nullability n) { + if (n == NULL) + return cachedNull; + else if (n == NOT_NULL) + return cachedNotNull; + else + return super.nullability(n); + } } diff --git a/jOOQ/src/main/java/org/jooq/impl/Val.java b/jOOQ/src/main/java/org/jooq/impl/Val.java index 03b43a18e3..e0ce74568c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Val.java +++ b/jOOQ/src/main/java/org/jooq/impl/Val.java @@ -66,6 +66,7 @@ import java.time.Year; import java.util.Arrays; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicLong; import org.jooq.Context; import org.jooq.DataType;