From 85d0bae5e55f3cd5f5cfd9f9ad1717e0f80df8ae Mon Sep 17 00:00:00 2001 From: Nikita Akilov Date: Sun, 25 Apr 2021 15:20:58 +0300 Subject: [PATCH] #11201 use result of toString() method to differentiate different underlying queries in parent data container in references result container Former-commit-id: 029f71fd199e604f6ac28683b59304ccaeac07c8 --- .../ReferencesResultsContainer.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/panel/references/ReferencesResultsContainer.java b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/panel/references/ReferencesResultsContainer.java index 489658a94c..9ed23bfa74 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/panel/references/ReferencesResultsContainer.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/panel/references/ReferencesResultsContainer.java @@ -63,6 +63,15 @@ class ReferencesResultsContainer implements IResultSetContainer { private ResultSetViewer dataViewer; private DBSDataContainer parentDataContainer; + + /** + * Result of the toString() call on the latest parentDataContainer. It is used for detection if the underlying data container has changed. + * See this ticket. + * + */ + @Nullable + private String parentContainerStringDigest; + private DBSDataContainer dataContainer; private final List referenceKeys = new ArrayList<>(); @@ -164,10 +173,11 @@ class ReferencesResultsContainer implements IResultSetContainer { return mainComposite; } - public void refreshReferences() { + void refreshReferences() { dataViewer.resetHistory(); - DBSDataContainer newParentContainer = this.parentController.getDataContainer(); - if (newParentContainer != parentDataContainer) { + DBSDataContainer newParentContainer = parentController.getDataContainer(); + String newParentContainerDigest = newParentContainer != null ? newParentContainer.toString() : null; + if (newParentContainer != parentDataContainer || !Objects.equals(newParentContainerDigest, parentContainerStringDigest)) { refreshReferenceKeyList(); } else if (dataContainer != null) { refreshKeyValues(false); @@ -193,8 +203,11 @@ class ReferencesResultsContainer implements IResultSetContainer { parentDataContainer = parentController.getDataContainer(); if (parentDataContainer == null) { + parentContainerStringDigest = null; return; } + parentContainerStringDigest = parentDataContainer.toString(); + Set allEntities = new LinkedHashSet<>(); for (DBDAttributeBinding attr : visibleAttributes) { DBSEntityAttribute entityAttribute = attr.getEntityAttribute(); -- GitLab