From 79e28c86cdf7382563943d027b423bc6592ab5bd Mon Sep 17 00:00:00 2001 From: junjun Date: Thu, 22 Aug 2024 09:54:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E9=9B=86):=20SQL?= =?UTF-8?q?=E7=89=87=E6=AE=B5=E6=94=AF=E6=8C=81=E6=B3=A8=E9=87=8A=20#11546?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/dataset/manage/DatasetDataManage.java | 10 +++++++--- .../io/dataease/dataset/manage/DatasetSQLManage.java | 6 +++++- .../extensions/datasource/provider/Provider.java | 5 +++++ 3 files changed, 17 insertions(+), 4 deletions(-) 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 bb09b35534..3715efd527 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 @@ -112,7 +112,8 @@ 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(), pluginManage); + String originSql = provider.replaceComment(new String(Base64.getDecoder().decode(tableInfoDTO.getSql()))); + originSql = SqlparserUtils.handleVariableDefaultValue(originSql, datasetTableDTO.getSqlVariableDetails(), false, false, null, false, datasourceRequest.getDsList(), pluginManage); // add sql table schema sql = SQLUtils.buildOriginPreviewSql(SqlPlaceholderConstants.TABLE_PLACEHOLDER, 0, 0); @@ -344,13 +345,16 @@ public class DatasetDataManage { dsMap.put(datasourceSchemaDTO.getId(), datasourceSchemaDTO); DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDsList(dsMap); + Provider provider = ProviderFactory.getProvider(datasourceSchemaDTO.getType()); // 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, pluginManage); + + String originSql = provider.replaceComment(new String(Base64.getDecoder().decode(dto.getSql()))); + originSql = SqlparserUtils.handleVariableDefaultValue(datasetSQLManage.subPrefixSuffixChar(originSql), dto.getSqlVariableDetails(), true, true, null, false, dsMap, pluginManage); // sql 作为临时表,外层加上limit String sql; - Provider provider = ProviderFactory.getProvider(datasourceSchemaDTO.getType()); + if (Utils.isNeedOrder(List.of(datasourceSchemaDTO.getType()))) { // 先根据sql获取表字段 String sqlField = SQLUtils.buildOriginPreviewSql(SqlPlaceholderConstants.TABLE_PLACEHOLDER, 0, 0); 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 62069e2157..90d9d3ba1f 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 @@ -19,7 +19,9 @@ import io.dataease.extensions.datasource.dto.DatasetTableDTO; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO; import io.dataease.extensions.datasource.dto.DsTypeDTO; +import io.dataease.extensions.datasource.factory.ProviderFactory; import io.dataease.extensions.datasource.model.SQLObj; +import io.dataease.extensions.datasource.provider.Provider; import io.dataease.extensions.datasource.vo.DatasourceConfiguration; import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO; import io.dataease.extensions.view.dto.ChartExtFilterDTO; @@ -430,8 +432,10 @@ public class DatasetSQLManage { if (StringUtils.equalsIgnoreCase(currentDs.getType(), DatasetTableTypeConstants.DATASET_TABLE_DB)) { tableObj = SQLObj.builder().tableSchema(tableSchema).tableName(infoDTO.getTable()).tableAlias(tableAlias).build(); } else if (StringUtils.equalsIgnoreCase(currentDs.getType(), DatasetTableTypeConstants.DATASET_TABLE_SQL)) { + Provider provider = ProviderFactory.getProvider(dsMap.entrySet().iterator().next().getValue().getType()); // 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, pluginManage); + String sql = provider.replaceComment(new String(Base64.getDecoder().decode(infoDTO.getSql()))); + sql = SqlparserUtils.handleVariableDefaultValue(sql, currentDs.getSqlVariableDetails(), false, isFromDataSet, parameters, isCross, dsMap, pluginManage); // add table schema if (isCross) { sql = SqlUtils.addSchema(sql, tableSchema); diff --git a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/provider/Provider.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/provider/Provider.java index 39f168150a..7319454e57 100644 --- a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/provider/Provider.java +++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/provider/Provider.java @@ -180,6 +180,11 @@ public abstract class Provider { return s; } + public String replaceComment(String s) { + String regex = "/\\*[\\s\\S]*?\\*/|-- .*"; + return s.replaceAll(regex, " "); + } + public SqlDialect getDialect(DatasourceSchemaDTO coreDatasource) { SqlDialect sqlDialect = null; DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(coreDatasource.getType());