diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/JoinTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/JoinTests.java index 905da3743d..bcc3f4776e 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/JoinTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/JoinTests.java @@ -495,6 +495,28 @@ extends BaseTest b = TBook().as("b"); + Table bs = TBookStore().as("bs"); + Result> result4 = + create().select(b.field(TBook_ID()), bs.field(TBookStore_NAME())) + .from(b) + .join(TBookToBookStore()).onKey() + .join(bs).onKey() + .orderBy(b.field(TBook_ID()), bs.field(TBookStore_NAME())) + .fetch(); + + assertEquals(6, result4.size()); + assertEquals(asList(1, 1, 2, 3, 3, 3), result4.getValues(0)); + assertEquals(asList( + "Ex Libris", "Orell Füssli", "Orell Füssli", + "Buchhandlung im Volkshaus", "Ex Libris", "Orell Füssli"), result4.getValues(1)); + } + @Test public void testInverseAndNestedJoin() throws Exception { diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index 7265320426..a29bd306b2 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -1956,6 +1956,11 @@ public abstract class jOOQAbstractTest< new JoinTests(this).testJoinOnKey(); } + @Test + public void testJoinOnKeyWithAlias() throws Exception { + new JoinTests(this).testJoinOnKeyWithAlias(); + } + @Test public void testInverseAndNestedJoin() throws Exception { new JoinTests(this).testInverseAndNestedJoin(); diff --git a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java index b7707dc11d..173d0ce383 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java @@ -477,7 +477,7 @@ class JoinTable extends AbstractTable implements TableOptionalOnStep, Ta throw onKeyException(); } - @SuppressWarnings("unchecked") + @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public final JoinTable onKey(ForeignKey key) { JoinTable result = this; @@ -486,7 +486,11 @@ class JoinTable extends AbstractTable implements TableOptionalOnStep, Ta TableField[] referenced = key.getKey().getFieldsArray(); for (int i = 0; i < references.length; i++) { - result.and(((Field) references[i]).equal((Field) referenced[i])); + Field f1 = references[i]; + Field f2 = referenced[i]; + + // [#2870] TODO: If lhs or rhs are aliased tables, extract the appropriate fields from them + result.and(f1.equal(f2)); } return result;