Merge pull request #7573 from dataease/pr@dev@fixSql

Pr@dev@fix sql
This commit is contained in:
taojinlong
2024-01-10 17:16:47 +08:00
committed by GitHub
24 changed files with 296 additions and 148 deletions

View File

@@ -11,11 +11,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import io.dataease.controller.sys.response.BasicInfo;
import io.dataease.dto.dataset.DatasetTableFieldDTO;
import io.dataease.plugins.common.dto.datasource.TableDesc;
import io.dataease.plugins.common.dto.datasource.TableField;
import io.dataease.plugins.common.request.datasource.DatasourceRequest;
import io.dataease.plugins.datasource.entity.Status;
import io.dataease.plugins.datasource.provider.Provider;
import com.jayway.jsonpath.JsonPath;
import io.dataease.commons.utils.HttpClientConfig;
@@ -23,14 +23,9 @@ import io.dataease.commons.utils.HttpClientUtil;
import io.dataease.controller.request.datasource.ApiDefinition;
import io.dataease.controller.request.datasource.ApiDefinitionRequest;
import io.dataease.service.system.SystemParameterService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;
@@ -106,6 +101,13 @@ public class ApiProvider extends Provider {
return tableFields;
}
@Override
public Status checkDsStatus(DatasourceRequest datasourceRequest) throws Exception {
Status status = new Status();
status.setStatus(checkStatus(datasourceRequest));
return status;
}
public String checkStatus(DatasourceRequest datasourceRequest) throws Exception {
Gson gson = new Gson();
List<ApiDefinition> apiDefinitionList = gson.fromJson(datasourceRequest.getDatasource().getConfiguration(), new TypeToken<List<ApiDefinition>>() {

View File

@@ -14,6 +14,7 @@ import io.dataease.plugins.common.dto.datasource.TableDesc;
import io.dataease.plugins.common.dto.datasource.TableField;
import io.dataease.plugins.common.exception.DataEaseException;
import io.dataease.plugins.common.request.datasource.DatasourceRequest;
import io.dataease.plugins.datasource.entity.Status;
import io.dataease.plugins.datasource.provider.Provider;
import io.dataease.provider.query.es.EsQueryProvider;
import org.apache.commons.codec.binary.Base64;
@@ -181,7 +182,7 @@ public class EsProvider extends Provider {
}
for (String[] row : esResponse.getRows()) {
if(!row[1].equalsIgnoreCase("STRUCT") && !row[2].equalsIgnoreCase("unsupported")){
if (!row[1].equalsIgnoreCase("STRUCT") && !row[2].equalsIgnoreCase("unsupported")) {
TableField field = new TableField();
field.setFieldName(row[0]);
field.setRemarks(row[0]);
@@ -251,6 +252,13 @@ public class EsProvider extends Provider {
return new ArrayList<>();
}
@Override
public Status checkDsStatus(DatasourceRequest datasourceRequest) throws Exception {
Status status = new Status();
status.setStatus(checkStatus(datasourceRequest));
return status;
}
@Override
public String checkStatus(DatasourceRequest datasourceRequest) throws Exception {

View File

@@ -18,6 +18,7 @@ import io.dataease.plugins.common.exception.DataEaseException;
import io.dataease.plugins.common.request.datasource.DatasourceRequest;
import io.dataease.plugins.common.util.SpringContextUtil;
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
import io.dataease.plugins.datasource.entity.Status;
import io.dataease.plugins.datasource.provider.DefaultJdbcProvider;
import io.dataease.plugins.datasource.provider.ExtendedJdbcClassLoader;
import io.dataease.plugins.datasource.query.QueryProvider;
@@ -369,6 +370,22 @@ public class JdbcProvider extends DefaultJdbcProvider {
return list;
}
@Override
public Status checkDsStatus(DatasourceRequest datasourceRequest) throws Exception {
Status status = new Status();
String queryStr = getTablesSql(datasourceRequest);
JdbcConfiguration jdbcConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), JdbcConfiguration.class);
int queryTimeout = jdbcConfiguration.getQueryTimeout() > 0 ? jdbcConfiguration.getQueryTimeout() : 0;
try (Connection con = getConnection(datasourceRequest); Statement statement = getStatement(con, queryTimeout); ResultSet resultSet = statement.executeQuery(queryStr)) {
status.setVersion(String.valueOf(con.getMetaData().getDatabaseMajorVersion()));
} catch (Exception e) {
LogUtil.error("Datasource is invalid: " + datasourceRequest.getDatasource().getName(), e);
DataEaseException.throwException(e.getMessage());
}
status.setStatus("Success");
return status;
}
@Override
public String checkStatus(DatasourceRequest datasourceRequest) throws Exception {
String queryStr = getTablesSql(datasourceRequest);
@@ -377,7 +394,7 @@ public class JdbcProvider extends DefaultJdbcProvider {
try (Connection con = getConnection(datasourceRequest); Statement statement = getStatement(con, queryTimeout); ResultSet resultSet = statement.executeQuery(queryStr)) {
} catch (Exception e) {
LogUtil.error("Datasource is invalid: " + datasourceRequest.getDatasource().getName(), e);
io.dataease.plugins.common.exception.DataEaseException.throwException(e.getMessage());
DataEaseException.throwException(e.getMessage());
}
return "Success";
}

View File

@@ -1340,7 +1340,7 @@ public class DorisQueryProvider extends QueryProvider {
if (field.getDeType() == 1) {
String format = transDateFormat(request.getDateStyle(), request.getDatePattern());
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {
String date = String.format(MySQLConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MysqlConstants.DEFAULT_DATE_FORMAT);
if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) {
date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + date + ",'-01-01')", "%Y-01-01");
@@ -1351,6 +1351,16 @@ public class DorisQueryProvider extends QueryProvider {
whereName = String.format(MySQLConstants.DATE_FORMAT, date, format);
}
}
if (field.getDeExtractType() == 1) {
String date = String.format(MySQLConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MysqlConstants.DEFAULT_DATE_FORMAT);
if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) {
date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + date + ",'-01-01')", "%Y-01-01");
whereName = String.format(MySQLConstants.DATE_FORMAT, date, format);
}else {
whereName = originName;
}
}
if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) {
if (request.getOperator().equals("between")) {
whereName = originName;

View File

@@ -1300,7 +1300,7 @@ public class MysqlQueryProvider extends QueryProvider {
if (field.getDeType() == 1) {
String format = transDateFormat(request.getDateStyle(), request.getDatePattern());
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {
String date = String.format(MySQLConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MysqlConstants.DEFAULT_DATE_FORMAT);
if (request.getOperator().equals("between")) {
whereName = date;
@@ -1308,6 +1308,9 @@ public class MysqlQueryProvider extends QueryProvider {
whereName = String.format(MySQLConstants.DATE_FORMAT, date, format);
}
}
if (field.getDeExtractType() == 1) {
whereName = originName;
}
if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) {
if (request.getOperator().equals("between")) {
whereName = originName;

View File

@@ -1342,7 +1342,7 @@ public class EsQueryProvider extends QueryProvider {
whereName = String.format(EsSqlLConstants.DATETIME_FORMAT, cast, format);
}
if (field.getDeExtractType() == 1) {
whereName = String.format(EsSqlLConstants.DATETIME_FORMAT, originName, format);
whereName = originName;
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {

View File

@@ -1299,12 +1299,7 @@ public class HiveQueryProvider extends QueryProvider {
whereName = String.format(HiveConstants.FROM_UNIXTIME, cast, format);
}
if (field.getDeExtractType() == DeTypeConstants.DE_TIME) {
if (request.getOperator().equals("between")) {
whereName = originName;
} else {
whereName = String.format(HiveConstants.DATE_FORMAT, originName, format);
}
whereName = originName;
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {

View File

@@ -1314,11 +1314,7 @@ public class ImpalaQueryProvider extends QueryProvider {
}
}
if (field.getDeExtractType() == DeTypeConstants.DE_TIME) {
if (request.getOperator().equals("between")) {
whereName = originName;
} else {
whereName = String.format(ImpalaConstants.DATE_FORMAT, originName, format);
}
whereName = originName;
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {

View File

@@ -1330,7 +1330,7 @@ public class MysqlQueryProvider extends QueryProvider {
if (field.getDeType() == 1) {
String format = transDateFormat(request.getDateStyle(), request.getDatePattern());
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {
String date;
if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) {
date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + originName + ",'-01-01')", StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MySQLConstants.DEFAULT_DATE_FORMAT);
@@ -1350,6 +1350,21 @@ public class MysqlQueryProvider extends QueryProvider {
}
}
if (field.getDeExtractType() == 1) {
String date;
if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) {
date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + originName + ",'-01-01')", StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MySQLConstants.DEFAULT_DATE_FORMAT);
} else {
date = originName;
}
if (StringUtils.equalsIgnoreCase(request.getDateStyle(), "y_Q")) {
whereName = String.format(format,
String.format(MySQLConstants.DATE_FORMAT, originName, "%Y"),
String.format(MySQLConstants.QUARTER, String.format(MySQLConstants.DATE_FORMAT, originName, MySQLConstants.DEFAULT_DATE_FORMAT)));
} else {
whereName = date;
}
}
if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) {
if (request.getOperator().equals("between")) {
whereName = originName;

View File

@@ -1487,11 +1487,7 @@ public class OracleQueryProvider extends QueryProvider {
}
}
if (field.getDeExtractType() == 1) {
if (!request.getOperator().equals("between")) {
whereName = String.format(OracleConstants.TO_CHAR, originName, format);
} else {
whereName = originName;
}
whereName = originName;
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {

View File

@@ -1339,12 +1339,7 @@ public class PgQueryProvider extends QueryProvider {
}
}
if (field.getDeExtractType() == 1) {
if (request.getOperator().equals("between")) {
whereName = originName;
} else {
whereName = String.format(PgConstants.DATE_FORMAT, originName, format);
}
whereName = originName;
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {

View File

@@ -1325,11 +1325,7 @@ public class RedshiftQueryProvider extends QueryProvider {
}
}
if (field.getDeExtractType() == 1) {
if (request.getOperator().equals("between")) {
whereName = originName;
} else {
whereName = String.format(PgConstants.DATE_FORMAT, originName, format);
}
whereName = originName;
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {
if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {

View File

@@ -529,14 +529,21 @@ public class SqlserverQueryProvider extends QueryProvider {
return originTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, null, view, needOrder, true);
}
@Override
public String getSQLWithPage(boolean isTable, String sql, List<ChartViewFieldDTO> xAxis, FilterTreeObj fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) {
boolean isPage = (pageInfo.getGoPage() != null && pageInfo.getPageSize() != null);
String limit = (isPage ? " OFFSET " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + " ROW FETCH NEXT " + pageInfo.getPageSize() + " ROW ONLY " : "");
if (isTable) {
return originTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true, !isPage) + limit;
if (Integer.valueOf(ds.getVersion()) < 11) {
if (isTable) {
return getSQLTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view);
} else {
return getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view);
}
} else {
return originTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true, !isPage) + limit;
boolean isPage = (pageInfo.getGoPage() != null && pageInfo.getPageSize() != null);
String limit = (isPage ? " OFFSET " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + " ROW FETCH NEXT " + pageInfo.getPageSize() + " ROW ONLY " : "");
if (isTable) {
return originTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true, !isPage) + limit;
} else {
return originTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true, !isPage) + limit;
}
}
}

View File

@@ -639,8 +639,6 @@ public class ChartViewService {
}
Type tokenType = new TypeToken<List<ChartViewFieldDTO>>() {
}.getType();
// Type filterTokenType = new TypeToken<List<ChartFieldCustomFilterDTO>>() {
// }.getType();
List<ChartViewFieldDTO> viewFields = gson.fromJson(view.getViewFields(), tokenType);
final Map<String, List<ChartViewFieldDTO>> extFieldsMap = new LinkedHashMap<>();
@@ -709,7 +707,6 @@ public class ChartViewService {
//将没有权限的列删掉
List<String> dataeaseNames = columnPermissionFields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList());
dataeaseNames.add("*");
// fieldCustomFilter = fieldCustomFilter.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
extStack = extStack.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
extBubble = extBubble.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
drill = drill.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
@@ -717,9 +714,6 @@ public class ChartViewService {
//行权限
List<DataSetRowPermissionsTreeDTO> rowPermissionsTree = permissionsTreeService.getRowPermissionsTree(fields, table, chartExtRequest.getUser());
/*for (ChartFieldCustomFilterDTO ele : fieldCustomFilter) {
ele.setField(dataSetTableFieldsService.get(ele.getId()));
}*/
chartFilterTreeService.searchFieldAndSet(fieldCustomFilter);
if (CollectionUtils.isEmpty(xAxis) && CollectionUtils.isEmpty(yAxis)) {
@@ -1043,17 +1037,6 @@ public class ChartViewService {
assistFields = getAssistFields(dynamicAssistFields, yAxis, xAxis);
}
// 处理过滤条件中的单引号
/*fieldCustomFilter = fieldCustomFilter.stream().peek(ele -> {
if (CollectionUtils.isNotEmpty(ele.getEnumCheckField())) {
List<String> collect = ele.getEnumCheckField().stream().map(SQLUtils::transKeyword).collect(Collectors.toList());
ele.setEnumCheckField(collect);
}
if (CollectionUtils.isNotEmpty(ele.getFilter())) {
List<ChartCustomFilterItemDTO> collect = ele.getFilter().stream().peek(f -> f.setValue(SQLUtils.transKeyword(f.getValue()))).collect(Collectors.toList());
ele.setFilter(collect);
}
}).collect(Collectors.toList());*/
fieldCustomFilter = chartFilterTreeService.charReplace(fieldCustomFilter);
extFilterList = extFilterList.stream().peek(ele -> {

View File

@@ -42,6 +42,7 @@ import io.dataease.plugins.common.exception.DataEaseException;
import io.dataease.plugins.common.request.datasource.DatasourceRequest;
import io.dataease.plugins.common.util.SpringContextUtil;
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
import io.dataease.plugins.datasource.entity.Status;
import io.dataease.plugins.datasource.provider.Provider;
import io.dataease.provider.ProviderFactory;
import io.dataease.provider.datasource.ApiProvider;
@@ -52,6 +53,8 @@ import io.dataease.service.sys.SysAuthService;
import io.dataease.service.system.SystemParameterService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.zookeeper.data.Stat;
import org.mozilla.javascript.EcmaError;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.core.RedisTemplate;
@@ -115,7 +118,9 @@ public class DatasourceService {
datasource.setUpdateTime(currentTimeMillis);
datasource.setCreateTime(currentTimeMillis);
datasource.setCreateBy(String.valueOf(AuthUtils.getUser().getUsername()));
checkAndUpdateDatasourceStatus(datasource);
Status status = checkDatasourceStatus(datasource);
datasource.setStatus(status.getStatus());
datasource.setVersion(status.getVersion());
datasourceMapper.insertSelective(datasource);
handleConnectionPool(datasource, "add");
sysAuthService.copyAuth(datasource.getId(), SysAuthConstants.AUTH_SOURCE_TYPE_DATASOURCE);
@@ -277,7 +282,9 @@ public class DatasourceService {
public void updateDatasource(String id, Datasource datasource) {
DatasourceExample example = new DatasourceExample();
example.createCriteria().andIdEqualTo(id);
checkAndUpdateDatasourceStatus(datasource);
Status status = checkDatasourceStatus(datasource);
datasource.setStatus(status.getStatus());
datasource.setVersion(status.getVersion());
datasourceMapper.updateByExampleSelective(datasource, example);
handleConnectionPool(id);
@@ -327,15 +334,15 @@ public class DatasourceService {
datasourceProvider.checkConfiguration(datasource);
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(datasource);
String datasourceStatus = datasourceProvider.checkStatus(datasourceRequest);
Status datasourceStatus = datasourceProvider.checkDsStatus(datasourceRequest);
if (datasource.getType().equalsIgnoreCase("api")) {
int success = 0;
List<ApiDefinition> apiDefinitionList = new Gson().fromJson(datasource.getConfiguration(), new TypeToken<List<ApiDefinition>>() {
}.getType());
List<ApiDefinition> apiDefinitionListWithStatus = new ArrayList<>();
if (StringUtils.isNotEmpty(datasourceStatus)) {
JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus).getAsJsonObject();
if (StringUtils.isNotEmpty(datasourceStatus.getStatus())) {
JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus.getStatus()).getAsJsonObject();
for (ApiDefinition apiDefinition : apiDefinitionList) {
String status = apiItemStatuses.get(apiDefinition.getName()).getAsString();
apiDefinition.setStatus(status);
@@ -348,7 +355,7 @@ public class DatasourceService {
datasourceDTO.setApiConfiguration(apiDefinitionListWithStatus);
if (success == apiDefinitionList.size()) {
datasource.setStatus(datasourceStatus);
datasource.setStatus(datasourceStatus.getStatus());
return ResultHolder.success(datasourceDTO);
}
if (success > 0 && success < apiDefinitionList.size()) {
@@ -367,16 +374,16 @@ public class DatasourceService {
if (datasource == null) {
return ResultHolder.error("Can not find datasource: " + datasourceId);
}
String datasourceStatus = null;
Status datasourceStatus = new Status();
try {
Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(datasource);
datasourceStatus = datasourceProvider.checkStatus(datasourceRequest);
datasourceStatus = datasourceProvider.checkDsStatus(datasourceRequest);
if (datasource.getType().equalsIgnoreCase("api")) {
List<ApiDefinition> apiDefinitionList = new Gson().fromJson(datasource.getConfiguration(), new TypeToken<List<ApiDefinition>>() {
}.getType());
JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus).getAsJsonObject();
JsonObject apiItemStatuses = JsonParser.parseString(datasourceStatus.getStatus()).getAsJsonObject();
int success = 0;
for (ApiDefinition apiDefinition : apiDefinitionList) {
String status = apiItemStatuses.get(apiDefinition.getName()).getAsString();
@@ -386,7 +393,7 @@ public class DatasourceService {
}
}
if (success == apiDefinitionList.size()) {
datasource.setStatus(datasourceStatus);
datasource.setStatus(datasourceStatus.getStatus());
return ResultHolder.success(datasource);
}
if (success > 0 && success < apiDefinitionList.size()) {
@@ -398,14 +405,14 @@ public class DatasourceService {
return ResultHolder.success("Success");
} catch (Exception e) {
e.printStackTrace();
datasourceStatus = "Error";
datasourceStatus.setStatus("Error");
return ResultHolder.error(Translator.get("I18N_DS_INVALID") + ": " + e.getMessage());
} finally {
Datasource record = new Datasource();
record.setStatus(datasourceStatus);
record.setStatus(datasourceStatus.getStatus());
record.setVersion(datasourceStatus.getVersion());
DatasourceExample example = new DatasourceExample();
example.createCriteria().andIdEqualTo(datasource.getId());
System.out.println(new Gson().toJson(record));
datasourceMapper.updateByExampleSelective(record, example);
}
}
@@ -426,7 +433,7 @@ public class DatasourceService {
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(ds);
if (!ds.getType().equalsIgnoreCase(DatasetType.API.name())) {
datasourceProvider.checkStatus(datasourceRequest);
datasourceProvider.checkDsStatus(datasourceRequest);
}
List<TableDesc> tables = datasourceProvider.getTables(datasourceRequest);
@@ -458,6 +465,15 @@ public class DatasourceService {
List<Datasource> datasources = datasourceMapper.selectByExampleWithBLOBs(new DatasourceExample());
datasources.forEach(datasource -> {
commonThreadPool.addTask(() -> {
try {
DatasourceExample example = new DatasourceExample();
example.createCriteria().andIdEqualTo(datasource.getId());
Status status = checkDatasourceStatus(datasource);
Datasource record = new Datasource();
record.setVersion(status.getVersion());
record.setStatus(status.getStatus());
datasourceMapper.updateByExampleSelective(record, example);
}catch (Exception ignore){}
try {
handleConnectionPool(datasource, "add");
} catch (Exception e) {
@@ -515,16 +531,17 @@ public class DatasourceService {
return datasourceMapper.selectByExampleWithBLOBs(example);
}
public void checkAndUpdateDatasourceStatus(Datasource datasource) {
public Status checkDatasourceStatus(Datasource datasource) {
Status status = new Status();
try {
Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(datasource);
String status = datasourceProvider.checkStatus(datasourceRequest);
datasource.setStatus(status);
status = datasourceProvider.checkDsStatus(datasourceRequest);
} catch (Exception e) {
datasource.setStatus("Error");
status.setStatus("Error");
}
return status;
}
private void checkAndUpdateDatasourceStatus(Datasource datasource, Boolean withMsg) {
@@ -535,8 +552,9 @@ public class DatasourceService {
Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(datasource);
String status = datasourceProvider.checkStatus(datasourceRequest);
record.setStatus(status);
Status status = datasourceProvider.checkDsStatus(datasourceRequest);
datasource.setStatus(status.getStatus());
datasource.setVersion(status.getVersion());
datasourceMapper.updateByExampleSelective(record, example);
} catch (Exception e) {
Datasource temp = datasourceMapper.selectByPrimaryKey(datasource.getId());

View File

@@ -0,0 +1,3 @@
ALTER TABLE `datasource`
ADD COLUMN `version` varchar(255) NULL COMMENT '版本' AFTER `status`;

View File

@@ -368,7 +368,7 @@ export default {
this.showParams = true
this.isRangeParamWidget = this.widget.isRangeParamWidget && this.widget.isRangeParamWidget()
}
if ('textInputWidget,timeYearWidget,timeMonthWidget,timeDateWidget,textSelectWidget,numberSelectWidget'.indexOf(this.widget.name) !== -1) {
if ('textInputWidget,timeYearWidget,timeMonthWidget,timeDateWidget,textSelectWidget,numberSelectWidget,numberSelectGridWidget,textSelectGridWidget'.indexOf(this.widget.name) !== -1) {
this.showParams = true
}
},