diff --git a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/navigator/dialogs/SelectDatabaseDialog.java b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/navigator/dialogs/SelectDatabaseDialog.java index 1604d1ade1347529b9e127b0735ad2de5cc20aad..cd1d973a615c5945319e1cd6930c25563702a0aa 100644 --- a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/navigator/dialogs/SelectDatabaseDialog.java +++ b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/navigator/dialogs/SelectDatabaseDialog.java @@ -21,6 +21,8 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; +import org.jkiss.code.NotNull; +import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.DBPDataSource; @@ -78,22 +80,28 @@ public class SelectDatabaseDialog extends ObjectListDialog @Override protected void createUpperControls(Composite dialogArea) { - DBPDataSource dataSource = dataSourceContainer.getDataSource(); - if (currentInstanceName != null && dataSource != null) { - + if (currentInstanceName == null || dataSource == null) { + return; + } + DBCExecutionContextDefaults contextDefaults = getContextDefaults(); + if (contextDefaults != null && contextDefaults.supportsCatalogChange()) { DBSObjectContainer instanceContainer = DBUtils.getAdapter(DBSObjectContainer.class, dataSource); - DBCExecutionContextDefaults contextDefaults = null; - DBCExecutionContext defaultContext = DBUtils.getDefaultContext(instanceContainer, true); - if (defaultContext != null) { - contextDefaults = defaultContext.getContextDefaults(); - } - if (instanceContainer != null && contextDefaults != null && contextDefaults.supportsCatalogChange()) { - createInstanceSelector(dialogArea, instanceContainer); - } + createInstanceSelector(dialogArea, instanceContainer); } } + @Nullable + private DBCExecutionContextDefaults getContextDefaults() { + DBPDataSource dataSource = dataSourceContainer.getDataSource(); + DBSObjectContainer instanceContainer = DBUtils.getAdapter(DBSObjectContainer.class, dataSource); + DBCExecutionContext defaultContext = DBUtils.getDefaultContext(instanceContainer, true); + if (defaultContext == null) { + return null; + } + return defaultContext.getContextDefaults(); + } + private void createInstanceSelector(Composite group, DBSObjectContainer instanceContainer) { ((GridLayout)group.getLayout()).numColumns++; instanceList = createObjectSelector(group, true, "DatabaseInstanceSelector", selectedInstances, new DBRRunnableWithResult>() { @@ -110,18 +118,7 @@ public class SelectDatabaseDialog extends ObjectListDialog } } Collection instances = instanceContainer.getChildren(monitor); - List instanceNodes = new ArrayList<>(); - if (!CommonUtils.isEmpty(instances)) { - for (DBSObject instance : instances) { - if (instance instanceof DBSCatalog || instance instanceof DBSSchema) { - DBNDatabaseNode instanceNode = DBNUtils.getNodeByObject(monitor, instance, false); - if (instanceNode != null) { - instanceNodes.add(instanceNode); - } - } - } - } - result = instanceNodes; + result = getNodeList(monitor, instances); objectList.loadData(); } catch (DBException e) { throw new InvocationTargetException(e); @@ -158,20 +155,15 @@ public class SelectDatabaseDialog extends ObjectListDialog } if (rootObject instanceof DBSObjectContainer) { try { - Collection objectList = ((DBSObjectContainer) rootObject).getChildren(monitor); - if (objectList == null) { - return Collections.emptyList(); + DBCExecutionContextDefaults contextDefaults = getContextDefaults(); + Collection objectsCollection; + if (rootObject instanceof DBSCatalog && contextDefaults != null && !contextDefaults.supportsSchemaChange()) { + DBSSchema schema = contextDefaults.getDefaultSchema(); + objectsCollection = Collections.singletonList(schema); + } else { + objectsCollection = ((DBSObjectContainer) rootObject).getChildren(monitor); } - List nodeList = new ArrayList<>(objectList.size()); - for (DBSObject object : objectList) { - if (object instanceof DBSObjectContainer) { - DBNDatabaseNode databaseNode = DBNUtils.getNodeByObject(monitor, object, false); - if (databaseNode != null) { - nodeList.add(databaseNode); - } - } - } - return nodeList; + return getNodeList(monitor, objectsCollection); } catch (DBException e) { // Do not show error (it will close the dialog) log.error(e); @@ -181,6 +173,23 @@ public class SelectDatabaseDialog extends ObjectListDialog return objects; } + @NotNull + private static List getNodeList(@NotNull DBRProgressMonitor monitor, @Nullable Collection objectList) { + if (CommonUtils.isEmpty(objectList)) { + return Collections.emptyList(); + } + List nodeList = new ArrayList<>(objectList.size()); + for (DBSObject object : objectList) { + if (object instanceof DBSObjectContainer) { + DBNDatabaseNode databaseNode = DBNUtils.getNodeByObject(monitor, object, false); + if (databaseNode != null) { + nodeList.add(databaseNode); + } + } + } + return nodeList; + } + public String getCurrentInstanceName() { DBNDatabaseNode selectedObject = getSelectedObject(); if (selectedObject.getObject() instanceof DBSCatalog) {