diff --git a/jOOQ/src/main/java/org/jooq/InverseForeignKey.java b/jOOQ/src/main/java/org/jooq/InverseForeignKey.java index 3c15a037e1..bd436ea70b 100644 --- a/jOOQ/src/main/java/org/jooq/InverseForeignKey.java +++ b/jOOQ/src/main/java/org/jooq/InverseForeignKey.java @@ -37,14 +37,9 @@ */ package org.jooq; -import java.util.Collection; import java.util.List; -import org.jooq.exception.DataAccessException; - -import org.jetbrains.annotations.Blocking; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * An InverseForeignKey is an inverse {@link ForeignKey}. It diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractContext.java b/jOOQ/src/main/java/org/jooq/impl/AbstractContext.java index f89092958a..e9dd654ff3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractContext.java @@ -49,6 +49,7 @@ import static org.jooq.JoinType.LEFT_OUTER_JOIN; import static org.jooq.conf.InvocationOrder.REVERSE; import static org.jooq.conf.ParamType.INDEXED; import static org.jooq.impl.DSL.noCondition; +import static org.jooq.impl.JoinTable.onKey0; import static org.jooq.impl.Tools.DATAKEY_RESET_IN_SUBQUERY_SCOPE; import static org.jooq.impl.Tools.EMPTY_CLAUSE; import static org.jooq.impl.Tools.EMPTY_QUERYPART; @@ -1209,7 +1210,10 @@ abstract class AbstractContext> extends AbstractScope imple // [#14985] Once explicit join paths stabilise, it should be possible // to omit the ON clause here, and have it generated in JoinTable - result = result.join(e.getValue().joinTree(), type).onKey(e.getKey()); + Table t = e.getValue().joinTree(); + result = result + .join(t, type) + .on(onKey0(e.getKey(), result, t)); } for (Entry, JoinNode> e : pathsToMany.entrySet()) { @@ -1226,7 +1230,10 @@ abstract class AbstractContext> extends AbstractScope imple break; } - result = result.join(e.getValue().joinTree(), type).onKey(e.getKey().getForeignKey()); + Table t = e.getValue().joinTree(); + result = result + .join(t, type) + .on(onKey0(e.getKey().getForeignKey(), t, result)); } return result; diff --git a/jOOQ/src/main/java/org/jooq/impl/Internal.java b/jOOQ/src/main/java/org/jooq/impl/Internal.java index 1d08dc054f..db6f3b0b4f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Internal.java +++ b/jOOQ/src/main/java/org/jooq/impl/Internal.java @@ -292,13 +292,21 @@ public final class Internal { */ @NotNull public static final Name createPathAlias(Table child, ForeignKey path) { - Name name = DSL.name(path.getName()); + return createPathAlias(child, path, ""); + } + + /** + * Factory method for path aliases. + */ + @NotNull + static final Name createPathAlias(Table child, ForeignKey path, String suffix) { + Name name = DSL.name(path.getName() + suffix); if (child instanceof TableImpl t) { if (t.childPath != null) name = createPathAlias(t.path, t.childPath).append(name); else if (t.parentPath != null) - name = createPathAlias(t.path, t.parentPath.getForeignKey()).append(name); + name = createPathAlias(t.path, t.parentPath.getForeignKey(), ".inverse").append(name); else name = child.getQualifiedName().append(name); } diff --git a/jOOQ/src/main/java/org/jooq/impl/InverseReferenceImpl.java b/jOOQ/src/main/java/org/jooq/impl/InverseReferenceImpl.java index c469257c44..fcd6cf2874 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InverseReferenceImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InverseReferenceImpl.java @@ -40,14 +40,12 @@ package org.jooq.impl; import java.util.List; import org.jooq.ConstraintEnforcementStep; -import org.jooq.Record; import org.jooq.ForeignKey; import org.jooq.InverseForeignKey; +import org.jooq.Record; import org.jooq.TableField; import org.jooq.impl.QOM.UTransient; -import org.jetbrains.annotations.NotNull; - /** * @author Lukas Eder */ diff --git a/jOOQ/src/main/java/org/jooq/impl/TableImpl.java b/jOOQ/src/main/java/org/jooq/impl/TableImpl.java index 66c40b31e0..48bf78f863 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableImpl.java @@ -211,7 +211,7 @@ implements } public TableImpl(Table parent, InverseForeignKey parentPath, Table child) { - this(createPathAlias(parent, parentPath.getForeignKey()), null, parent, parentPath, child, null, child.getCommentPart()); + this(createPathAlias(parent, parentPath.getForeignKey(), ".inverse"), null, parent, parentPath, child, null, child.getCommentPart()); } public TableImpl(Name name, Schema schema, Table path, ForeignKey childPath, Table aliased, Field[] parameters, Comment comment) {