diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java index 1e81448f81..2a4bce685b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java @@ -65,6 +65,8 @@ import static org.jooq.impl.QOM.JoinHint.LOOP; import static org.jooq.impl.QOM.JoinHint.MERGE; import static org.jooq.impl.Tools.EMPTY_FIELD; import static org.jooq.impl.Tools.EMPTY_NAME; +import static org.jooq.impl.Tools.EMPTY_TABLE_FIELD; +import static org.jooq.impl.Tools.anyMatch; import static org.jooq.impl.Tools.map; import static org.jooq.impl.Tools.traverseJoins; import static org.jooq.impl.Tools.unwrap; @@ -73,7 +75,9 @@ import java.sql.Timestamp; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; import java.util.function.BiFunction; import java.util.function.Function; @@ -525,6 +529,59 @@ implements return null; } + static final record PrimaryKeyWithEmbeddables(UniqueKey primaryKey) {} + + transient PrimaryKeyWithEmbeddables primaryKeyWithEmbeddables; + + /** + * [#15873] [#15875] Embeddable keys are currently listing their embedded + * columns, which may have been replaced. + */ + @SuppressWarnings("unchecked") + final UniqueKey getPrimaryKeyWithEmbeddables() { + if (primaryKeyWithEmbeddables == null) { + UniqueKey uniqueKey = getPrimaryKey(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + primaryKeyWithEmbeddables = new PrimaryKeyWithEmbeddables<>(uniqueKey); + } + + return primaryKeyWithEmbeddables.primaryKey; + } + /** * {@inheritDoc} *

diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java index a017a1438a..188ea03401 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java @@ -329,6 +329,10 @@ public class DefaultDataType extends AbstractDataTypeX { this(dialect, null, type, systemName(typeName), typeName, castTypeName, null, null, null, Nullability.DEFAULT, null); } + DefaultDataType(SQLDialect dialect, Class type, String typeName, Nullability nullability) { + this(dialect, null, type, systemName(typeName), typeName, typeName, null, null, null, nullability, null); + } + DefaultDataType(SQLDialect dialect, Class type, Name qualifiedTypeName) { this(dialect, null, type, qualifiedTypeName, null, null, null, null, null, Nullability.DEFAULT, null); }