From b4c4dbe53fa3691e0e457b671c983d2646566cad Mon Sep 17 00:00:00 2001 From: junjun Date: Thu, 25 Jul 2024 16:50:56 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/utils/SqlparserUtils.java | 29 +++++++++++++++---- .../dataset/manage/DatasetDataManage.java | 8 +++-- .../dataset/manage/DatasetSQLManage.java | 2 +- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java b/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java index 6681db9fe2..44b7965d77 100644 --- a/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java +++ b/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java @@ -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 parameters, boolean isCross, Map dsMap) { + public static String handleVariableDefaultValue(String sql, String sqlVariableDetails, boolean isEdit, boolean isFromDataSet, List parameters, boolean isCross, Map 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 next = dsMap.entrySet().iterator().next(); DatasourceSchemaDTO value = next.getValue(); - DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(value.getType()); - String prefix = datasourceType.getPrefix(); - String suffix = datasourceType.getSuffix(); + + 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()); + prefix = datasourceType.getPrefix(); + suffix = datasourceType.getSuffix(); + } else { + if (pluginManage != null) { + List xpackPluginsDatasourceVOS = pluginManage.queryPluginDs(); + List 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); diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java index 0c7157d716..c61815b5d6 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java @@ -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; diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java index 873f2000c7..9feac047cd 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java @@ -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);