From 1543bdd49fbac7fad7d84de656f98cac91ede59d Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Thu, 26 Dec 2019 15:26:53 +0300 Subject: [PATCH] #7472 Default catalog/schema. Model + PG impl --- .../org/jkiss/dbeaver/core/CoreMessages.java | 4 +- .../dbeaver/core/CoreResources.properties | 6 +- .../dbeaver/core/CoreResources_de.properties | 5 +- .../dbeaver/core/CoreResources_fr.properties | 5 +- .../dbeaver/core/CoreResources_ru.properties | 6 +- .../ConnectionPageInitialization.java | 97 +++++++++++-------- .../dbeaver/ext/db2/model/DB2DataSource.java | 2 +- .../ext/db2/model/DB2ExecutionContext.java | 2 +- .../ext/exasol/model/ExasolDataSource.java | 2 +- .../exasol/model/ExasolExecutionContext.java | 2 +- .../model/GenericExecutionContext.java | 2 +- .../ext/mssql/model/SQLServerDataSource.java | 2 +- .../model/SQLServerExecutionContext.java | 2 +- .../ext/mysql/model/MySQLDataSource.java | 2 +- .../mysql/model/MySQLExecutionContext.java | 2 +- .../ext/oracle/model/OracleDataSource.java | 2 +- .../oracle/model/OracleExecutionContext.java | 2 +- .../postgresql/model/PostgreDataSource.java | 7 +- .../model/PostgreExecutionContext.java | 38 +++++--- .../src/org/jkiss/dbeaver/model/DBUtils.java | 12 +-- .../connection/DBPConnectionBootstrap.java | 57 ++++++----- .../exec/DBCExecutionContextDefaults.java | 2 +- .../model/impl/AbstractExecutionContext.java | 6 +- .../impl/VoidExecutionContextDefaults.java | 2 +- .../model/impl/jdbc/JDBCExecutionContext.java | 8 +- .../registry/DataSourceSerializerLegacy.java | 8 +- .../registry/DataSourceSerializerModern.java | 20 ++-- .../dbeaver/registry/RegistryConstants.java | 2 + 28 files changed, 184 insertions(+), 123 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreMessages.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreMessages.java index 9433a0c061..909cb09edb 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreMessages.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreMessages.java @@ -400,10 +400,12 @@ public class CoreMessages extends NLS { public static String dialog_connection_wizard_final_label_connection_folder; public static String dialog_connection_wizard_final_label_connection; public static String dialog_connection_wizard_final_label_isolation_level; + public static String dialog_connection_wizard_final_label_default_database; + public static String dialog_connection_wizard_final_label_default_database_tooltip; public static String dialog_connection_wizard_final_label_default_schema; + public static String dialog_connection_wizard_final_label_default_schema_tooltip; public static String dialog_connection_wizard_final_label_keepalive; public static String dialog_connection_wizard_final_label_isolation_level_tooltip; - public static String dialog_connection_wizard_final_label_default_schema_tooltip; public static String dialog_connection_wizard_final_label_keepalive_tooltip; public static String dialog_connection_wizard_final_label_bootstrap_query; public static String dialog_connection_wizard_configure; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties index c2230db056..c6a1373334 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources.properties @@ -113,8 +113,10 @@ dialog_connection_wizard_final_label_connection_folder = Connection folder dialog_connection_wizard_final_label_connection_name = Connection name dialog_connection_wizard_final_label_connection_type = Connection type dialog_connection_wizard_final_label_connection_types_edit = Edit connection types -dialog_connection_wizard_final_label_default_schema = Default database/schema -dialog_connection_wizard_final_label_default_schema_tooltip = Name of schema or catalog which will be set as default. +dialog_connection_wizard_final_label_default_database = Default database +dialog_connection_wizard_final_label_default_database_tooltip = Name of catalog which will be set as default. +dialog_connection_wizard_final_label_default_schema = Default schema +dialog_connection_wizard_final_label_default_schema_tooltip = Name of schema which will be set as default. dialog_connection_wizard_final_label_edit = Edit dialog_connection_wizard_final_label_isolation_level = Isolation level dialog_connection_wizard_final_label_isolation_level_tooltip = Default transaction isolation level. diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_de.properties b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_de.properties index 41e5beb2ca..28100b062f 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_de.properties +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_de.properties @@ -275,9 +275,10 @@ dialog_connection_wizard_final_label_connection_name = Verbindungsname dialog_connection_wizard_final_label_connection_type = Verbindungstyp +dialog_connection_wizard_final_label_default_database = Standardkatalog +dialog_connection_wizard_final_label_default_database_tooltip = Name des Katalogs, welches als Standard verwendet wird. dialog_connection_wizard_final_label_default_schema = Standardschema - -dialog_connection_wizard_final_label_default_schema_tooltip = Name des Schemas oder Katalogs, welches als Standard verwendet wird. +dialog_connection_wizard_final_label_default_schema_tooltip = Name des Schemas, welches als Standard verwendet wird. dialog_connection_wizard_final_label_edit = Bearbeiten diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_fr.properties b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_fr.properties index 9ea4794375..989cdd3fd6 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_fr.properties +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_fr.properties @@ -189,10 +189,11 @@ dialog_connection_wizard_final_label_bootstrap_tooltip = Requ\u00E8tes SQL \u00E dialog_connection_wizard_final_label_connection = Connexion dialog_connection_wizard_final_label_connection_name = Nom de la connexion dialog_connection_wizard_final_label_connection_folder = R\u00E9pertoire de connexion -dialog_connection_wizard_final_label_connection_name = Nom de la connexion dialog_connection_wizard_final_label_connection_type = Type de connexion +dialog_connection_wizard_final_label_default_database = Catalogue par d\u00E9faut +dialog_connection_wizard_final_label_default_database_tooltip = Nom du catalogue assign\u00E9 par d\u00E9faut. dialog_connection_wizard_final_label_default_schema = Sch\u00E9ma par d\u00E9faut -dialog_connection_wizard_final_label_default_schema_tooltip = Nom du sch\u00E9ma ou catalogue assign\u00E9 par d\u00E9faut. +dialog_connection_wizard_final_label_default_schema_tooltip = Nom du sch\u00E9ma assign\u00E9 par d\u00E9faut. dialog_connection_wizard_final_label_edit = Editer dialog_connection_wizard_final_label_isolation_level = Niveau d'isolation dialog_connection_wizard_final_label_isolation_level_tooltip = Niveau d'isolation par d\u00E9faut des transactions. diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_ru.properties b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_ru.properties index 46be9a891a..5cdf775924 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_ru.properties +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreResources_ru.properties @@ -237,8 +237,10 @@ dialog_connection_wizard_final_label_connection_folder = \u041F\u0430\u043F\u043 dialog_connection_wizard_final_label_connection_name = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F dialog_connection_wizard_final_label_connection_type = \u0422\u0438\u043F \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F dialog_connection_wizard_final_label_connection_types_edit = \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0442\u0438\u043F\u044B \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0439 -dialog_connection_wizard_final_label_default_schema = \u0411\u0430\u0437\u0430/\u0441\u0445\u0435\u043C\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E -dialog_connection_wizard_final_label_default_schema_tooltip = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 \u0438\u043B\u0438 \u0441\u0445\u0435\u043C\u044B \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0439 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E +dialog_connection_wizard_final_label_default_database = \u0411\u0430\u0437\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E +dialog_connection_wizard_final_label_default_database_tooltip = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E +dialog_connection_wizard_final_label_default_schema = \u0421\u0445\u0435\u043C\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E +dialog_connection_wizard_final_label_default_schema_tooltip = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0445\u0435\u043C\u044B \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0439 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E dialog_connection_wizard_final_label_edit = \u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C dialog_connection_wizard_final_label_isolation_level = \u0423\u0440\u043E\u0432\u0435\u043D\u044C \u0438\u0437\u043E\u043B\u044F\u0446\u0438\u0438 dialog_connection_wizard_final_label_isolation_level_tooltip = \u0423\u0440\u043E\u0432\u0435\u043D\u044C \u0438\u0437\u043E\u043B\u044F\u0446\u0438\u0438 \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E. diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/connection/ConnectionPageInitialization.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/connection/ConnectionPageInitialization.java index f38f59eaff..e04a039b85 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/connection/ConnectionPageInitialization.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/connection/ConnectionPageInitialization.java @@ -51,11 +51,15 @@ import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.connection.DBPConnectionBootstrap; import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.connection.DBPConnectionType; +import org.jkiss.dbeaver.model.exec.DBCExecutionContext; +import org.jkiss.dbeaver.model.exec.DBCExecutionContextDefaults; import org.jkiss.dbeaver.model.exec.DBCSession; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DefaultProgressMonitor; import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.struct.DBSObjectContainer; +import org.jkiss.dbeaver.model.struct.rdb.DBSCatalog; +import org.jkiss.dbeaver.model.struct.rdb.DBSSchema; import org.jkiss.dbeaver.registry.DataSourceDescriptor; import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.ui.*; @@ -78,6 +82,7 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData private Button autocommit; private Combo isolationLevel; + private Combo defaultCatalog; private Combo defaultSchema; private Spinner keepAliveInterval; @@ -126,14 +131,15 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData DBPDataSource dataSource = originalDataSource.getDataSource(); loadDatabaseSettings(dataSource); } - defaultSchema.setText(CommonUtils.notEmpty( - conConfig.getBootstrap().getDefaultObjectName())); + defaultCatalog.setText(CommonUtils.notEmpty(conConfig.getBootstrap().getDefaultCatalogName())); + defaultSchema.setText(CommonUtils.notEmpty(conConfig.getBootstrap().getDefaultSchemaName())); keepAliveInterval.setSelection(conConfig.getKeepAliveInterval()); activated = true; } } else { // Default settings isolationLevel.setEnabled(false); + defaultCatalog.setText(""); defaultSchema.setText(""); } } @@ -150,7 +156,7 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData } } - private void loadDatabaseSettings(DBRProgressMonitor monitor, DBPDataSource dataSource) throws InvocationTargetException, InterruptedException { + private void loadDatabaseSettings(DBRProgressMonitor monitor, DBPDataSource dataSource) { DBPDataSourceContainer dataSourceContainer = dataSource.getContainer(); Collection txnLevels = CommonUtils.safeCollection(dataSource.getInfo().getSupportedTransactionsIsolation()); Integer levelCode = dataSourceContainer.getDefaultTransactionsIsolation(); @@ -187,39 +193,55 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData }); if (dataSource instanceof DBSObjectContainer) { - DBSObjectContainer schemaContainer = DBUtils.getChangeableObjectContainer(dataSource, (DBSObjectContainer) dataSource); - if (schemaContainer != null) { - try { - final List schemaNames = new ArrayList<>(); - Collection children = schemaContainer.getChildren(monitor); - if (children != null) { - for (DBSObject child : children) { - if (child instanceof DBSObjectContainer) { - schemaNames.add(child.getName()); - } + DBCExecutionContext executionContext = DBUtils.getDefaultContext(dataSource, true); + DBCExecutionContextDefaults contextDefaults = executionContext.getContextDefaults(); + DBSObjectContainer catalogContainer = DBUtils.getChangeableObjectContainer(contextDefaults, (DBSObjectContainer) dataSource, DBSCatalog.class); + if (catalogContainer != null) { + loadSelectableObject(monitor, catalogContainer, defaultCatalog, contextDefaults, true); + } + DBSObjectContainer schemaContainer = DBUtils.getChangeableObjectContainer(contextDefaults, (DBSObjectContainer) dataSource, DBSSchema.class); + loadSelectableObject(monitor, schemaContainer, defaultSchema, contextDefaults, false); + } + + txnOptionsLoaded = true; + } + + private void loadSelectableObject(DBRProgressMonitor monitor, DBSObjectContainer objectContainer, Combo objectCombo, DBCExecutionContextDefaults contextDefaults, boolean isCatalogs) { + if (objectContainer != null) { + try { + final List objectNames = new ArrayList<>(); + Collection children = objectContainer.getChildren(monitor); + if (children != null) { + for (DBSObject child : children) { + if (child instanceof DBSObjectContainer) { + objectNames.add(child.getName()); } } - if (!schemaNames.isEmpty()) { - UIUtils.syncExec(() -> { - if (!defaultSchema.isDisposed()) { - String oldText = defaultSchema.getText(); - defaultSchema.removeAll(); - for (String name : schemaNames) { - defaultSchema.add(name); - } - if (!CommonUtils.isEmpty(oldText)) { - defaultSchema.setText(oldText); + } + if (!objectNames.isEmpty()) { + UIUtils.syncExec(() -> { + if (!objectCombo.isDisposed()) { + String oldText = objectCombo.getText(); + objectCombo.removeAll(); + for (String name : objectNames) { + objectCombo.add(name); + } + if (!CommonUtils.isEmpty(oldText)) { + objectCombo.setText(oldText); + } + if (contextDefaults != null) { + DBSObject defaultObject = isCatalogs ? contextDefaults.getDefaultCatalog() : contextDefaults.getDefaultSchema(); + if (defaultObject != null) { + objectCombo.setText(defaultObject.getName()); } } - }); - } - } catch (DBException e) { - log.warn("Can't read schema list", e); + } + }); } + } catch (DBException e) { + log.warn("Can't read schema list", e); } } - - txnOptionsLoaded = true; } @Override @@ -248,6 +270,9 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData isolationLevel = UIUtils.createLabelCombo(txnGroup, CoreMessages.dialog_connection_wizard_final_label_isolation_level, CoreMessages.dialog_connection_wizard_final_label_isolation_level_tooltip, SWT.DROP_DOWN | SWT.READ_ONLY); + defaultCatalog = UIUtils.createLabelCombo(txnGroup, CoreMessages.dialog_connection_wizard_final_label_default_database, + CoreMessages.dialog_connection_wizard_final_label_default_database_tooltip, SWT.DROP_DOWN); + ((GridData)defaultCatalog.getLayoutData()).widthHint = UIUtils.getFontHeight(defaultCatalog) * 20; defaultSchema = UIUtils.createLabelCombo(txnGroup, CoreMessages.dialog_connection_wizard_final_label_default_schema, CoreMessages.dialog_connection_wizard_final_label_default_schema_tooltip, SWT.DROP_DOWN); ((GridData)defaultSchema.getLayoutData()).widthHint = UIUtils.getFontHeight(defaultSchema) * 20; @@ -314,11 +339,11 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData } catch (DBException e) { log.error(e); } - dataSource.getConnectionConfiguration().getBootstrap().setDefaultObjectName(defaultSchema.getText()); - final DBPConnectionConfiguration confConfig = dataSource.getConnectionConfiguration(); - DBPConnectionBootstrap bootstrap = confConfig.getBootstrap(); + bootstrap.setDefaultCatalogName(defaultCatalog.getText()); + bootstrap.setDefaultSchemaName(defaultSchema.getText()); + bootstrap.setIgnoreErrors(ignoreBootstrapErrors); bootstrap.setInitQueries(bootstrapQueries); @@ -344,13 +369,7 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData @Override public void testConnection(DBCSession session) { // We load settings to fill txn isolation levels and schema names (#6794) - try { - loadDatabaseSettings(session.getProgressMonitor(), session.getDataSource()); - } catch (InvocationTargetException e) { - DBWorkbench.getPlatformUI().showError("Database info reading", "Error reading database settings", e.getTargetException()); - } catch (InterruptedException e) { - // ignore - } + loadDatabaseSettings(session.getProgressMonitor(), session.getDataSource()); } } diff --git a/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2DataSource.java b/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2DataSource.java index f9a01493b6..da412e928a 100644 --- a/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2DataSource.java +++ b/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2DataSource.java @@ -196,7 +196,7 @@ public class DB2DataSource extends JDBCDataSource implements DBCQueryPlanner, IA if (initFrom != null) { ((DB2ExecutionContext)context).setCurrentSchema(monitor, ((DB2ExecutionContext)initFrom).getDefaultSchema()); } else { - ((DB2ExecutionContext)context).refreshDefaults(monitor); + ((DB2ExecutionContext)context).refreshDefaults(monitor, true); } } diff --git a/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2ExecutionContext.java b/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2ExecutionContext.java index 0032bc7457..f0e6e589af 100644 --- a/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2ExecutionContext.java +++ b/plugins/org.jkiss.dbeaver.ext.db2/src/org/jkiss/dbeaver/ext/db2/model/DB2ExecutionContext.java @@ -105,7 +105,7 @@ public class DB2ExecutionContext extends JDBCExecutionContext implements DBCExec } @Override - public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { + public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException { // Check default active schema try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active schema")) { // Get active schema diff --git a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolDataSource.java b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolDataSource.java index d79fb4234a..8febb90cbf 100644 --- a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolDataSource.java +++ b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolDataSource.java @@ -360,7 +360,7 @@ public class ExasolDataSource extends JDBCDataSource implements DBCQueryPlanner, if (initFrom != null) { ((ExasolExecutionContext)context).setCurrentSchema(monitor, ((ExasolExecutionContext)initFrom).getDefaultSchema()); } else { - ((ExasolExecutionContext)context).refreshDefaults(monitor); + ((ExasolExecutionContext)context).refreshDefaults(monitor, true); } } diff --git a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolExecutionContext.java b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolExecutionContext.java index 1311f7a25e..734c953322 100644 --- a/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolExecutionContext.java +++ b/plugins/org.jkiss.dbeaver.ext.exasol/src/org/jkiss/dbeaver/ext/exasol/model/ExasolExecutionContext.java @@ -104,7 +104,7 @@ public class ExasolExecutionContext extends JDBCExecutionContext implements DBCE } @Override - public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { + public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException { // Check default active schema try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active schema")) { // Get active schema diff --git a/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericExecutionContext.java b/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericExecutionContext.java index 6b6ddbf85c..af52efaff8 100644 --- a/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericExecutionContext.java +++ b/plugins/org.jkiss.dbeaver.ext.generic/src/org/jkiss/dbeaver/ext/generic/model/GenericExecutionContext.java @@ -284,7 +284,7 @@ public class GenericExecutionContext extends JDBCExecutionContext implements DBC } @Override - public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { + public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException { String oldEntityName = selectedEntityName; DBSObject oldDefaultObject = getDefaultObject(); diff --git a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerDataSource.java b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerDataSource.java index 019518cedf..d05f5bc3ce 100644 --- a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerDataSource.java +++ b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerDataSource.java @@ -140,7 +140,7 @@ public class SQLServerDataSource extends JDBCDataSource implements DBSInstanceCo ((SQLServerExecutionContext)context).setCurrentDatabase(monitor, defaultObject); } } else { - ((SQLServerExecutionContext)context).refreshDefaults(monitor); + ((SQLServerExecutionContext)context).refreshDefaults(monitor, true); } } diff --git a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerExecutionContext.java b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerExecutionContext.java index 11818319a8..9f6031cec6 100644 --- a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerExecutionContext.java +++ b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerExecutionContext.java @@ -111,7 +111,7 @@ public class SQLServerExecutionContext extends JDBCExecutionContext implements D } @Override - public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { + public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException { // Check default active schema try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active database")) { activeDatabaseName = SQLServerUtils.getCurrentDatabase(session); diff --git a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLDataSource.java b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLDataSource.java index 8e0852bb84..8a2ab67f01 100644 --- a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLDataSource.java +++ b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLDataSource.java @@ -208,7 +208,7 @@ public class MySQLDataSource extends JDBCDataSource { ((MySQLExecutionContext)context).setCurrentDatabase(monitor, object); } } else { - ((MySQLExecutionContext)context).refreshDefaults(monitor); + ((MySQLExecutionContext)context).refreshDefaults(monitor, true); } } diff --git a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLExecutionContext.java b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLExecutionContext.java index 39b34d1833..4a309c7286 100644 --- a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLExecutionContext.java +++ b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLExecutionContext.java @@ -107,7 +107,7 @@ public class MySQLExecutionContext extends JDBCExecutionContext implements DBCEx } @Override - public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { + public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException { // Check default active schema try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active database")) { activeDatabaseName = MySQLUtils.determineCurrentDatabase(session); diff --git a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleDataSource.java b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleDataSource.java index 7dd46e72aa..9a46a2bd6d 100644 --- a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleDataSource.java +++ b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleDataSource.java @@ -215,7 +215,7 @@ public class OracleDataSource extends JDBCDataSource implements IAdaptable { if (initFrom != null) { ((OracleExecutionContext)context).setCurrentSchema(monitor, ((OracleExecutionContext)initFrom).getDefaultSchema()); } else { - ((OracleExecutionContext)context).refreshDefaults(monitor); + ((OracleExecutionContext)context).refreshDefaults(monitor, true); } { diff --git a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleExecutionContext.java b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleExecutionContext.java index 25623c8252..617e26fcc5 100644 --- a/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleExecutionContext.java +++ b/plugins/org.jkiss.dbeaver.ext.oracle/src/org/jkiss/dbeaver/ext/oracle/model/OracleExecutionContext.java @@ -100,7 +100,7 @@ public class OracleExecutionContext extends JDBCExecutionContext implements DBCE } @Override - public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { + public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException { // Check default active schema try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active schema")) { // Get active schema diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreDataSource.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreDataSource.java index 9e5d4e53d5..e9982148c7 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreDataSource.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreDataSource.java @@ -89,7 +89,10 @@ public class PostgreDataSource extends JDBCDataSource implements DBSInstanceCont @Override protected void initializeRemoteInstance(@NotNull DBRProgressMonitor monitor) throws DBException { - activeDatabaseName = getContainer().getConnectionConfiguration().getDatabaseName(); + activeDatabaseName = getContainer().getConnectionConfiguration().getBootstrap().getDefaultCatalogName(); + if (CommonUtils.isEmpty(activeDatabaseName)) { + activeDatabaseName = getContainer().getConnectionConfiguration().getDatabaseName(); + } if (CommonUtils.isEmpty(activeDatabaseName)) { activeDatabaseName = PostgreConstants.DEFAULT_DATABASE; } @@ -202,7 +205,7 @@ public class PostgreDataSource extends JDBCDataSource implements DBSInstanceCont ((PostgreExecutionContext)context).setDefaultSchema(monitor, activeSchema); } } else { - ((PostgreExecutionContext)context).refreshDefaults(monitor); + ((PostgreExecutionContext)context).refreshDefaults(monitor, true); } } diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreExecutionContext.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreExecutionContext.java index 35e98cd114..ba8b6bcee8 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreExecutionContext.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreExecutionContext.java @@ -22,6 +22,7 @@ import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.ext.postgresql.PostgreConstants; import org.jkiss.dbeaver.model.DBUtils; +import org.jkiss.dbeaver.model.connection.DBPConnectionBootstrap; import org.jkiss.dbeaver.model.exec.DBCException; import org.jkiss.dbeaver.model.exec.DBCExecutionContextDefaults; import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose; @@ -131,9 +132,16 @@ public class PostgreExecutionContext extends JDBCExecutionContext implements DBC } @Override - public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { + public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException { // Check default active schema - try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Get context active schema")) { + try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Read context defaults")) { + if (useBootstrapSettings) { + DBPConnectionBootstrap bootstrap = getBootstrapSettings(); + if (!CommonUtils.isEmpty(bootstrap.getDefaultSchemaName())) { + setSearchPath(monitor, bootstrap.getDefaultSchemaName()); + } + } + try (JDBCPreparedStatement stat = session.prepareStatement("SELECT current_schema(),session_user")) { try (JDBCResultSet rs = stat.executeQuery()) { if (rs.nextRow()) { @@ -178,21 +186,23 @@ public class PostgreExecutionContext extends JDBCExecutionContext implements DBC private void setSearchPath(DBRProgressMonitor monitor, PostgreSchema schema) throws DBCException { // Construct search path from current search path but put default schema first + setSearchPath(monitor, schema.getName()); + } + + private void setSearchPath(DBRProgressMonitor monitor, String defSchemaName) throws DBCException { List newSearchPath = new ArrayList<>(getDefaultSearchPath()); - { - String defSchemaName = schema.getName(); - int schemaIndex = newSearchPath.indexOf(defSchemaName); - if (schemaIndex == 0) { - // Already default schema - } else { - if (schemaIndex > 0) { - // Remove from previous position - newSearchPath.remove(schemaIndex); - } - // Add it first - newSearchPath.add(0, defSchemaName); + int schemaIndex = newSearchPath.indexOf(defSchemaName); + if (schemaIndex == 0) { + // Already default schema + } else { + if (schemaIndex > 0) { + // Remove from previous position + newSearchPath.remove(schemaIndex); } + // Add it first + newSearchPath.add(0, defSchemaName); } + StringBuilder spString = new StringBuilder(); for (String sp : newSearchPath) { if (spString.length() > 0) spString.append(","); diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java index 8183b6676c..0904b589f2 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java @@ -1716,7 +1716,7 @@ public final class DBUtils { try { DBSCatalog defaultCatalog = contextDefaults.getDefaultCatalog(); DBSSchema defaultSchema = contextDefaults.getDefaultSchema(); - if (contextDefaults.refreshDefaults(monitor)) { + if (contextDefaults.refreshDefaults(monitor, false)) { fireObjectSelectionChange(defaultCatalog, contextDefaults.getDefaultCatalog()); fireObjectSelectionChange(defaultSchema, contextDefaults.getDefaultSchema()); } @@ -1736,19 +1736,19 @@ public final class DBUtils { } } - public static DBSObjectContainer getChangeableObjectContainer(DBPDataSource dataSource, DBSObjectContainer root) { - DBCExecutionContext executionContext = DBUtils.getDefaultContext(dataSource, true); - DBCExecutionContextDefaults contextDefaults = executionContext.getContextDefaults(); + public static DBSObjectContainer getChangeableObjectContainer(DBCExecutionContextDefaults contextDefaults, DBSObjectContainer root, Class childType) { if (contextDefaults == null) { return null; } - if (contextDefaults.supportsCatalogChange()) { + if (childType == DBSCatalog.class && contextDefaults.supportsCatalogChange()) { return root; } - if (contextDefaults.supportsSchemaChange()) { + if (childType == DBSSchema.class && contextDefaults.supportsSchemaChange()) { DBSCatalog defaultCatalog = contextDefaults.getDefaultCatalog(); if (defaultCatalog != null) { return defaultCatalog; + } else { + return root; } } return null; diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/connection/DBPConnectionBootstrap.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/connection/DBPConnectionBootstrap.java index 4b9c2951a2..5fb8f4a906 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/connection/DBPConnectionBootstrap.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/connection/DBPConnectionBootstrap.java @@ -18,29 +18,30 @@ package org.jkiss.dbeaver.model.connection; import org.jkiss.utils.CommonUtils; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; /** * Connection bootstrap info. * Bootstrap properties are applied to each opened connection after data-source initialization. */ -public class DBPConnectionBootstrap -{ - private String defaultObjectName; +public class DBPConnectionBootstrap { + private String defaultCatalogName; + private String defaultSchemaName; private Boolean defaultAutoCommit; private Integer defaultTransactionIsolation; private final List initQueries; private boolean ignoreErrors; - public DBPConnectionBootstrap() - { + public DBPConnectionBootstrap() { this.initQueries = new ArrayList<>(); this.ignoreErrors = false; } - public DBPConnectionBootstrap(DBPConnectionBootstrap info) - { - this.defaultObjectName = info.defaultObjectName; + public DBPConnectionBootstrap(DBPConnectionBootstrap info) { + this.defaultCatalogName = info.defaultCatalogName; + this.defaultSchemaName = info.defaultSchemaName; this.defaultAutoCommit = info.defaultAutoCommit; this.defaultTransactionIsolation = info.defaultTransactionIsolation; this.initQueries = new ArrayList<>(info.initQueries); @@ -56,12 +57,20 @@ public class DBPConnectionBootstrap initQueries.addAll(queries); } - public String getDefaultObjectName() { - return defaultObjectName; + public String getDefaultCatalogName() { + return defaultCatalogName; } - public void setDefaultObjectName(String defaultObjectName) { - this.defaultObjectName = defaultObjectName; + public void setDefaultCatalogName(String defaultCatalogName) { + this.defaultCatalogName = defaultCatalogName; + } + + public String getDefaultSchemaName() { + return defaultSchemaName; + } + + public void setDefaultSchemaName(String defaultSchemaName) { + this.defaultSchemaName = defaultSchemaName; } public Boolean getDefaultAutoCommit() { @@ -90,11 +99,11 @@ public class DBPConnectionBootstrap public boolean hasData() { return - defaultAutoCommit != null || - defaultTransactionIsolation != null || - !CommonUtils.isEmpty(defaultObjectName) || - ignoreErrors || - !CommonUtils.isEmpty(initQueries); + defaultAutoCommit != null || + defaultTransactionIsolation != null || + !CommonUtils.isEmpty(defaultCatalogName) || + ignoreErrors || + !CommonUtils.isEmpty(initQueries); } @Override @@ -102,12 +111,12 @@ public class DBPConnectionBootstrap if (!(obj instanceof DBPConnectionBootstrap)) { return false; } - DBPConnectionBootstrap source = (DBPConnectionBootstrap)obj; + DBPConnectionBootstrap source = (DBPConnectionBootstrap) obj; return - CommonUtils.equalObjects(this.defaultObjectName, source.defaultObjectName) && - CommonUtils.equalObjects(this.defaultAutoCommit, source.defaultAutoCommit) && - CommonUtils.equalObjects(this.defaultTransactionIsolation, source.defaultTransactionIsolation) && - CommonUtils.equalObjects(this.initQueries, source.initQueries) && - this.ignoreErrors == source.ignoreErrors; + CommonUtils.equalObjects(this.defaultCatalogName, source.defaultCatalogName) && + CommonUtils.equalObjects(this.defaultAutoCommit, source.defaultAutoCommit) && + CommonUtils.equalObjects(this.defaultTransactionIsolation, source.defaultTransactionIsolation) && + CommonUtils.equalObjects(this.initQueries, source.initQueries) && + this.ignoreErrors == source.ignoreErrors; } } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/exec/DBCExecutionContextDefaults.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/exec/DBCExecutionContextDefaults.java index 8514921e45..d6402bb955 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/exec/DBCExecutionContextDefaults.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/exec/DBCExecutionContextDefaults.java @@ -40,6 +40,6 @@ public interface DBCExecutionContextDefaults return null; } + @NotNull + protected DBPConnectionBootstrap getBootstrapSettings() { + return getDataSource().getContainer().getActualConnectionConfiguration().getBootstrap(); + } /** * Context boot procedure. @@ -90,7 +94,7 @@ public abstract class AbstractExecutionContext QMUtils.getDefaultHandler().handleContextOpen(this, !autoCommit); // Execute bootstrap queries - DBPConnectionBootstrap bootstrap = dataSource.getContainer().getConnectionConfiguration().getBootstrap(); + DBPConnectionBootstrap bootstrap = getBootstrapSettings(); List initQueries = bootstrap.getInitQueries(); if (!CommonUtils.isEmpty(initQueries)) { monitor.subTask("Run bootstrap queries"); diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/VoidExecutionContextDefaults.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/VoidExecutionContextDefaults.java index f589361e06..0f04740cd8 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/VoidExecutionContextDefaults.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/VoidExecutionContextDefaults.java @@ -60,7 +60,7 @@ public class VoidExecutionContextDefaults implements DBCExecutionContextDefaults } @Override - public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { + public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException { throw new DBCFeatureNotSupportedException(); } } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/JDBCExecutionContext.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/JDBCExecutionContext.java index cfc5e843bd..c0bf70b53b 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/JDBCExecutionContext.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/jdbc/JDBCExecutionContext.java @@ -130,16 +130,14 @@ public class JDBCExecutionContext extends AbstractExecutionContext bootstrapCfg = JSONUtils.getObject(cfgObject, RegistryConstants.TAG_BOOTSTRAP); + DBPConnectionBootstrap bootstrap = config.getBootstrap(); if (bootstrapCfg.containsKey(RegistryConstants.ATTR_AUTOCOMMIT)) { - config.getBootstrap().setDefaultAutoCommit(JSONUtils.getBoolean(bootstrapCfg, RegistryConstants.ATTR_AUTOCOMMIT)); + bootstrap.setDefaultAutoCommit(JSONUtils.getBoolean(bootstrapCfg, RegistryConstants.ATTR_AUTOCOMMIT)); } if (bootstrapCfg.containsKey(RegistryConstants.ATTR_TXN_ISOLATION)) { - config.getBootstrap().setDefaultTransactionIsolation(JSONUtils.getInteger(bootstrapCfg, RegistryConstants.ATTR_TXN_ISOLATION)); + bootstrap.setDefaultTransactionIsolation(JSONUtils.getInteger(bootstrapCfg, RegistryConstants.ATTR_TXN_ISOLATION)); } - config.getBootstrap().setDefaultObjectName(JSONUtils.getString(bootstrapCfg, RegistryConstants.ATTR_DEFAULT_OBJECT)); + bootstrap.setDefaultCatalogName(JSONUtils.getString(bootstrapCfg, RegistryConstants.ATTR_DEFAULT_CATALOG)); + bootstrap.setDefaultSchemaName(JSONUtils.getString(bootstrapCfg, RegistryConstants.ATTR_DEFAULT_SCHEMA)); + String defObjectName = JSONUtils.getString(bootstrapCfg, RegistryConstants.ATTR_DEFAULT_OBJECT); + if (!CommonUtils.isEmpty(defObjectName) && CommonUtils.isEmpty(bootstrap.getDefaultSchemaName())) { + bootstrap.setDefaultSchemaName(JSONUtils.getString(bootstrapCfg, defObjectName)); + } + if (bootstrapCfg.containsKey(RegistryConstants.ATTR_IGNORE_ERRORS)) { - config.getBootstrap().setIgnoreErrors(JSONUtils.getBoolean(bootstrapCfg, RegistryConstants.ATTR_IGNORE_ERRORS)); + bootstrap.setIgnoreErrors(JSONUtils.getBoolean(bootstrapCfg, RegistryConstants.ATTR_IGNORE_ERRORS)); } - config.getBootstrap().setInitQueries(JSONUtils.deserializeStringList(bootstrapCfg, RegistryConstants.TAG_QUERY)); + bootstrap.setInitQueries(JSONUtils.deserializeStringList(bootstrapCfg, RegistryConstants.TAG_QUERY)); } // Permissions @@ -775,7 +782,8 @@ class DataSourceSerializerModern implements DataSourceSerializer if (bootstrap.getDefaultTransactionIsolation() != null) { JSONUtils.field(json, RegistryConstants.ATTR_TXN_ISOLATION, bootstrap.getDefaultTransactionIsolation()); } - JSONUtils.fieldNE(json, RegistryConstants.ATTR_DEFAULT_OBJECT, bootstrap.getDefaultObjectName()); + JSONUtils.fieldNE(json, RegistryConstants.ATTR_DEFAULT_CATALOG, bootstrap.getDefaultCatalogName()); + JSONUtils.fieldNE(json, RegistryConstants.ATTR_DEFAULT_SCHEMA, bootstrap.getDefaultSchemaName()); if (bootstrap.isIgnoreErrors()) { JSONUtils.field(json, RegistryConstants.ATTR_IGNORE_ERRORS, true); } diff --git a/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/RegistryConstants.java b/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/RegistryConstants.java index d2903f78f1..ec36ffd0da 100644 --- a/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/RegistryConstants.java +++ b/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/RegistryConstants.java @@ -96,6 +96,8 @@ public class RegistryConstants { public static final String ATTR_AUTOCOMMIT = "autocommit"; //$NON-NLS-1$ public static final String ATTR_TXN_ISOLATION = "txnIsolation"; //$NON-NLS-1$ public static final String ATTR_DEFAULT_OBJECT = "defaultObject"; //$NON-NLS-1$ + public static final String ATTR_DEFAULT_CATALOG = "defaultCatalog"; //$NON-NLS-1$ + public static final String ATTR_DEFAULT_SCHEMA = "defaultSchema"; //$NON-NLS-1$ public static final String ATTR_CONFIRM_EXECUTE = "confirmExecute"; //$NON-NLS-1$ public static final String ATTR_CONFIRM_DATA_CHANGE = "confirmDataChange"; //$NON-NLS-1$ public static final String ATTR_PARENT = "parent"; //$NON-NLS-1$ -- GitLab