diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorEmbedded.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorEmbedded.java index 42251c24e478b7f59d0e152bbbdb533df601f3d8..ce202682611a185cface8869322c269e688b242c 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorEmbedded.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorEmbedded.java @@ -30,6 +30,7 @@ import org.jkiss.dbeaver.model.exec.DBExecUtils; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.load.DatabaseLoadService; import org.jkiss.dbeaver.model.struct.*; +import org.jkiss.dbeaver.model.virtual.DBVUtils; import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.ui.IActiveWorkbenchPart; import org.jkiss.dbeaver.ui.LoadingJob; @@ -246,7 +247,7 @@ public class ERDEditorEmbedded extends ERDEditorPart implements IDatabaseEditor, result.add(rootTable); try { monitor.subTask("Read foreign keys"); - Collection fks = rootTable.getAssociations(monitor); + Collection fks = DBVUtils.getAllAssociations(monitor, rootTable); if (fks != null) { for (DBSEntityAssociation fk : fks) { DBSEntity associatedEntity = fk.getAssociatedEntity(); @@ -264,7 +265,7 @@ public class ERDEditorEmbedded extends ERDEditorPart implements IDatabaseEditor, } try { monitor.subTask("Read references"); - Collection refs = rootTable.getReferences(monitor); + Collection refs = DBVUtils.getAllReferences(monitor, rootTable); if (refs != null) { for (DBSEntityAssociation ref : refs) { result.add(ref.getParentObject()); diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecoratorDefault.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecoratorDefault.java index dd20f960f54d6ed6002ebc72056c455d5d0d84a8..0b2671c08b831b266d430de61015bb5726fecdee 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecoratorDefault.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecoratorDefault.java @@ -31,6 +31,7 @@ import org.jkiss.dbeaver.ext.erd.editor.ERDEditPartFactory; import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.struct.*; +import org.jkiss.dbeaver.model.virtual.DBVUtils; import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.UIIcon; import org.jkiss.utils.CommonUtils; @@ -146,12 +147,12 @@ public class ERDDecoratorDefault implements ERDDecorator { if (attributeVisibility == ERDAttributeVisibility.KEYS) { keyColumns = new HashSet<>(); try { - for (DBSEntityAssociation assoc : CommonUtils.safeCollection(entity.getAssociations(monitor))) { + for (DBSEntityAssociation assoc : DBVUtils.getAllAssociations(monitor, entity)) { if (assoc instanceof DBSEntityReferrer) { keyColumns.addAll(DBUtils.getEntityAttributes(monitor, (DBSEntityReferrer) assoc)); } } - for (DBSEntityConstraint constraint : CommonUtils.safeCollection(entity.getConstraints(monitor))) { + for (DBSEntityConstraint constraint : DBVUtils.getAllConstraints(monitor, entity)) { if (constraint instanceof DBSEntityReferrer) { keyColumns.addAll(DBUtils.getEntityAttributes(monitor, (DBSEntityReferrer) constraint)); } diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDEntity.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDEntity.java index 49c8b6c0a5d3aeab2867bd1ca9fb1b6c950711c0..a00db3c6c6363f6790ba6b9e0e1fd9b0df7fa401 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDEntity.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDEntity.java @@ -28,6 +28,7 @@ import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor; import org.jkiss.dbeaver.model.struct.*; +import org.jkiss.dbeaver.model.virtual.DBVUtils; import org.jkiss.utils.CommonUtils; import java.util.*; @@ -156,7 +157,7 @@ public class ERDEntity extends ERDElement { try { Set fkAttrs = new HashSet<>(); // Make associations - Collection fks = getObject().getAssociations(monitor); + Collection fks = DBVUtils.getAllAssociations(monitor, getObject()); if (fks != null) { for (DBSEntityAssociation fk : fks) { if (fk instanceof DBSEntityReferrer) { diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/virtual/DBVUtils.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/virtual/DBVUtils.java index 95569f24656bd936a4fc021a6103e3d77c2721a6..756c11faff21e6ce3db3af232708ff662c65c954 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/virtual/DBVUtils.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/virtual/DBVUtils.java @@ -249,6 +249,26 @@ public abstract class DBVUtils { return result; } + @NotNull + public static List getAllReferences(@NotNull DBRProgressMonitor monitor, @NotNull DBSEntity onEntity) throws DBException { + List result = new ArrayList<>(); + final Collection realConstraints = onEntity.getReferences(monitor); + if (!CommonUtils.isEmpty(realConstraints)) { + result.addAll(realConstraints); + } +/* + DBVEntity vEntity = getVirtualEntity(entity, false); + if (vEntity != null) { + List vFKs = vEntity.getForeignKeys(); + if (!CommonUtils.isEmpty(vFKs)) { + result.addAll(vFKs); + } + } +*/ + + return result; + } + @NotNull public static DBSEntity getRealEntity(@NotNull DBRProgressMonitor monitor, @NotNull DBSEntity entity) throws DBException { if (entity instanceof DBVEntity) {