[jOOQ/jOOQ#11083] DataType should cache null_() and notNull() variants

This commit is contained in:
Lukas Eder 2024-02-28 17:44:50 +01:00
parent 44c026475d
commit 181d838797
3 changed files with 26 additions and 1 deletions

View File

@ -84,7 +84,7 @@ abstract class AbstractDataTypeX<T> extends AbstractDataType<T> {
);
@Override
public final DataType<T> nullability(Nullability n) {
public /* non-final */ DataType<T> nullability(Nullability n) {
return construct(
precision0(),
scale0(),

View File

@ -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<T> extends DefaultDataType<T> {
public BuiltInDataType(SQLDialect dialect, DataType<T> sqlDataType, String typeName, String castTypeName) {
super(dialect, sqlDataType, typeName, castTypeName);
}
// [#11083] Nullability caches of built-in data types
final DataType<T> cachedNull;
final DataType<T> cachedNotNull;
{
cachedNull = super.nullability(NULL);
cachedNotNull = super.nullability(NOT_NULL);
}
@Override
public final DataType<T> nullability(Nullability n) {
if (n == NULL)
return cachedNull;
else if (n == NOT_NULL)
return cachedNotNull;
else
return super.nullability(n);
}
}

View File

@ -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;