fix: 校验数据源

This commit is contained in:
taojinlong
2025-09-22 17:06:05 +08:00
parent 3adb9c72e4
commit 5b4e7730ef
4 changed files with 238 additions and 216 deletions

View File

@@ -936,7 +936,7 @@ public class CalciteProvider extends Provider {
calciteConnection = connection.unwrap(CalciteConnection.class);
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDsList(dsMap);
buildSchema(datasourceRequest, calciteConnection);
buildRootSchema(datasourceRequest, calciteConnection);
return connection;
}
@@ -971,223 +971,224 @@ public class CalciteProvider extends Provider {
}
// 构建root schema
private SchemaPlus buildSchema(DatasourceRequest datasourceRequest, CalciteConnection calciteConnection) {
private SchemaPlus buildRootSchema(DatasourceRequest datasourceRequest, CalciteConnection calciteConnection) {
SchemaPlus rootSchema = calciteConnection.getRootSchema();
Map<Long, DatasourceSchemaDTO> dsList = datasourceRequest.getDsList();
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsList.entrySet()) {
DatasourceSchemaDTO ds = next.getValue();
commonThreadPool.addTask(() -> {
try {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setMaxWaitMillis(5 * 1000);
dataSource.setTestWhileIdle(true);
dataSource.setTestOnBorrow(true);
dataSource.setTestOnReturn(true);
dataSource.setTimeBetweenEvictionRunsMillis(60 * 1000);
dataSource.setValidationQuery("select 1");
dataSource.setValidationQueryTimeout(5);
Schema schema = null;
DatasourceConfiguration configuration = null;
DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(ds.getType());
try {
if (rootSchema.getSubSchema(ds.getSchemaAlias()) != null) {
JdbcSchema jdbcSchema = rootSchema.getSubSchema(ds.getSchemaAlias()).unwrap(JdbcSchema.class);
BasicDataSource basicDataSource = (BasicDataSource) jdbcSchema.getDataSource();
basicDataSource.close();
rootSchema.removeSubSchema(ds.getSchemaAlias());
}
switch (datasourceType) {
case mysql:
case mongo:
case mariadb:
case TiDB:
case StarRocks:
case doris:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Mysql.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getDataBase());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case impala:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Impala.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getDataBase());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case sqlServer:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Sqlserver.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
dataSource.setDefaultSchema(configuration.getSchema());
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getSchema());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case oracle:
dataSource.setValidationQuery("SELECT 1 FROM DUAL");
configuration = JsonUtil.parseObject(ds.getConfiguration(), Oracle.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
dataSource.setConnectionInitSqls(Collections.singletonList(
"ALTER SESSION SET CURRENT_SCHEMA = " + configuration.getSchema()
));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getSchema());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case db2:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Db2.class);
dataSource.setValidationQuery("select 1 from syscat.tables WHERE TABSCHEMA ='DE_SCHEMA' AND \"TYPE\" = 'T'".replace("DE_SCHEMA", configuration.getSchema()));
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getSchema());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case ck:
configuration = JsonUtil.parseObject(ds.getConfiguration(), CK.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getDataBase());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case pg:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Pg.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getSchema());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case redshift:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Redshift.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getSchema());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case h2:
configuration = JsonUtil.parseObject(ds.getConfiguration(), H2.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getDataBase());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
default:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Mysql.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getDataBase());
rootSchema.add(ds.getSchemaAlias(), schema);
}
} catch (Exception e) {
LogUtil.error("Fail to create connection: " + ds.getName(), e);
}
buildSchema(ds, rootSchema);
} catch (Exception e) {
LogUtil.error("Fail to create connection: " + ds.getName(), e);
}
});
}
return rootSchema;
}
private void buildSchema(DatasourceSchemaDTO ds, SchemaPlus rootSchema) throws Exception {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setMaxWaitMillis(5 * 1000);
dataSource.setTestWhileIdle(true);
dataSource.setTestOnBorrow(true);
dataSource.setTestOnReturn(true);
dataSource.setTimeBetweenEvictionRunsMillis(60 * 1000);
dataSource.setValidationQuery("select 1");
dataSource.setValidationQueryTimeout(5);
Schema schema = null;
DatasourceConfiguration configuration = null;
DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(ds.getType());
if (rootSchema.getSubSchema(ds.getSchemaAlias()) != null) {
JdbcSchema jdbcSchema = rootSchema.getSubSchema(ds.getSchemaAlias()).unwrap(JdbcSchema.class);
BasicDataSource basicDataSource = (BasicDataSource) jdbcSchema.getDataSource();
basicDataSource.close();
rootSchema.removeSubSchema(ds.getSchemaAlias());
}
switch (datasourceType) {
case mysql:
case mongo:
case mariadb:
case TiDB:
case StarRocks:
case doris:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Mysql.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getDataBase());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case impala:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Impala.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getDataBase());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case sqlServer:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Sqlserver.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
dataSource.setDefaultSchema(configuration.getSchema());
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getSchema());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case oracle:
dataSource.setValidationQuery("SELECT 1 FROM DUAL");
configuration = JsonUtil.parseObject(ds.getConfiguration(), Oracle.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
dataSource.setConnectionInitSqls(Collections.singletonList(
"ALTER SESSION SET CURRENT_SCHEMA = " + configuration.getSchema()
));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getSchema());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case db2:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Db2.class);
dataSource.setValidationQuery("select 1 from syscat.tables WHERE TABSCHEMA ='DE_SCHEMA' AND \"TYPE\" = 'T'".replace("DE_SCHEMA", configuration.getSchema()));
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getSchema());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case ck:
configuration = JsonUtil.parseObject(ds.getConfiguration(), CK.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getDataBase());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case pg:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Pg.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getSchema());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case redshift:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Redshift.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getSchema());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
case h2:
configuration = JsonUtil.parseObject(ds.getConfiguration(), H2.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getDataBase());
rootSchema.add(ds.getSchemaAlias(), schema);
break;
default:
configuration = JsonUtil.parseObject(ds.getConfiguration(), Mysql.class);
if (StringUtils.isNotBlank(configuration.getUsername())) {
dataSource.setUsername(configuration.getUsername());
}
if (StringUtils.isNotBlank(configuration.getPassword())) {
dataSource.setPassword(configuration.getPassword());
}
dataSource.setInitialSize(configuration.getInitialPoolSize());
dataSource.setMaxTotal(configuration.getMaxPoolSize());
dataSource.setMinIdle(configuration.getMinPoolSize());
dataSource.setDefaultQueryTimeout(Integer.valueOf(configuration.getQueryTimeout()));
startSshSession(configuration, null, ds.getId());
dataSource.setUrl(configuration.getJdbc());
schema = JdbcSchema.create(rootSchema, ds.getSchemaAlias(), dataSource, null, configuration.getDataBase());
rootSchema.add(ds.getSchemaAlias(), schema);
}
}
private List<String[]> getDataResult(ResultSet rs) {
List<String[]> list = new LinkedList<>();
try {
@@ -1572,18 +1573,14 @@ public class CalciteProvider extends Provider {
}
public void update(DatasourceDTO datasourceDTO) throws DEException {
public void update(DatasourceDTO datasourceDTO) throws Exception {
DatasourceSchemaDTO datasourceSchemaDTO = new DatasourceSchemaDTO();
BeanUtils.copyBean(datasourceSchemaDTO, datasourceDTO);
datasourceSchemaDTO.setSchemaAlias(String.format(SQLConstants.SCHEMA, datasourceSchemaDTO.getId()));
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDsList(Map.of(datasourceSchemaDTO.getId(), datasourceSchemaDTO));
try {
CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
SchemaPlus rootSchema = buildSchema(datasourceRequest, calciteConnection);
} catch (Exception e) {
DEException.throwException(e.getMessage());
}
CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
buildSchema(datasourceSchemaDTO, calciteConnection.getRootSchema());
}
public void updateDsPoolAfterCheckStatus(DatasourceDTO datasourceDTO) throws DEException {
@@ -1596,7 +1593,7 @@ public class CalciteProvider extends Provider {
CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
SchemaPlus rootSchema = calciteConnection.getRootSchema();
if (rootSchema.getSubSchema(datasourceSchemaDTO.getSchemaAlias()) == null) {
buildSchema(datasourceRequest, calciteConnection);
buildSchema(datasourceSchemaDTO, rootSchema);
}
DatasourceConfiguration configuration = JsonUtil.parseObject(datasourceDTO.getConfiguration(), DatasourceConfiguration.class);
if (configuration.isUseSSH()) {

View File

@@ -365,7 +365,15 @@ public class DatasourceServer implements DatasourceApi {
datasourceSyncManage.addSchedule(coreDatasourceTask);
} else {
checkParams(dataSourceDTO.getConfiguration());
calciteProvider.update(dataSourceDTO);
commonThreadPool.addTask(() -> {
try {
calciteProvider.update(dataSourceDTO);
} catch (Exception e) {
CoreDatasource ds = coreDatasourceRepository.findById(coreDatasource.getId()).orElse(null);
ds.setStatus("Error");
dataSourceManage.innerEditStatus(ds);
}
});
}
return dataSourceDTO;
}
@@ -500,7 +508,15 @@ public class DatasourceServer implements DatasourceApi {
checkParams(dataSourceDTO.getConfiguration());
dataSourceManage.checkName(dataSourceDTO);
dataSourceManage.innerEdit(requestDatasource);
calciteProvider.update(dataSourceDTO);
commonThreadPool.addTask(() -> {
try {
calciteProvider.update(dataSourceDTO);
} catch (Exception e) {
CoreDatasource datasource = coreDatasourceRepository.findById(requestDatasource.getId()).orElse(null);
datasource.setStatus("Error");
dataSourceManage.innerEditStatus(datasource);
}
});
}
return dataSourceDTO;
}

View File

@@ -75,7 +75,11 @@ public class EngineServer implements EngineApi {
} else {
coreDeEngineRepository.saveAndFlush(coreDeEngine);
}
calciteProvider.update(datasourceDTO);
try {
calciteProvider.update(datasourceDTO);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override

View File

@@ -201,6 +201,7 @@ const datasetTypeList = computed(() => {
})
const dsTableDataLoading = ref(false)
const validateDsLoading = ref(false)
const selectDataset = row => {
Object.assign(dsTableDetail, row)
userDrawer.value = true
@@ -291,8 +292,10 @@ const handleLoadExcel = data => {
const validateDS = () => {
let nodeTmpInfo = reactive<Node>(cloneDeep(defaultInfo))
Object.assign(nodeTmpInfo, cloneDeep(nodeInfo))
validateDsLoading.value = true
validateById(nodeTmpInfo.id as number)
.then(res => {
validateDsLoading.value = false
if (res.data.type.startsWith('API')) {
let error = 0
const dsStatus = JSON.parse(res.data.status)
@@ -319,6 +322,7 @@ const validateDS = () => {
}
})
.catch(() => {
validateDsLoading.value = false
changeDsStatus(state.datasourceTree, nodeTmpInfo.id, -Math.abs(nodeTmpInfo.extraFlag))
})
}
@@ -1317,6 +1321,7 @@ const getMenuList = (val: boolean) => {
<el-button
v-if="nodeInfo.type !== 'Excel' && nodeInfo.weight >= 7"
secondary
v-loading="validateDsLoading"
@click="validateDS"
>
{{ t('datasource.validate') }}</el-button