From 4bf6ff3e526ef7883648c7030bb97e88c94da2e9 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 22 Feb 2023 16:42:56 +0100 Subject: [PATCH] [jOOQ/jOOQ#12214] onKey(ForeignKey) does not work when tables are aliased --- jOOQ/src/main/java/org/jooq/impl/JoinTable.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java index b02a3e2d3f..bfeb2ab7e7 100755 --- a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java @@ -776,12 +776,17 @@ implements @Override public final J onKey(ForeignKey key) { - if (containsUnaliasedTable(lhs, key.getTable())) - return onKey(key, lhs, rhs); - else if (containsUnaliasedTable(rhs, key.getTable())) - return onKey(key, rhs, lhs); - throw onKeyException(OnKeyExceptionReason.NOT_FOUND, null, null); + // [#12214] Unlike onKey(TableField...), where the argument field is + // expected to be a referencing field, not a referenced field, + // here we have to check both ends of the key to avoid + // ambiguities + if (containsUnaliasedTable(lhs, key.getTable()) && containsUnaliasedTable(rhs, key.getKey().getTable())) + return onKey(key, lhs, rhs); + else if (containsUnaliasedTable(rhs, key.getTable()) && containsUnaliasedTable(lhs, key.getKey().getTable())) + return onKey(key, rhs, lhs); + else + throw onKeyException(OnKeyExceptionReason.NOT_FOUND, null, null); } private final J onKey(ForeignKey key, Table fk, Table pk) {