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

#7472 Default catalogs/schema connection config

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