级联查询修改

This commit is contained in:
hekaiyu 2025-10-15 11:33:19 +08:00
parent b94e7e75f3
commit b6a4443ce1

View File

@ -84,37 +84,57 @@ public class StasDataSourceServiceImpl extends ServiceImpl<StasDataSourceMapper,
@Override
public List<String> queryUserList(String sourceId) {
return queryDatabaseMetadata(sourceId, "SELECT username FROM ALL_USERS", "username");
StasDataSource stasDataSource = this.baseMapper.selectById(sourceId);
if(SourceDataTypeEnum.ORACLE.getKey() == stasDataSource.getType()){
return queryDatabaseMetadata(stasDataSource, "SELECT username FROM ALL_USERS", "username");
} else {
return queryDatabaseMetadata(stasDataSource, "SELECT datname AS username FROM pg_database WHERE datistemplate = false ORDER BY datname;", "username");
}
}
@Override
public List<String> queryTableList(String sourceId, String username) {
String sql = "SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = ?";
return queryDatabaseMetadata(sourceId, sql, "TABLE_NAME", username);
StasDataSource stasDataSource = this.baseMapper.selectById(sourceId);
if(SourceDataTypeEnum.ORACLE.getKey() == stasDataSource.getType()){
String sql = "SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = ?";
return queryDatabaseMetadata(stasDataSource, sql, "TABLE_NAME", username);
} else {
String sql = "SELECT tablename AS table_name FROM pg_tables WHERE schemaname = ?";
return queryDatabaseMetadata(stasDataSource, sql, "table_name", "public");
}
}
@Override
public List<String> queryColumnList(String sourceId, String username, String tableName) {
String sql = "SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE OWNER = ? AND TABLE_NAME = ?";
return queryDatabaseMetadata(sourceId, sql, "COLUMN_NAME", username, tableName);
StasDataSource stasDataSource = this.baseMapper.selectById(sourceId);
if(SourceDataTypeEnum.ORACLE.getKey() == stasDataSource.getType()){
String sql = "SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE OWNER = ? AND TABLE_NAME = ?";
return queryDatabaseMetadata(stasDataSource, sql, "COLUMN_NAME", username, tableName);
} else {
String sql = "SELECT column_name FROM information_schema.columns WHERE table_schema = ? AND table_name = ?";
return queryDatabaseMetadata(stasDataSource, sql, "column_name", "public", tableName);
}
}
/**
* 通用数据库元数据查询方法
* @param sourceId 数据源ID
* @param stasDataSource 数据源
* @param sql 查询SQL
* @param columnName 要获取的列名
* @param params SQL参数
* @return 查询结果列表
*/
private List<String> queryDatabaseMetadata(String sourceId, String sql, String columnName, Object... params) {
StasDataSource stasDataSource = this.baseMapper.selectById(sourceId);
private List<String> queryDatabaseMetadata(StasDataSource stasDataSource, String sql, String columnName, Object... params) {
if (stasDataSource == null) {
return Collections.emptyList();
}
String urlSource = DBUtil.ORACLE_URL_PREFIX + stasDataSource.getIpAddress() + ":"
+ stasDataSource.getPort() + stasDataSource.getServeId();
String urlSource;
if(SourceDataTypeEnum.POSTGRES.getKey() == stasDataSource.getType()){
urlSource = DBUtil.POSTGRES_URL_PREFIX + stasDataSource.getIpAddress() + ":" + stasDataSource.getPort() + stasDataSource.getServeId();
}else {
urlSource = DBUtil.ORACLE_URL_PREFIX + stasDataSource.getIpAddress() + ":" + stasDataSource.getPort() + stasDataSource.getServeId();
}
List<String> resultList = new ArrayList<>();