diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/data/DBDRowIdentifier.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/data/DBDRowIdentifier.java index 6b6238aab9cd273252474ea4f1ec94edda2ad7c9..2f850cfbb03e0bf308d6910df3bb0a2459e1dfd5 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/data/DBDRowIdentifier.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/data/DBDRowIdentifier.java @@ -98,4 +98,7 @@ public class DBDRowIdentifier implements DBPObject { } } + public void clearAttributes() { + attributes.clear(); + } } 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 541b8f750d97da7b3db4febf190cdd310a3cafbf..548cf0a166b6a27b577b11d8103587d310185b7e 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 @@ -73,7 +73,10 @@ import org.jkiss.dbeaver.model.sql.SQLQueryContainer; import org.jkiss.dbeaver.model.sql.SQLScriptElement; import org.jkiss.dbeaver.model.sql.SQLUtils; import org.jkiss.dbeaver.model.struct.*; -import org.jkiss.dbeaver.model.virtual.*; +import org.jkiss.dbeaver.model.virtual.DBVEntity; +import org.jkiss.dbeaver.model.virtual.DBVEntityConstraint; +import org.jkiss.dbeaver.model.virtual.DBVTransformSettings; +import org.jkiss.dbeaver.model.virtual.DBVUtils; import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.runtime.DBeaverNotifications; import org.jkiss.dbeaver.tools.transfer.registry.DataTransferNodeDescriptor; @@ -2319,6 +2322,11 @@ public class ResultSetViewer extends Viewer if (dataSource == null) { return; } + VirtualForeignKeyEditAction fkAddAction = new VirtualForeignKeyEditAction(); + if (fkAddAction.isEnabled()) { + vmMenu.add(fkAddAction); + } + VirtualUniqueKeyEditAction vkAction = new VirtualUniqueKeyEditAction(true); if (vkAction.isEnabled()) { vmMenu.add(vkAction); @@ -2327,10 +2335,6 @@ public class ResultSetViewer extends Viewer if (vkRemoveAction.isEnabled()) { vmMenu.add(vkRemoveAction); } - VirtualForeignKeyEditAction fkAddAction = new VirtualForeignKeyEditAction(); - if (fkAddAction.isEnabled()) { - vmMenu.add(fkAddAction); - } vmMenu.add(new VirtualEntityEditAction()); } @@ -3769,22 +3773,28 @@ public class ResultSetViewer extends Viewer } } - boolean editEntityIdentifier(DBRProgressMonitor monitor) { + boolean editEntityIdentifier() { EditVirtualEntityDialog dialog = new EditVirtualEntityDialog( ResultSetViewer.this, model.getSingleSource(), getVirtualEntity()); dialog.setInitPage(EditVirtualEntityDialog.InitPage.UNIQUE_KEY); return dialog.open() == IDialogConstants.OK_ID; } - private void clearEntityIdentifier(DBRProgressMonitor monitor) throws DBException + private void clearEntityIdentifier() { - DBDAttributeBinding firstAttribute = model.getVisibleAttribute(0); - DBDRowIdentifier rowIdentifier = firstAttribute.getRowIdentifier(); - if (rowIdentifier != null) { - DBVEntityConstraint virtualKey = (DBVEntityConstraint) rowIdentifier.getUniqueKey(); - virtualKey.setAttributes(Collections.emptyList()); - rowIdentifier.reloadAttributes(monitor, model.getAttributes()); - virtualKey.getParentObject().setProperty(DBVConstants.PROPERTY_USE_VIRTUAL_KEY_QUIET, null); + DBVEntity vEntity = getVirtualEntity(); + if (vEntity != null) { + DBVEntityConstraint vConstraint = vEntity.getBestIdentifier(); + if (vConstraint != null) { + vConstraint.setAttributes(Collections.emptyList()); + } + + DBDAttributeBinding firstAttribute = model.getVisibleAttribute(0); + DBDRowIdentifier rowIdentifier = firstAttribute.getRowIdentifier(); + if (rowIdentifier != null && rowIdentifier.getUniqueKey() == vConstraint) { + rowIdentifier.clearAttributes(); + } + } persistConfig(); @@ -4425,24 +4435,20 @@ public class ResultSetViewer extends Viewer @Override public boolean isEnabled() { - DBDRowIdentifier identifier = getVirtualEntityIdentifier(); - return identifier != null && (define || !CommonUtils.isEmpty(identifier.getAttributes())); + DBVEntity vEntity = getVirtualEntity(); + DBVEntityConstraint vConstraint = vEntity.getBestIdentifier(); + + return vConstraint != null && (define != vConstraint.hasAttributes()); } @Override public void run() { - UIUtils.runUIJob("Edit virtual key", monitor -> { - try { - if (define) { - editEntityIdentifier(monitor); - } else { - clearEntityIdentifier(monitor); - } - } catch (DBException e) { - throw new InvocationTargetException(e); - } - }); + if (define) { + editEntityIdentifier(); + } else { + clearEntityIdentifier(); + } } } diff --git a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ValidateUniqueKeyUsageDialog.java b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ValidateUniqueKeyUsageDialog.java index f83a86af6ada807bdf656072eb3cfc6361dc5335..dde17a8cf4a9640953aa3b58f57b9206f337a27d 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ValidateUniqueKeyUsageDialog.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ValidateUniqueKeyUsageDialog.java @@ -92,7 +92,7 @@ class ValidateUniqueKeyUsageDialog extends MessageDialogWithToggle { private void editCustomKey() { // Edit custom key - if (viewer.editEntityIdentifier(new VoidProgressMonitor())) { + if (viewer.editEntityIdentifier()) { super.buttonPressed(IDialogConstants.OK_ID); } }