From 181d838797d8238edd52576df6b7d3827cceb797 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 28 Feb 2024 17:44:50 +0100 Subject: [PATCH] [jOOQ/jOOQ#11083] DataType should cache null_() and notNull() variants --- .../java/org/jooq/impl/AbstractDataTypeX.java | 2 +- .../java/org/jooq/impl/BuiltInDataType.java | 24 +++++++++++++++++++ jOOQ/src/main/java/org/jooq/impl/Val.java | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) 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;