diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/GeneralTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/GeneralTests.java index bd6e5dd662..d45bd6e766 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/GeneralTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/GeneralTests.java @@ -658,17 +658,24 @@ extends BaseTest ua = (UpdatableTable) a; UpdatableTable ub = (UpdatableTable) b; assertEquals(2, ua.getMainKey().getReferences().size()); - assertEquals(b, ua.getMainKey().getReferences().get(0).getTable()); - assertEquals(b, ua.getMainKey().getReferences().get(1).getTable()); + assertEquals(TBook(), ua.getMainKey().getReferences().get(0).getTable()); + assertEquals(TBook(), ua.getMainKey().getReferences().get(1).getTable()); assertTrue(b.getReferences().containsAll(ua.getReferencesFrom(b))); assertTrue(b.getReferences().containsAll(ub.getReferencesFrom(a))); assertEquals(b.getReferencesTo(a), ua.getReferencesFrom(b)); + assertEquals(TBook().getReferencesTo(a), ua.getReferencesFrom(b)); + assertEquals(b.getReferencesTo(a), TAuthor().getReferencesFrom(b)); } } else { diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java index e714e4fd94..8d4aa77ed8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java @@ -121,6 +121,25 @@ abstract class AbstractTable extends AbstractType implement if (other.equals(reference.getKey().getTable())) { result.add((ForeignKey) reference); } + + // TODO: Refactor the following two blocks and make things more OO + // [#1460] In case the other table was aliased using + else if (other instanceof TableImpl) { + Table aliased = ((TableImpl) other).getAliasedTable(); + + if (aliased != null && aliased.equals(reference.getKey().getTable())) { + result.add((ForeignKey) reference); + } + } + + // [#1460] In case the other table was aliased using + else if (other instanceof TableAlias) { + Table aliased = ((TableAlias) other).getAliasedTable(); + + if (aliased != null && aliased.equals(reference.getKey().getTable())) { + result.add((ForeignKey) reference); + } + } } return Collections.unmodifiableList(result); diff --git a/jOOQ/src/main/java/org/jooq/impl/TableAlias.java b/jOOQ/src/main/java/org/jooq/impl/TableAlias.java index 3d47b38b44..70055a1f30 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableAlias.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableAlias.java @@ -66,6 +66,17 @@ class TableAlias extends AbstractTable { this.aliasProvider = new AliasProviderImpl>(table, alias, wrapInParentheses); } + /** + * Get the aliased table wrapped by this table + */ + Table getAliasedTable() { + if (aliasProvider != null) { + return aliasProvider.getAliasProvider(); + } + + return null; + } + @Override public final List> getReferences() { return aliasProvider.getAliasProvider().getReferences(); diff --git a/jOOQ/src/main/java/org/jooq/impl/TableImpl.java b/jOOQ/src/main/java/org/jooq/impl/TableImpl.java index 24cf5bb577..c37a64ecd3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableImpl.java @@ -80,6 +80,17 @@ public class TableImpl extends AbstractTable { } } + /** + * Get the aliased table wrapped by this table + */ + Table getAliasedTable() { + if (alias != null) { + return alias.getAliasProvider(); + } + + return null; + } + @Override public final List getAttachables0() { if (alias != null) {