提交 1543bdd4 编写于 作者: S Serge Rider

#7472 Default catalog/schema. Model + PG impl

上级 daa700b5
...@@ -400,10 +400,12 @@ public class CoreMessages extends NLS { ...@@ -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_folder;
public static String dialog_connection_wizard_final_label_connection; 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_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;
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_keepalive;
public static String dialog_connection_wizard_final_label_isolation_level_tooltip; 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_keepalive_tooltip;
public static String dialog_connection_wizard_final_label_bootstrap_query; public static String dialog_connection_wizard_final_label_bootstrap_query;
public static String dialog_connection_wizard_configure; public static String dialog_connection_wizard_configure;
......
...@@ -113,8 +113,10 @@ dialog_connection_wizard_final_label_connection_folder = Connection folder ...@@ -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_name = Connection name
dialog_connection_wizard_final_label_connection_type = Connection type 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_connection_types_edit = Edit connection types
dialog_connection_wizard_final_label_default_schema = Default database/schema dialog_connection_wizard_final_label_default_database = Default database
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_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_edit = Edit
dialog_connection_wizard_final_label_isolation_level = Isolation level dialog_connection_wizard_final_label_isolation_level = Isolation level
dialog_connection_wizard_final_label_isolation_level_tooltip = Default transaction isolation level. dialog_connection_wizard_final_label_isolation_level_tooltip = Default transaction isolation level.
......
...@@ -275,9 +275,10 @@ dialog_connection_wizard_final_label_connection_name = Verbindungsname ...@@ -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_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 = Standardschema
dialog_connection_wizard_final_label_default_schema_tooltip = Name des Schemas, welches als Standard verwendet wird.
dialog_connection_wizard_final_label_default_schema_tooltip = Name des Schemas oder Katalogs, welches als Standard verwendet wird.
dialog_connection_wizard_final_label_edit = Bearbeiten dialog_connection_wizard_final_label_edit = Bearbeiten
......
...@@ -189,10 +189,11 @@ dialog_connection_wizard_final_label_bootstrap_tooltip = Requ\u00E8tes SQL \u00E ...@@ -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 = Connexion
dialog_connection_wizard_final_label_connection_name = Nom de la 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_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_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 = 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_edit = Editer
dialog_connection_wizard_final_label_isolation_level = Niveau d'isolation 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. dialog_connection_wizard_final_label_isolation_level_tooltip = Niveau d'isolation par d\u00E9faut des transactions.
......
...@@ -237,8 +237,10 @@ dialog_connection_wizard_final_label_connection_folder = \u041F\u0430\u043F\u043 ...@@ -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_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_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_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_database = \u0411\u0430\u0437\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_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_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 = \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. 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.
......
...@@ -51,11 +51,15 @@ import org.jkiss.dbeaver.model.DBUtils; ...@@ -51,11 +51,15 @@ import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.connection.DBPConnectionBootstrap; import org.jkiss.dbeaver.model.connection.DBPConnectionBootstrap;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.connection.DBPConnectionType; 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.exec.DBCSession;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DefaultProgressMonitor; import org.jkiss.dbeaver.model.runtime.DefaultProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSObjectContainer; 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.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.*; import org.jkiss.dbeaver.ui.*;
...@@ -78,6 +82,7 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData ...@@ -78,6 +82,7 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData
private Button autocommit; private Button autocommit;
private Combo isolationLevel; private Combo isolationLevel;
private Combo defaultCatalog;
private Combo defaultSchema; private Combo defaultSchema;
private Spinner keepAliveInterval; private Spinner keepAliveInterval;
...@@ -126,14 +131,15 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData ...@@ -126,14 +131,15 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData
DBPDataSource dataSource = originalDataSource.getDataSource(); DBPDataSource dataSource = originalDataSource.getDataSource();
loadDatabaseSettings(dataSource); loadDatabaseSettings(dataSource);
} }
defaultSchema.setText(CommonUtils.notEmpty( defaultCatalog.setText(CommonUtils.notEmpty(conConfig.getBootstrap().getDefaultCatalogName()));
conConfig.getBootstrap().getDefaultObjectName())); defaultSchema.setText(CommonUtils.notEmpty(conConfig.getBootstrap().getDefaultSchemaName()));
keepAliveInterval.setSelection(conConfig.getKeepAliveInterval()); keepAliveInterval.setSelection(conConfig.getKeepAliveInterval());
activated = true; activated = true;
} }
} else { } else {
// Default settings // Default settings
isolationLevel.setEnabled(false); isolationLevel.setEnabled(false);
defaultCatalog.setText("");
defaultSchema.setText(""); defaultSchema.setText("");
} }
} }
...@@ -150,7 +156,7 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData ...@@ -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(); DBPDataSourceContainer dataSourceContainer = dataSource.getContainer();
Collection<DBPTransactionIsolation> txnLevels = CommonUtils.safeCollection(dataSource.getInfo().getSupportedTransactionsIsolation()); Collection<DBPTransactionIsolation> txnLevels = CommonUtils.safeCollection(dataSource.getInfo().getSupportedTransactionsIsolation());
Integer levelCode = dataSourceContainer.getDefaultTransactionsIsolation(); Integer levelCode = dataSourceContainer.getDefaultTransactionsIsolation();
...@@ -187,39 +193,55 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData ...@@ -187,39 +193,55 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData
}); });
if (dataSource instanceof DBSObjectContainer) { if (dataSource instanceof DBSObjectContainer) {
DBSObjectContainer schemaContainer = DBUtils.getChangeableObjectContainer(dataSource, (DBSObjectContainer) dataSource); DBCExecutionContext executionContext = DBUtils.getDefaultContext(dataSource, true);
if (schemaContainer != null) { DBCExecutionContextDefaults contextDefaults = executionContext.getContextDefaults();
try { DBSObjectContainer catalogContainer = DBUtils.getChangeableObjectContainer(contextDefaults, (DBSObjectContainer) dataSource, DBSCatalog.class);
final List<String> schemaNames = new ArrayList<>(); if (catalogContainer != null) {
Collection<? extends DBSObject> children = schemaContainer.getChildren(monitor); loadSelectableObject(monitor, catalogContainer, defaultCatalog, contextDefaults, true);
if (children != null) { }
for (DBSObject child : children) { DBSObjectContainer schemaContainer = DBUtils.getChangeableObjectContainer(contextDefaults, (DBSObjectContainer) dataSource, DBSSchema.class);
if (child instanceof DBSObjectContainer) { loadSelectableObject(monitor, schemaContainer, defaultSchema, contextDefaults, false);
schemaNames.add(child.getName()); }
}
txnOptionsLoaded = true;
}
private void loadSelectableObject(DBRProgressMonitor monitor, DBSObjectContainer objectContainer, Combo objectCombo, DBCExecutionContextDefaults contextDefaults, boolean isCatalogs) {
if (objectContainer != null) {
try {
final List<String> objectNames = new ArrayList<>();
Collection<? extends DBSObject> 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 (!objectNames.isEmpty()) {
if (!defaultSchema.isDisposed()) { UIUtils.syncExec(() -> {
String oldText = defaultSchema.getText(); if (!objectCombo.isDisposed()) {
defaultSchema.removeAll(); String oldText = objectCombo.getText();
for (String name : schemaNames) { objectCombo.removeAll();
defaultSchema.add(name); for (String name : objectNames) {
} objectCombo.add(name);
if (!CommonUtils.isEmpty(oldText)) { }
defaultSchema.setText(oldText); 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 @Override
...@@ -248,6 +270,9 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData ...@@ -248,6 +270,9 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData
isolationLevel = UIUtils.createLabelCombo(txnGroup, CoreMessages.dialog_connection_wizard_final_label_isolation_level, 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); 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, defaultSchema = UIUtils.createLabelCombo(txnGroup, CoreMessages.dialog_connection_wizard_final_label_default_schema,
CoreMessages.dialog_connection_wizard_final_label_default_schema_tooltip, SWT.DROP_DOWN); CoreMessages.dialog_connection_wizard_final_label_default_schema_tooltip, SWT.DROP_DOWN);
((GridData)defaultSchema.getLayoutData()).widthHint = UIUtils.getFontHeight(defaultSchema) * 20; ((GridData)defaultSchema.getLayoutData()).widthHint = UIUtils.getFontHeight(defaultSchema) * 20;
...@@ -314,11 +339,11 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData ...@@ -314,11 +339,11 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData
} catch (DBException e) { } catch (DBException e) {
log.error(e); log.error(e);
} }
dataSource.getConnectionConfiguration().getBootstrap().setDefaultObjectName(defaultSchema.getText());
final DBPConnectionConfiguration confConfig = dataSource.getConnectionConfiguration(); final DBPConnectionConfiguration confConfig = dataSource.getConnectionConfiguration();
DBPConnectionBootstrap bootstrap = confConfig.getBootstrap(); DBPConnectionBootstrap bootstrap = confConfig.getBootstrap();
bootstrap.setDefaultCatalogName(defaultCatalog.getText());
bootstrap.setDefaultSchemaName(defaultSchema.getText());
bootstrap.setIgnoreErrors(ignoreBootstrapErrors); bootstrap.setIgnoreErrors(ignoreBootstrapErrors);
bootstrap.setInitQueries(bootstrapQueries); bootstrap.setInitQueries(bootstrapQueries);
...@@ -344,13 +369,7 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData ...@@ -344,13 +369,7 @@ class ConnectionPageInitialization extends ConnectionWizardPage implements IData
@Override @Override
public void testConnection(DBCSession session) { public void testConnection(DBCSession session) {
// We load settings to fill txn isolation levels and schema names (#6794) // We load settings to fill txn isolation levels and schema names (#6794)
try { loadDatabaseSettings(session.getProgressMonitor(), session.getDataSource());
loadDatabaseSettings(session.getProgressMonitor(), session.getDataSource());
} catch (InvocationTargetException e) {
DBWorkbench.getPlatformUI().showError("Database info reading", "Error reading database settings", e.getTargetException());
} catch (InterruptedException e) {
// ignore
}
} }
} }
...@@ -196,7 +196,7 @@ public class DB2DataSource extends JDBCDataSource implements DBCQueryPlanner, IA ...@@ -196,7 +196,7 @@ public class DB2DataSource extends JDBCDataSource implements DBCQueryPlanner, IA
if (initFrom != null) { if (initFrom != null) {
((DB2ExecutionContext)context).setCurrentSchema(monitor, ((DB2ExecutionContext)initFrom).getDefaultSchema()); ((DB2ExecutionContext)context).setCurrentSchema(monitor, ((DB2ExecutionContext)initFrom).getDefaultSchema());
} else { } else {
((DB2ExecutionContext)context).refreshDefaults(monitor); ((DB2ExecutionContext)context).refreshDefaults(monitor, true);
} }
} }
......
...@@ -105,7 +105,7 @@ public class DB2ExecutionContext extends JDBCExecutionContext implements DBCExec ...@@ -105,7 +105,7 @@ public class DB2ExecutionContext extends JDBCExecutionContext implements DBCExec
} }
@Override @Override
public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException {
// Check default active schema // Check default active schema
try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active schema")) { try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active schema")) {
// Get active schema // Get active schema
......
...@@ -360,7 +360,7 @@ public class ExasolDataSource extends JDBCDataSource implements DBCQueryPlanner, ...@@ -360,7 +360,7 @@ public class ExasolDataSource extends JDBCDataSource implements DBCQueryPlanner,
if (initFrom != null) { if (initFrom != null) {
((ExasolExecutionContext)context).setCurrentSchema(monitor, ((ExasolExecutionContext)initFrom).getDefaultSchema()); ((ExasolExecutionContext)context).setCurrentSchema(monitor, ((ExasolExecutionContext)initFrom).getDefaultSchema());
} else { } else {
((ExasolExecutionContext)context).refreshDefaults(monitor); ((ExasolExecutionContext)context).refreshDefaults(monitor, true);
} }
} }
......
...@@ -104,7 +104,7 @@ public class ExasolExecutionContext extends JDBCExecutionContext implements DBCE ...@@ -104,7 +104,7 @@ public class ExasolExecutionContext extends JDBCExecutionContext implements DBCE
} }
@Override @Override
public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException {
// Check default active schema // Check default active schema
try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active schema")) { try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active schema")) {
// Get active schema // Get active schema
......
...@@ -284,7 +284,7 @@ public class GenericExecutionContext extends JDBCExecutionContext implements DBC ...@@ -284,7 +284,7 @@ public class GenericExecutionContext extends JDBCExecutionContext implements DBC
} }
@Override @Override
public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException {
String oldEntityName = selectedEntityName; String oldEntityName = selectedEntityName;
DBSObject oldDefaultObject = getDefaultObject(); DBSObject oldDefaultObject = getDefaultObject();
......
...@@ -140,7 +140,7 @@ public class SQLServerDataSource extends JDBCDataSource implements DBSInstanceCo ...@@ -140,7 +140,7 @@ public class SQLServerDataSource extends JDBCDataSource implements DBSInstanceCo
((SQLServerExecutionContext)context).setCurrentDatabase(monitor, defaultObject); ((SQLServerExecutionContext)context).setCurrentDatabase(monitor, defaultObject);
} }
} else { } else {
((SQLServerExecutionContext)context).refreshDefaults(monitor); ((SQLServerExecutionContext)context).refreshDefaults(monitor, true);
} }
} }
......
...@@ -111,7 +111,7 @@ public class SQLServerExecutionContext extends JDBCExecutionContext implements D ...@@ -111,7 +111,7 @@ public class SQLServerExecutionContext extends JDBCExecutionContext implements D
} }
@Override @Override
public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException {
// Check default active schema // Check default active schema
try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active database")) { try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active database")) {
activeDatabaseName = SQLServerUtils.getCurrentDatabase(session); activeDatabaseName = SQLServerUtils.getCurrentDatabase(session);
......
...@@ -208,7 +208,7 @@ public class MySQLDataSource extends JDBCDataSource { ...@@ -208,7 +208,7 @@ public class MySQLDataSource extends JDBCDataSource {
((MySQLExecutionContext)context).setCurrentDatabase(monitor, object); ((MySQLExecutionContext)context).setCurrentDatabase(monitor, object);
} }
} else { } else {
((MySQLExecutionContext)context).refreshDefaults(monitor); ((MySQLExecutionContext)context).refreshDefaults(monitor, true);
} }
} }
......
...@@ -107,7 +107,7 @@ public class MySQLExecutionContext extends JDBCExecutionContext implements DBCEx ...@@ -107,7 +107,7 @@ public class MySQLExecutionContext extends JDBCExecutionContext implements DBCEx
} }
@Override @Override
public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException {
// Check default active schema // Check default active schema
try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active database")) { try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active database")) {
activeDatabaseName = MySQLUtils.determineCurrentDatabase(session); activeDatabaseName = MySQLUtils.determineCurrentDatabase(session);
......
...@@ -215,7 +215,7 @@ public class OracleDataSource extends JDBCDataSource implements IAdaptable { ...@@ -215,7 +215,7 @@ public class OracleDataSource extends JDBCDataSource implements IAdaptable {
if (initFrom != null) { if (initFrom != null) {
((OracleExecutionContext)context).setCurrentSchema(monitor, ((OracleExecutionContext)initFrom).getDefaultSchema()); ((OracleExecutionContext)context).setCurrentSchema(monitor, ((OracleExecutionContext)initFrom).getDefaultSchema());
} else { } else {
((OracleExecutionContext)context).refreshDefaults(monitor); ((OracleExecutionContext)context).refreshDefaults(monitor, true);
} }
{ {
......
...@@ -100,7 +100,7 @@ public class OracleExecutionContext extends JDBCExecutionContext implements DBCE ...@@ -100,7 +100,7 @@ public class OracleExecutionContext extends JDBCExecutionContext implements DBCE
} }
@Override @Override
public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException {
// Check default active schema // Check default active schema
try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active schema")) { try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.META, "Query active schema")) {
// Get active schema // Get active schema
......
...@@ -89,7 +89,10 @@ public class PostgreDataSource extends JDBCDataSource implements DBSInstanceCont ...@@ -89,7 +89,10 @@ public class PostgreDataSource extends JDBCDataSource implements DBSInstanceCont
@Override @Override
protected void initializeRemoteInstance(@NotNull DBRProgressMonitor monitor) throws DBException { 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)) { if (CommonUtils.isEmpty(activeDatabaseName)) {
activeDatabaseName = PostgreConstants.DEFAULT_DATABASE; activeDatabaseName = PostgreConstants.DEFAULT_DATABASE;
} }
...@@ -202,7 +205,7 @@ public class PostgreDataSource extends JDBCDataSource implements DBSInstanceCont ...@@ -202,7 +205,7 @@ public class PostgreDataSource extends JDBCDataSource implements DBSInstanceCont
((PostgreExecutionContext)context).setDefaultSchema(monitor, activeSchema); ((PostgreExecutionContext)context).setDefaultSchema(monitor, activeSchema);
} }
} else { } else {
((PostgreExecutionContext)context).refreshDefaults(monitor); ((PostgreExecutionContext)context).refreshDefaults(monitor, true);
} }
} }
......
...@@ -22,6 +22,7 @@ import org.jkiss.dbeaver.DBException; ...@@ -22,6 +22,7 @@ import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.postgresql.PostgreConstants; import org.jkiss.dbeaver.ext.postgresql.PostgreConstants;
import org.jkiss.dbeaver.model.DBUtils; 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.DBCException;
import org.jkiss.dbeaver.model.exec.DBCExecutionContextDefaults; import org.jkiss.dbeaver.model.exec.DBCExecutionContextDefaults;
import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose; import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose;
...@@ -131,9 +132,16 @@ public class PostgreExecutionContext extends JDBCExecutionContext implements DBC ...@@ -131,9 +132,16 @@ public class PostgreExecutionContext extends JDBCExecutionContext implements DBC
} }
@Override @Override
public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException {
// Check default active schema // 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 (JDBCPreparedStatement stat = session.prepareStatement("SELECT current_schema(),session_user")) {
try (JDBCResultSet rs = stat.executeQuery()) { try (JDBCResultSet rs = stat.executeQuery()) {
if (rs.nextRow()) { if (rs.nextRow()) {
...@@ -178,21 +186,23 @@ public class PostgreExecutionContext extends JDBCExecutionContext implements DBC ...@@ -178,21 +186,23 @@ public class PostgreExecutionContext extends JDBCExecutionContext implements DBC
private void setSearchPath(DBRProgressMonitor monitor, PostgreSchema schema) throws DBCException { private void setSearchPath(DBRProgressMonitor monitor, PostgreSchema schema) throws DBCException {
// Construct search path from current search path but put default schema first // 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<String> newSearchPath = new ArrayList<>(getDefaultSearchPath()); List<String> newSearchPath = new ArrayList<>(getDefaultSearchPath());
{ int schemaIndex = newSearchPath.indexOf(defSchemaName);
String defSchemaName = schema.getName(); if (schemaIndex == 0) {
int schemaIndex = newSearchPath.indexOf(defSchemaName); // Already default schema
if (schemaIndex == 0) { } else {
// Already default schema if (schemaIndex > 0) {
} else { // Remove from previous position
if (schemaIndex > 0) { newSearchPath.remove(schemaIndex);
// Remove from previous position
newSearchPath.remove(schemaIndex);
}
// Add it first
newSearchPath.add(0, defSchemaName);
} }
// Add it first
newSearchPath.add(0, defSchemaName);
} }
StringBuilder spString = new StringBuilder(); StringBuilder spString = new StringBuilder();
for (String sp : newSearchPath) { for (String sp : newSearchPath) {
if (spString.length() > 0) spString.append(","); if (spString.length() > 0) spString.append(",");
......
...@@ -1716,7 +1716,7 @@ public final class DBUtils { ...@@ -1716,7 +1716,7 @@ public final class DBUtils {
try { try {
DBSCatalog defaultCatalog = contextDefaults.getDefaultCatalog(); DBSCatalog defaultCatalog = contextDefaults.getDefaultCatalog();
DBSSchema defaultSchema = contextDefaults.getDefaultSchema(); DBSSchema defaultSchema = contextDefaults.getDefaultSchema();
if (contextDefaults.refreshDefaults(monitor)) { if (contextDefaults.refreshDefaults(monitor, false)) {
fireObjectSelectionChange(defaultCatalog, contextDefaults.getDefaultCatalog()); fireObjectSelectionChange(defaultCatalog, contextDefaults.getDefaultCatalog());
fireObjectSelectionChange(defaultSchema, contextDefaults.getDefaultSchema()); fireObjectSelectionChange(defaultSchema, contextDefaults.getDefaultSchema());
} }
...@@ -1736,19 +1736,19 @@ public final class DBUtils { ...@@ -1736,19 +1736,19 @@ public final class DBUtils {
} }
} }
public static DBSObjectContainer getChangeableObjectContainer(DBPDataSource dataSource, DBSObjectContainer root) { public static DBSObjectContainer getChangeableObjectContainer(DBCExecutionContextDefaults contextDefaults, DBSObjectContainer root, Class<? extends DBSObject> childType) {
DBCExecutionContext executionContext = DBUtils.getDefaultContext(dataSource, true);
DBCExecutionContextDefaults contextDefaults = executionContext.getContextDefaults();
if (contextDefaults == null) { if (contextDefaults == null) {
return null; return null;
} }
if (contextDefaults.supportsCatalogChange()) { if (childType == DBSCatalog.class && contextDefaults.supportsCatalogChange()) {
return root; return root;
} }
if (contextDefaults.supportsSchemaChange()) { if (childType == DBSSchema.class && contextDefaults.supportsSchemaChange()) {
DBSCatalog defaultCatalog = contextDefaults.getDefaultCatalog(); DBSCatalog defaultCatalog = contextDefaults.getDefaultCatalog();
if (defaultCatalog != null) { if (defaultCatalog != null) {
return defaultCatalog; return defaultCatalog;
} else {
return root;
} }
} }
return null; return null;
......
...@@ -18,29 +18,30 @@ package org.jkiss.dbeaver.model.connection; ...@@ -18,29 +18,30 @@ package org.jkiss.dbeaver.model.connection;
import org.jkiss.utils.CommonUtils; import org.jkiss.utils.CommonUtils;
import java.util.*; import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/** /**
* Connection bootstrap info. * Connection bootstrap info.
* Bootstrap properties are applied to each opened connection after data-source initialization. * Bootstrap properties are applied to each opened connection after data-source initialization.
*/ */
public class DBPConnectionBootstrap public class DBPConnectionBootstrap {
{ private String defaultCatalogName;
private String defaultObjectName; private String defaultSchemaName;
private Boolean defaultAutoCommit; private Boolean defaultAutoCommit;
private Integer defaultTransactionIsolation; private Integer defaultTransactionIsolation;
private final List<String> initQueries; private final List<String> initQueries;
private boolean ignoreErrors; private boolean ignoreErrors;
public DBPConnectionBootstrap() public DBPConnectionBootstrap() {
{
this.initQueries = new ArrayList<>(); this.initQueries = new ArrayList<>();
this.ignoreErrors = false; this.ignoreErrors = false;
} }
public DBPConnectionBootstrap(DBPConnectionBootstrap info) public DBPConnectionBootstrap(DBPConnectionBootstrap info) {
{ this.defaultCatalogName = info.defaultCatalogName;
this.defaultObjectName = info.defaultObjectName; this.defaultSchemaName = info.defaultSchemaName;
this.defaultAutoCommit = info.defaultAutoCommit; this.defaultAutoCommit = info.defaultAutoCommit;
this.defaultTransactionIsolation = info.defaultTransactionIsolation; this.defaultTransactionIsolation = info.defaultTransactionIsolation;
this.initQueries = new ArrayList<>(info.initQueries); this.initQueries = new ArrayList<>(info.initQueries);
...@@ -56,12 +57,20 @@ public class DBPConnectionBootstrap ...@@ -56,12 +57,20 @@ public class DBPConnectionBootstrap
initQueries.addAll(queries); initQueries.addAll(queries);
} }
public String getDefaultObjectName() { public String getDefaultCatalogName() {
return defaultObjectName; return defaultCatalogName;
} }
public void setDefaultObjectName(String defaultObjectName) { public void setDefaultCatalogName(String defaultCatalogName) {
this.defaultObjectName = defaultObjectName; this.defaultCatalogName = defaultCatalogName;
}
public String getDefaultSchemaName() {
return defaultSchemaName;
}
public void setDefaultSchemaName(String defaultSchemaName) {
this.defaultSchemaName = defaultSchemaName;
} }
public Boolean getDefaultAutoCommit() { public Boolean getDefaultAutoCommit() {
...@@ -90,11 +99,11 @@ public class DBPConnectionBootstrap ...@@ -90,11 +99,11 @@ public class DBPConnectionBootstrap
public boolean hasData() { public boolean hasData() {
return return
defaultAutoCommit != null || defaultAutoCommit != null ||
defaultTransactionIsolation != null || defaultTransactionIsolation != null ||
!CommonUtils.isEmpty(defaultObjectName) || !CommonUtils.isEmpty(defaultCatalogName) ||
ignoreErrors || ignoreErrors ||
!CommonUtils.isEmpty(initQueries); !CommonUtils.isEmpty(initQueries);
} }
@Override @Override
...@@ -102,12 +111,12 @@ public class DBPConnectionBootstrap ...@@ -102,12 +111,12 @@ public class DBPConnectionBootstrap
if (!(obj instanceof DBPConnectionBootstrap)) { if (!(obj instanceof DBPConnectionBootstrap)) {
return false; return false;
} }
DBPConnectionBootstrap source = (DBPConnectionBootstrap)obj; DBPConnectionBootstrap source = (DBPConnectionBootstrap) obj;
return return
CommonUtils.equalObjects(this.defaultObjectName, source.defaultObjectName) && CommonUtils.equalObjects(this.defaultCatalogName, source.defaultCatalogName) &&
CommonUtils.equalObjects(this.defaultAutoCommit, source.defaultAutoCommit) && CommonUtils.equalObjects(this.defaultAutoCommit, source.defaultAutoCommit) &&
CommonUtils.equalObjects(this.defaultTransactionIsolation, source.defaultTransactionIsolation) && CommonUtils.equalObjects(this.defaultTransactionIsolation, source.defaultTransactionIsolation) &&
CommonUtils.equalObjects(this.initQueries, source.initQueries) && CommonUtils.equalObjects(this.initQueries, source.initQueries) &&
this.ignoreErrors == source.ignoreErrors; this.ignoreErrors == source.ignoreErrors;
} }
} }
...@@ -40,6 +40,6 @@ public interface DBCExecutionContextDefaults<CATALOG extends DBSCatalog, SCHEMA ...@@ -40,6 +40,6 @@ public interface DBCExecutionContextDefaults<CATALOG extends DBSCatalog, SCHEMA
void setDefaultSchema(DBRProgressMonitor monitor, SCHEMA schema) throws DBCException; void setDefaultSchema(DBRProgressMonitor monitor, SCHEMA schema) throws DBCException;
boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException; boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException;
} }
...@@ -78,6 +78,10 @@ public abstract class AbstractExecutionContext<DATASOURCE extends DBPDataSource> ...@@ -78,6 +78,10 @@ public abstract class AbstractExecutionContext<DATASOURCE extends DBPDataSource>
return null; return null;
} }
@NotNull
protected DBPConnectionBootstrap getBootstrapSettings() {
return getDataSource().getContainer().getActualConnectionConfiguration().getBootstrap();
}
/** /**
* Context boot procedure. * Context boot procedure.
...@@ -90,7 +94,7 @@ public abstract class AbstractExecutionContext<DATASOURCE extends DBPDataSource> ...@@ -90,7 +94,7 @@ public abstract class AbstractExecutionContext<DATASOURCE extends DBPDataSource>
QMUtils.getDefaultHandler().handleContextOpen(this, !autoCommit); QMUtils.getDefaultHandler().handleContextOpen(this, !autoCommit);
// Execute bootstrap queries // Execute bootstrap queries
DBPConnectionBootstrap bootstrap = dataSource.getContainer().getConnectionConfiguration().getBootstrap(); DBPConnectionBootstrap bootstrap = getBootstrapSettings();
List<String> initQueries = bootstrap.getInitQueries(); List<String> initQueries = bootstrap.getInitQueries();
if (!CommonUtils.isEmpty(initQueries)) { if (!CommonUtils.isEmpty(initQueries)) {
monitor.subTask("Run bootstrap queries"); monitor.subTask("Run bootstrap queries");
......
...@@ -60,7 +60,7 @@ public class VoidExecutionContextDefaults implements DBCExecutionContextDefaults ...@@ -60,7 +60,7 @@ public class VoidExecutionContextDefaults implements DBCExecutionContextDefaults
} }
@Override @Override
public boolean refreshDefaults(DBRProgressMonitor monitor) throws DBException { public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException {
throw new DBCFeatureNotSupportedException(); throw new DBCFeatureNotSupportedException();
} }
} }
...@@ -130,16 +130,14 @@ public class JDBCExecutionContext extends AbstractExecutionContext<JDBCDataSourc ...@@ -130,16 +130,14 @@ public class JDBCExecutionContext extends AbstractExecutionContext<JDBCDataSourc
try { try {
this.initContextBootstrap(monitor, autoCommit); this.initContextBootstrap(monitor, autoCommit);
} catch (DBCException e) { } catch (DBCException e) {
log.error("Error while running context bootstrap", e); log.warn("Error while running context bootstrap", e);
} }
try { try {
// Copy context state // Init (or copy) context state
this.dataSource.initializeContextState(monitor, this, initFrom); this.dataSource.initializeContextState(monitor, this, initFrom);
} catch (DBCException e) {
log.error("Error while initializing context state", e);
} catch (DBException e) { } catch (DBException e) {
e.printStackTrace(); log.warn("Error while initializing context state", e);
} }
try { try {
......
...@@ -290,8 +290,8 @@ class DataSourceSerializerLegacy implements DataSourceSerializer ...@@ -290,8 +290,8 @@ class DataSourceSerializerLegacy implements DataSourceSerializer
if (bootstrap.getDefaultTransactionIsolation() != null) { if (bootstrap.getDefaultTransactionIsolation() != null) {
xml.addAttribute(RegistryConstants.ATTR_TXN_ISOLATION, bootstrap.getDefaultTransactionIsolation()); xml.addAttribute(RegistryConstants.ATTR_TXN_ISOLATION, bootstrap.getDefaultTransactionIsolation());
} }
if (!CommonUtils.isEmpty(bootstrap.getDefaultObjectName())) { if (!CommonUtils.isEmpty(bootstrap.getDefaultCatalogName())) {
xml.addAttribute(RegistryConstants.ATTR_DEFAULT_OBJECT, bootstrap.getDefaultObjectName()); xml.addAttribute(RegistryConstants.ATTR_DEFAULT_OBJECT, bootstrap.getDefaultCatalogName());
} }
if (bootstrap.isIgnoreErrors()) { if (bootstrap.isIgnoreErrors()) {
xml.addAttribute(RegistryConstants.ATTR_IGNORE_ERRORS, true); xml.addAttribute(RegistryConstants.ATTR_IGNORE_ERRORS, true);
...@@ -575,7 +575,7 @@ class DataSourceSerializerLegacy implements DataSourceSerializer ...@@ -575,7 +575,7 @@ class DataSourceSerializerLegacy implements DataSourceSerializer
config.getBootstrap().setDefaultTransactionIsolation(CommonUtils.toInt(atts.getValue(RegistryConstants.ATTR_TXN_ISOLATION))); config.getBootstrap().setDefaultTransactionIsolation(CommonUtils.toInt(atts.getValue(RegistryConstants.ATTR_TXN_ISOLATION)));
} }
if (!CommonUtils.isEmpty(atts.getValue(RegistryConstants.ATTR_DEFAULT_OBJECT))) { if (!CommonUtils.isEmpty(atts.getValue(RegistryConstants.ATTR_DEFAULT_OBJECT))) {
config.getBootstrap().setDefaultObjectName(atts.getValue(RegistryConstants.ATTR_DEFAULT_OBJECT)); config.getBootstrap().setDefaultCatalogName(atts.getValue(RegistryConstants.ATTR_DEFAULT_OBJECT));
} }
if (atts.getValue(RegistryConstants.ATTR_IGNORE_ERRORS) != null) { if (atts.getValue(RegistryConstants.ATTR_IGNORE_ERRORS) != null) {
config.getBootstrap().setIgnoreErrors(CommonUtils.toBoolean(atts.getValue(RegistryConstants.ATTR_IGNORE_ERRORS))); config.getBootstrap().setIgnoreErrors(CommonUtils.toBoolean(atts.getValue(RegistryConstants.ATTR_IGNORE_ERRORS)));
...@@ -642,7 +642,7 @@ class DataSourceSerializerLegacy implements DataSourceSerializer ...@@ -642,7 +642,7 @@ class DataSourceSerializerLegacy implements DataSourceSerializer
break; break;
case DataSourceRegistry.DEFAULT_ACTIVE_OBJECT: case DataSourceRegistry.DEFAULT_ACTIVE_OBJECT:
if (!CommonUtils.isEmpty(propValue)) { if (!CommonUtils.isEmpty(propValue)) {
curDataSource.getConnectionConfiguration().getBootstrap().setDefaultObjectName(propValue); curDataSource.getConnectionConfiguration().getBootstrap().setDefaultCatalogName(propValue);
} }
break; break;
default: default:
......
...@@ -517,17 +517,24 @@ class DataSourceSerializerModern implements DataSourceSerializer ...@@ -517,17 +517,24 @@ class DataSourceSerializerModern implements DataSourceSerializer
// Bootstrap // Bootstrap
Map<String, Object> bootstrapCfg = JSONUtils.getObject(cfgObject, RegistryConstants.TAG_BOOTSTRAP); Map<String, Object> bootstrapCfg = JSONUtils.getObject(cfgObject, RegistryConstants.TAG_BOOTSTRAP);
DBPConnectionBootstrap bootstrap = config.getBootstrap();
if (bootstrapCfg.containsKey(RegistryConstants.ATTR_AUTOCOMMIT)) { 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)) { 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)) { 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 // Permissions
...@@ -775,7 +782,8 @@ class DataSourceSerializerModern implements DataSourceSerializer ...@@ -775,7 +782,8 @@ class DataSourceSerializerModern implements DataSourceSerializer
if (bootstrap.getDefaultTransactionIsolation() != null) { if (bootstrap.getDefaultTransactionIsolation() != null) {
JSONUtils.field(json, RegistryConstants.ATTR_TXN_ISOLATION, bootstrap.getDefaultTransactionIsolation()); 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()) { if (bootstrap.isIgnoreErrors()) {
JSONUtils.field(json, RegistryConstants.ATTR_IGNORE_ERRORS, true); JSONUtils.field(json, RegistryConstants.ATTR_IGNORE_ERRORS, true);
} }
......
...@@ -96,6 +96,8 @@ public class RegistryConstants { ...@@ -96,6 +96,8 @@ public class RegistryConstants {
public static final String ATTR_AUTOCOMMIT = "autocommit"; //$NON-NLS-1$ 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_TXN_ISOLATION = "txnIsolation"; //$NON-NLS-1$
public static final String ATTR_DEFAULT_OBJECT = "defaultObject"; //$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_EXECUTE = "confirmExecute"; //$NON-NLS-1$
public static final String ATTR_CONFIRM_DATA_CHANGE = "confirmDataChange"; //$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$ public static final String ATTR_PARENT = "parent"; //$NON-NLS-1$
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册