mirror of
https://github.com/dataease/dataease.git
synced 2025-02-24 19:42:56 +08:00
refactor: 数据源插件完善
This commit is contained in:
parent
48e3fe9da1
commit
b4c4dbe53f
@ -1,10 +1,12 @@
|
||||
package io.dataease.commons.utils;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import io.dataease.exception.DEException;
|
||||
import io.dataease.extensions.datasource.api.PluginManageApi;
|
||||
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
|
||||
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
|
||||
import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO;
|
||||
import io.dataease.extensions.view.dto.SqlVariableDetails;
|
||||
import io.dataease.exception.DEException;
|
||||
import io.dataease.i18n.Translator;
|
||||
import io.dataease.utils.JsonUtil;
|
||||
import net.sf.jsqlparser.expression.*;
|
||||
@ -484,7 +486,7 @@ public class SqlparserUtils {
|
||||
};
|
||||
}
|
||||
|
||||
public static String handleVariableDefaultValue(String sql, String sqlVariableDetails, boolean isEdit, boolean isFromDataSet, List<SqlVariableDetails> parameters, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap) {
|
||||
public static String handleVariableDefaultValue(String sql, String sqlVariableDetails, boolean isEdit, boolean isFromDataSet, List<SqlVariableDetails> parameters, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap, PluginManageApi pluginManage) {
|
||||
if (StringUtils.isEmpty(sql)) {
|
||||
DEException.throwException(Translator.get("i18n_sql_not_empty"));
|
||||
}
|
||||
@ -538,9 +540,26 @@ public class SqlparserUtils {
|
||||
if (!isCross) {
|
||||
Map.Entry<Long, DatasourceSchemaDTO> next = dsMap.entrySet().iterator().next();
|
||||
DatasourceSchemaDTO value = next.getValue();
|
||||
|
||||
String prefix = "";
|
||||
String suffix = "";
|
||||
if (Arrays.stream(DatasourceConfiguration.DatasourceType.values()).map(DatasourceConfiguration.DatasourceType::getType).toList().contains(value.getType())) {
|
||||
DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(value.getType());
|
||||
String prefix = datasourceType.getPrefix();
|
||||
String suffix = datasourceType.getSuffix();
|
||||
prefix = datasourceType.getPrefix();
|
||||
suffix = datasourceType.getSuffix();
|
||||
} else {
|
||||
if (pluginManage != null) {
|
||||
List<XpackPluginsDatasourceVO> xpackPluginsDatasourceVOS = pluginManage.queryPluginDs();
|
||||
List<XpackPluginsDatasourceVO> list = xpackPluginsDatasourceVOS.stream().filter(ele -> StringUtils.equals(ele.getType(), value.getType())).toList();
|
||||
if (ObjectUtils.isNotEmpty(list)) {
|
||||
XpackPluginsDatasourceVO first = list.getFirst();
|
||||
prefix = first.getPrefix();
|
||||
suffix = first.getSuffix();
|
||||
} else {
|
||||
DEException.throwException("当前数据源插件不存在");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Pattern pattern = Pattern.compile("(`.*?`)");
|
||||
Matcher matcher = pattern.matcher(sql);
|
||||
|
@ -23,6 +23,7 @@ import io.dataease.engine.trans.*;
|
||||
import io.dataease.engine.utils.SQLUtils;
|
||||
import io.dataease.engine.utils.Utils;
|
||||
import io.dataease.exception.DEException;
|
||||
import io.dataease.extensions.datasource.api.PluginManageApi;
|
||||
import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
|
||||
import io.dataease.extensions.datasource.dto.*;
|
||||
import io.dataease.extensions.datasource.factory.ProviderFactory;
|
||||
@ -42,6 +43,7 @@ import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
@ -69,6 +71,8 @@ public class DatasetDataManage {
|
||||
private PermissionManage permissionManage;
|
||||
@Resource
|
||||
private DatasetTableSqlLogManage datasetTableSqlLogManage;
|
||||
@Autowired(required = false)
|
||||
private PluginManageApi pluginManage;
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(DatasetDataManage.class);
|
||||
|
||||
@ -103,7 +107,7 @@ public class DatasetDataManage {
|
||||
sql = provider.transSqlDialect(sql, datasourceRequest.getDsList());
|
||||
} else {
|
||||
// parser sql params and replace default value
|
||||
String originSql = SqlparserUtils.handleVariableDefaultValue(new String(Base64.getDecoder().decode(tableInfoDTO.getSql())), datasetTableDTO.getSqlVariableDetails(), false, false, null, false, datasourceRequest.getDsList());
|
||||
String originSql = SqlparserUtils.handleVariableDefaultValue(new String(Base64.getDecoder().decode(tableInfoDTO.getSql())), datasetTableDTO.getSqlVariableDetails(), false, false, null, false, datasourceRequest.getDsList(), pluginManage);
|
||||
// add sql table schema
|
||||
|
||||
sql = SQLUtils.buildOriginPreviewSql(SqlPlaceholderConstants.TABLE_PLACEHOLDER, 0, 0);
|
||||
@ -337,7 +341,7 @@ public class DatasetDataManage {
|
||||
datasourceRequest.setDsList(dsMap);
|
||||
|
||||
// parser sql params and replace default value
|
||||
String originSql = SqlparserUtils.handleVariableDefaultValue(datasetSQLManage.subPrefixSuffixChar(new String(Base64.getDecoder().decode(dto.getSql()))), dto.getSqlVariableDetails(), true, true, null, false, dsMap);
|
||||
String originSql = SqlparserUtils.handleVariableDefaultValue(datasetSQLManage.subPrefixSuffixChar(new String(Base64.getDecoder().decode(dto.getSql()))), dto.getSqlVariableDetails(), true, true, null, false, dsMap, pluginManage);
|
||||
|
||||
// sql 作为临时表,外层加上limit
|
||||
String sql;
|
||||
|
@ -430,7 +430,7 @@ public class DatasetSQLManage {
|
||||
tableObj = SQLObj.builder().tableSchema(tableSchema).tableName(infoDTO.getTable()).tableAlias(tableAlias).build();
|
||||
} else if (StringUtils.equalsIgnoreCase(currentDs.getType(), DatasetTableTypeConstants.DATASET_TABLE_SQL)) {
|
||||
// parser sql params and replace default value
|
||||
String sql = SqlparserUtils.handleVariableDefaultValue(new String(Base64.getDecoder().decode(infoDTO.getSql())), currentDs.getSqlVariableDetails(), false, isFromDataSet, parameters, isCross, dsMap);
|
||||
String sql = SqlparserUtils.handleVariableDefaultValue(new String(Base64.getDecoder().decode(infoDTO.getSql())), currentDs.getSqlVariableDetails(), false, isFromDataSet, parameters, isCross, dsMap, pluginManage);
|
||||
// add table schema
|
||||
if (isCross) {
|
||||
sql = SqlUtils.addSchema(sql, tableSchema);
|
||||
|
Loading…
Reference in New Issue
Block a user