提交 18788098 编写于 作者: S Serge Rider

#7472 Default catalogs/schema connection config

上级 1543bdd4
...@@ -21,6 +21,7 @@ import org.jkiss.code.Nullable; ...@@ -21,6 +21,7 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.Log;
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;
...@@ -31,6 +32,7 @@ import org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance; ...@@ -31,6 +32,7 @@ import org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils; import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.rdb.DBSCatalog; import org.jkiss.dbeaver.model.struct.rdb.DBSCatalog;
import org.jkiss.utils.CommonUtils;
import java.sql.SQLException; import java.sql.SQLException;
...@@ -108,6 +110,12 @@ public class DB2ExecutionContext extends JDBCExecutionContext implements DBCExec ...@@ -108,6 +110,12 @@ public class DB2ExecutionContext extends JDBCExecutionContext implements DBCExec
public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) 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")) {
if (useBootstrapSettings) {
DBPConnectionBootstrap bootstrap = getBootstrapSettings();
if (!CommonUtils.isEmpty(bootstrap.getDefaultSchemaName())) {
setCurrentSchema(monitor, bootstrap.getDefaultSchemaName());
}
}
// Get active schema // Get active schema
this.activeSchemaName = determineActiveSchema(session); this.activeSchemaName = determineActiveSchema(session);
} catch (Exception e) { } catch (Exception e) {
...@@ -122,9 +130,13 @@ public class DB2ExecutionContext extends JDBCExecutionContext implements DBCExec ...@@ -122,9 +130,13 @@ public class DB2ExecutionContext extends JDBCExecutionContext implements DBCExec
log.debug("Null current schema"); log.debug("Null current schema");
return; return;
} }
setCurrentSchema(monitor, object.getName());
}
private void setCurrentSchema(DBRProgressMonitor monitor, String schemaName) throws DBCException {
try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Set active schema")) { try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Set active schema")) {
JDBCUtils.executeSQL(session, String.format(SET_CURRENT_SCHEMA, object.getName())); JDBCUtils.executeSQL(session, String.format(SET_CURRENT_SCHEMA, schemaName));
this.activeSchemaName = object.getName(); this.activeSchemaName = schemaName;
} catch (SQLException e) { } catch (SQLException e) {
throw new DBCException(e, getDataSource()); throw new DBCException(e, getDataSource());
} }
......
...@@ -21,6 +21,7 @@ import org.jkiss.code.Nullable; ...@@ -21,6 +21,7 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.Log;
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;
...@@ -31,6 +32,7 @@ import org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance; ...@@ -31,6 +32,7 @@ import org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils; import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.rdb.DBSCatalog; import org.jkiss.dbeaver.model.struct.rdb.DBSCatalog;
import org.jkiss.utils.CommonUtils;
import java.sql.SQLException; import java.sql.SQLException;
...@@ -107,6 +109,12 @@ public class ExasolExecutionContext extends JDBCExecutionContext implements DBCE ...@@ -107,6 +109,12 @@ public class ExasolExecutionContext extends JDBCExecutionContext implements DBCE
public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) 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")) {
if (useBootstrapSettings) {
DBPConnectionBootstrap bootstrap = getBootstrapSettings();
if (!CommonUtils.isEmpty(bootstrap.getDefaultSchemaName())) {
setCurrentSchema(monitor, bootstrap.getDefaultSchemaName());
}
}
// Get active schema // Get active schema
this.activeSchemaName = determineActiveSchema(session); this.activeSchemaName = determineActiveSchema(session);
} catch (Exception e) { } catch (Exception e) {
...@@ -121,9 +129,13 @@ public class ExasolExecutionContext extends JDBCExecutionContext implements DBCE ...@@ -121,9 +129,13 @@ public class ExasolExecutionContext extends JDBCExecutionContext implements DBCE
log.debug("Null current schema"); log.debug("Null current schema");
return; return;
} }
setCurrentSchema(monitor, object.getName());
}
private void setCurrentSchema(DBRProgressMonitor monitor, String schemaName) throws DBCException {
try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Set active schema")) { try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Set active schema")) {
JDBCUtils.executeSQL(session, String.format(SET_CURRENT_SCHEMA, object.getName())); JDBCUtils.executeSQL(session, String.format(SET_CURRENT_SCHEMA, schemaName));
this.activeSchemaName = object.getName(); this.activeSchemaName = schemaName;
} catch (SQLException e) { } catch (SQLException e) {
throw new DBCException(e, getDataSource()); throw new DBCException(e, getDataSource());
} }
......
...@@ -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.generic.GenericConstants; import org.jkiss.dbeaver.ext.generic.GenericConstants;
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;
...@@ -257,16 +258,26 @@ public class GenericExecutionContext extends JDBCExecutionContext implements DBC ...@@ -257,16 +258,26 @@ public class GenericExecutionContext extends JDBCExecutionContext implements DBC
return; return;
} }
GenericDataSource dataSource = getDataSource();
GenericSchema oldSelectedSchema = getDefaultSchema(); GenericSchema oldSelectedSchema = getDefaultSchema();
setDefaultSchema(monitor, schema.getName());
if (oldSelectedSchema != null) {
DBUtils.fireObjectSelect(oldSelectedSchema, false);
}
DBUtils.fireObjectSelect(schema, true);
}
private void setDefaultSchema(DBRProgressMonitor monitor, String schemaName) throws DBCException {
GenericDataSource dataSource = getDataSource();
try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Set active schema")) { try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Set active schema")) {
if (dataSource.isSelectedEntityFromAPI()) { if (dataSource.isSelectedEntityFromAPI()) {
session.setSchema(schema.getName()); session.setSchema(schemaName);
} else { } else {
if (CommonUtils.isEmpty(dataSource.getQuerySetActiveDB())) { if (CommonUtils.isEmpty(dataSource.getQuerySetActiveDB())) {
throw new DBCException("Active schema can't be changed for this kind of datasource!"); throw new DBCException("Active schema can't be changed for this kind of datasource!");
} }
String changeQuery = dataSource.getQuerySetActiveDB().replaceFirst("\\?", Matcher.quoteReplacement(schema.getName())); String changeQuery = dataSource.getQuerySetActiveDB().replaceFirst("\\?", Matcher.quoteReplacement(schemaName));
try (JDBCPreparedStatement dbStat = session.prepareStatement(changeQuery)) { try (JDBCPreparedStatement dbStat = session.prepareStatement(changeQuery)) {
dbStat.execute(); dbStat.execute();
} }
...@@ -274,18 +285,20 @@ public class GenericExecutionContext extends JDBCExecutionContext implements DBC ...@@ -274,18 +285,20 @@ public class GenericExecutionContext extends JDBCExecutionContext implements DBC
} catch (SQLException e) { } catch (SQLException e) {
throw new DBCException(e, dataSource); throw new DBCException(e, dataSource);
} }
selectedEntityName = schema.getName(); selectedEntityName = schemaName;
dataSource.setSelectedEntityType(GenericConstants.ENTITY_TYPE_SCHEMA); dataSource.setSelectedEntityType(GenericConstants.ENTITY_TYPE_SCHEMA);
if (oldSelectedSchema != null) {
DBUtils.fireObjectSelect(oldSelectedSchema, false);
}
DBUtils.fireObjectSelect(schema, true);
} }
@Override @Override
public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException { public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) throws DBException {
if (useBootstrapSettings) {
DBPConnectionBootstrap bootstrap = getBootstrapSettings();
if (!CommonUtils.isEmpty(bootstrap.getDefaultSchemaName())) {
setDefaultSchema(monitor, bootstrap.getDefaultSchemaName());
}
}
String oldEntityName = selectedEntityName; String oldEntityName = selectedEntityName;
DBSObject oldDefaultObject = getDefaultObject(); DBSObject oldDefaultObject = getDefaultObject();
......
...@@ -23,6 +23,7 @@ import org.jkiss.dbeaver.Log; ...@@ -23,6 +23,7 @@ import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.mssql.SQLServerConstants; import org.jkiss.dbeaver.ext.mssql.SQLServerConstants;
import org.jkiss.dbeaver.ext.mssql.SQLServerUtils; import org.jkiss.dbeaver.ext.mssql.SQLServerUtils;
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;
...@@ -31,6 +32,7 @@ import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession; ...@@ -31,6 +32,7 @@ import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext; import org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance; import org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.utils.CommonUtils;
import java.sql.SQLException; import java.sql.SQLException;
...@@ -114,6 +116,13 @@ public class SQLServerExecutionContext extends JDBCExecutionContext implements D ...@@ -114,6 +116,13 @@ public class SQLServerExecutionContext extends JDBCExecutionContext implements D
public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) 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")) {
if (useBootstrapSettings) {
DBPConnectionBootstrap bootstrap = getBootstrapSettings();
if (!CommonUtils.isEmpty(bootstrap.getDefaultSchemaName())) {
setCurrentDatabase(monitor, bootstrap.getDefaultCatalogName());
}
}
activeDatabaseName = SQLServerUtils.getCurrentDatabase(session); activeDatabaseName = SQLServerUtils.getCurrentDatabase(session);
} catch (SQLException e) { } catch (SQLException e) {
throw new DBCException(e, getDataSource()); throw new DBCException(e, getDataSource());
...@@ -127,9 +136,14 @@ public class SQLServerExecutionContext extends JDBCExecutionContext implements D ...@@ -127,9 +136,14 @@ public class SQLServerExecutionContext extends JDBCExecutionContext implements D
log.debug("Null current schema"); log.debug("Null current schema");
return false; return false;
} }
String databaseName = object.getName();
return setCurrentDatabase(monitor, databaseName);
}
private boolean setCurrentDatabase(DBRProgressMonitor monitor, String databaseName) {
try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Set active database")) { try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Set active database")) {
SQLServerUtils.setCurrentDatabase(session, object.getName()); SQLServerUtils.setCurrentDatabase(session, databaseName);
activeDatabaseName = object.getName(); activeDatabaseName = databaseName;
return true; return true;
} catch (SQLException e) { } catch (SQLException e) {
log.error(e); log.error(e);
......
...@@ -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.mysql.MySQLUtils; import org.jkiss.dbeaver.ext.mysql.MySQLUtils;
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;
...@@ -110,6 +111,13 @@ public class MySQLExecutionContext extends JDBCExecutionContext implements DBCEx ...@@ -110,6 +111,13 @@ public class MySQLExecutionContext extends JDBCExecutionContext implements DBCEx
public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) 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")) {
if (useBootstrapSettings) {
DBPConnectionBootstrap bootstrap = getBootstrapSettings();
if (!CommonUtils.isEmpty(bootstrap.getDefaultCatalogName())) {
setCurrentDatabaseName(monitor, bootstrap.getDefaultCatalogName());
}
}
activeDatabaseName = MySQLUtils.determineCurrentDatabase(session); activeDatabaseName = MySQLUtils.determineCurrentDatabase(session);
} catch (DBException e) { } catch (DBException e) {
throw new DBCException(e, getDataSource()); throw new DBCException(e, getDataSource());
...@@ -123,11 +131,16 @@ public class MySQLExecutionContext extends JDBCExecutionContext implements DBCEx ...@@ -123,11 +131,16 @@ public class MySQLExecutionContext extends JDBCExecutionContext implements DBCEx
log.debug("Null current database"); log.debug("Null current database");
return false; return false;
} }
String databaseName = object.getName();
return setCurrentDatabaseName(monitor, databaseName);
}
private boolean setCurrentDatabaseName(DBRProgressMonitor monitor, String databaseName) throws DBCException {
try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Set active catalog")) { try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Set active catalog")) {
try (JDBCPreparedStatement dbStat = session.prepareStatement("use " + DBUtils.getQuotedIdentifier(object))) { try (JDBCPreparedStatement dbStat = session.prepareStatement("use " + DBUtils.getQuotedIdentifier(getDataSource(), databaseName))) {
dbStat.execute(); dbStat.execute();
} }
this.activeDatabaseName = object.getName(); this.activeDatabaseName = databaseName;
return true; return true;
} catch (SQLException e) { } catch (SQLException e) {
throw new DBCException(e, getDataSource()); throw new DBCException(e, getDataSource());
......
...@@ -21,6 +21,7 @@ import org.jkiss.code.Nullable; ...@@ -21,6 +21,7 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.Log;
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;
...@@ -30,6 +31,7 @@ import org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext; ...@@ -30,6 +31,7 @@ import org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance; import org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.rdb.DBSCatalog; import org.jkiss.dbeaver.model.struct.rdb.DBSCatalog;
import org.jkiss.utils.CommonUtils;
import java.sql.SQLException; import java.sql.SQLException;
...@@ -103,6 +105,12 @@ public class OracleExecutionContext extends JDBCExecutionContext implements DBCE ...@@ -103,6 +105,12 @@ public class OracleExecutionContext extends JDBCExecutionContext implements DBCE
public boolean refreshDefaults(DBRProgressMonitor monitor, boolean useBootstrapSettings) 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")) {
if (useBootstrapSettings) {
DBPConnectionBootstrap bootstrap = getBootstrapSettings();
if (!CommonUtils.isEmpty(bootstrap.getDefaultSchemaName())) {
setCurrentSchema(monitor, bootstrap.getDefaultSchemaName());
}
}
// Get active schema // Get active schema
this.activeSchemaName = OracleUtils.getCurrentSchema(session); this.activeSchemaName = OracleUtils.getCurrentSchema(session);
if (this.activeSchemaName != null) { if (this.activeSchemaName != null) {
...@@ -122,9 +130,13 @@ public class OracleExecutionContext extends JDBCExecutionContext implements DBCE ...@@ -122,9 +130,13 @@ public class OracleExecutionContext extends JDBCExecutionContext implements DBCE
log.debug("Null current schema"); log.debug("Null current schema");
return; return;
} }
setCurrentSchema(monitor, object.getName());
}
private void setCurrentSchema(DBRProgressMonitor monitor, String activeSchemaName) throws DBCException {
try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Set active schema")) { try (JDBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Set active schema")) {
OracleUtils.setCurrentSchema(session, object.getName()); OracleUtils.setCurrentSchema(session, activeSchemaName);
this.activeSchemaName = object.getName(); this.activeSchemaName = activeSchemaName;
} catch (SQLException e) { } catch (SQLException e) {
throw new DBCException(e, getDataSource()); throw new DBCException(e, getDataSource());
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册