diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java index c2ba23854f..69f8a9e196 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java @@ -981,6 +981,23 @@ public class CalciteProvider { } } + public void updateDsPoolAfterCheckStatus(DatasourceDTO datasourceDTO) throws DEException { + 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 = calciteConnection.getRootSchema(); + if (rootSchema.getSubSchema(datasourceSchemaDTO.getSchemaAlias()) == null) { + buildSchema(datasourceRequest, calciteConnection); + } + } catch (Exception e) { + DEException.throwException(e.getMessage()); + } + } + public void delete(CoreDatasource datasource) throws DEException { DatasourceSchemaDTO datasourceSchemaDTO = new DatasourceSchemaDTO(); BeanUtils.copyBean(datasourceSchemaDTO, datasource); diff --git a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java index 05923ea7d3..eb7b13104c 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java @@ -655,9 +655,7 @@ public class DatasourceServer implements DatasourceApi { BeanUtils.copyBean(datasourceDTO, coreDatasource); try { checkDatasourceStatus(coreDatasource); - if(StringUtils.isNotEmpty(lastStatus) && StringUtils.isNotEmpty(coreDatasource.getStatus()) && lastStatus.equalsIgnoreCase("Error") && coreDatasource.getStatus().equalsIgnoreCase("Success")){ - calciteProvider.update(datasourceDTO); - } + calciteProvider.updateDsPoolAfterCheckStatus(datasourceDTO); } catch (Exception e) { coreDatasource.setStatus("Error"); DEException.throwException(e.getMessage());