diff --git a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java index 30b52ea5cc4be6c6e8d23f75217ab58d1017f401..d8d70559205f19d01759516bbbf574dc02c0bb54 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java @@ -224,8 +224,8 @@ public class ResultSetViewer extends Viewer // Theme listener private IPropertyChangeListener themeChangeListener; private long lastThemeUpdateTime; - private volatile boolean awaitsReadNextSegment; - private volatile boolean awaitsSavingData; + + private volatile boolean nextSegmentReadingBlocked; public ResultSetViewer(@NotNull Composite parent, @NotNull IWorkbenchPartSite site, @NotNull IResultSetContainer container) { @@ -3563,7 +3563,6 @@ public class ResultSetViewer extends Viewer @Override public boolean checkForChanges() { - // Check if we are dirty if (isDirty()) { int checkResult = new UITask() { @Override @@ -3573,17 +3572,14 @@ public class ResultSetViewer extends Viewer }.execute(); switch (checkResult) { case ISaveablePart2.CANCEL: - dataReceiver.setHasMoreData(false); UIUtils.asyncExec(() -> updatePanelsContent(true)); return false; case ISaveablePart2.YES: // Apply changes - awaitsSavingData = true; saveChanges(null, new ResultSetSaveSettings(), success -> { if (success) { UIUtils.asyncExec(() -> refreshData(null)); } - awaitsSavingData = false; }); return false; default: @@ -3727,19 +3723,22 @@ public class ResultSetViewer extends Viewer return true; } + public void readNextSegment() { if (!verifyQuerySafety()) { return; } - if (awaitsSavingData || awaitsReadNextSegment || !dataReceiver.isHasMoreData()) { + if (!dataReceiver.isHasMoreData()) { + return; + } + if (nextSegmentReadingBlocked && isDirty()) { + return; + } + nextSegmentReadingBlocked = true; + if (!checkForChanges()) { return; } try { - awaitsReadNextSegment = true; - if (!checkForChanges()) { - return; - } - DBSDataContainer dataContainer = getDataContainer(); if (dataContainer != null && !model.isUpdateInProgress()) { dataReceiver.setHasMoreData(false); @@ -3757,7 +3756,7 @@ public class ResultSetViewer extends Viewer null); } } finally { - awaitsReadNextSegment = false; + nextSegmentReadingBlocked = false; } }