From 66f8afcd220b0be7527ec0bf049ef436d37cfda1 Mon Sep 17 00:00:00 2001 From: junjun Date: Tue, 2 Jul 2024 14:47:30 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=8A=BD=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataset/manage/DatasetDataManage.java | 72 +++++++++++++------ 1 file changed, 52 insertions(+), 20 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 2c222fa503..a42abb6e7e 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 @@ -9,7 +9,6 @@ import io.dataease.api.dataset.union.DatasetGroupInfoDTO; import io.dataease.api.dataset.union.DatasetTableInfoDTO; import io.dataease.api.permissions.dataset.dto.DataSetRowPermissionsTreeDTO; import io.dataease.auth.bo.TokenUserBO; -import io.dataease.chart.manage.ChartViewManege; import io.dataease.chart.utils.ChartDataBuild; import io.dataease.commons.utils.SqlparserUtils; import io.dataease.dataset.constant.DatasetTableType; @@ -20,7 +19,6 @@ import io.dataease.dataset.utils.TableUtils; import io.dataease.datasource.dao.auto.entity.CoreDatasource; import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; import io.dataease.datasource.manage.EngineManage; -import io.dataease.datasource.provider.CalciteProvider; import io.dataease.datasource.utils.DatasourceUtils; import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.constant.SQLConstants; @@ -31,9 +29,10 @@ import io.dataease.engine.utils.SQLUtils; import io.dataease.engine.utils.Utils; import io.dataease.exception.DEException; import io.dataease.extensions.datasource.dto.*; +import io.dataease.extensions.datasource.factory.ProviderFactory; +import io.dataease.extensions.datasource.provider.Provider; import io.dataease.extensions.view.dto.ChartExtFilterDTO; import io.dataease.extensions.view.dto.ChartExtRequest; -import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; import io.dataease.extensions.view.dto.ColumnPermissionItem; import io.dataease.extensions.view.dto.SqlVariableDetails; import io.dataease.extensions.view.model.SQLMeta; @@ -63,8 +62,6 @@ public class DatasetDataManage { @Resource private DatasetSQLManage datasetSQLManage; @Resource - private CalciteProvider calciteProvider; - @Resource private CoreDatasourceMapper coreDatasourceMapper; @Resource private DatasetTableFieldManage datasetTableFieldManage; @@ -76,8 +73,6 @@ public class DatasetDataManage { private PermissionManage permissionManage; @Resource private DatasetTableSqlLogManage datasetTableSqlLogManage; - @Resource - private ChartViewManege chartViewManege; private static Logger logger = LoggerFactory.getLogger(DatasetDataManage.class); @@ -125,10 +120,9 @@ public class DatasetDataManage { // 获取数据源表的原始字段 if (StringUtils.equalsIgnoreCase(type, DatasetTableType.DB)) { datasourceRequest.setTable(tableInfoDTO.getTable()); - tableFields = calciteProvider.fetchTableField(datasourceRequest); - } else { - tableFields = calciteProvider.fetchTableField(datasourceRequest); } + Provider provider = ProviderFactory.getDefaultProvider(); + tableFields = provider.fetchTableField(datasourceRequest); } else { // excel,api CoreDatasource coreDatasource = engineManage.getDeEngine(); @@ -144,7 +138,8 @@ public class DatasetDataManage { sql = SqlUtils.transSqlDialect(sql, datasourceRequest.getDsList()); datasourceRequest.setQuery(sql); logger.info("calcite data table field sql: " + datasourceRequest.getQuery()); - tableFields = calciteProvider.fetchTableField(datasourceRequest); + Provider provider = ProviderFactory.getDefaultProvider(); + tableFields = provider.fetchTableField(datasourceRequest); } return transFields(tableFields, true); } @@ -227,7 +222,15 @@ public class DatasetDataManage { DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setQuery(querySQL); datasourceRequest.setDsList(dsMap); - Map data = calciteProvider.fetchResultField(datasourceRequest); + + Provider provider; + if (crossDs) { + provider = ProviderFactory.getDefaultProvider(); + } else { + provider = ProviderFactory.getProvider(dsList.getFirst()); + } + Map data = provider.fetchResultField(datasourceRequest); + Map map = new LinkedHashMap<>(); // 重新构造data Map previewData = buildPreviewData(data, fields, desensitizationList); @@ -255,11 +258,10 @@ public class DatasetDataManage { public Long getDatasetTotal(DatasetGroupInfoDTO datasetGroupInfoDTO, String s, ChartExtRequest request) throws Exception { Map sqlMap = datasetSQLManage.getUnionSQLForEdit(datasetGroupInfoDTO, request); Map dsMap = (Map) sqlMap.get("dsMap"); - + boolean crossDs = Utils.isCrossDs(dsMap); String sql; if (StringUtils.isEmpty(s)) { sql = (String) sqlMap.get("sql"); - boolean crossDs = Utils.isCrossDs(dsMap); if (!crossDs) { sql = Utils.replaceSchemaAlias(sql, dsMap); } @@ -274,7 +276,14 @@ public class DatasetDataManage { DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setQuery(querySQL); datasourceRequest.setDsList(dsMap); - Map data = calciteProvider.fetchResultField(datasourceRequest); + + Provider provider; + if (crossDs) { + provider = ProviderFactory.getDefaultProvider(); + } else { + provider = ProviderFactory.getProvider(dsMap.entrySet().iterator().next().getValue().getType()); + } + Map data = provider.fetchResultField(datasourceRequest); List dataList = (List) data.get("data"); if (ObjectUtils.isNotEmpty(dataList) && ObjectUtils.isNotEmpty(dataList.get(0)) && ObjectUtils.isNotEmpty(dataList.get(0)[0])) { return Long.valueOf(dataList.get(0)[0]); @@ -334,6 +343,7 @@ public class DatasetDataManage { // 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); @@ -342,8 +352,9 @@ public class DatasetDataManage { // replace placeholder sqlField = SqlUtils.replaceTablePlaceHolder(sqlField, originSql); datasourceRequest.setQuery(sqlField); + // 获取数据源表的原始字段 - List list = calciteProvider.fetchTableField(datasourceRequest); + List list = provider.fetchTableField(datasourceRequest); if (ObjectUtils.isEmpty(list)) { return null; } @@ -357,7 +368,7 @@ public class DatasetDataManage { logger.info("calcite data preview sql: " + sql); datasourceRequest.setQuery(sql); - Map data = calciteProvider.fetchResultField(datasourceRequest); + Map data = provider.fetchResultField(datasourceRequest); // 重新构造data List fList = (List) data.get("fields"); List fields = transFields(fList, false); @@ -487,7 +498,14 @@ public class DatasetDataManage { DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setQuery(querySQL); datasourceRequest.setDsList(dsMap); - Map data = calciteProvider.fetchResultField(datasourceRequest); + + Provider provider; + if (crossDs) { + provider = ProviderFactory.getDefaultProvider(); + } else { + provider = ProviderFactory.getProvider(dsList.getFirst()); + } + Map data = provider.fetchResultField(datasourceRequest); List dataList = (List) data.get("data"); dataList = dataList.stream().filter(row -> { boolean hasEmpty = false; @@ -712,7 +730,14 @@ public class DatasetDataManage { DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setQuery(querySQL); datasourceRequest.setDsList(dsMap); - Map data = calciteProvider.fetchResultField(datasourceRequest); + + Provider provider; + if (crossDs) { + provider = ProviderFactory.getDefaultProvider(); + } else { + provider = ProviderFactory.getProvider(dsList.getFirst()); + } + Map data = provider.fetchResultField(datasourceRequest); List dataList = (List) data.get("data"); dataList = dataList.stream().filter(row -> { boolean hasEmpty = false; @@ -829,7 +854,14 @@ public class DatasetDataManage { DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setQuery(querySQL); datasourceRequest.setDsList(dsMap); - Map data = calciteProvider.fetchResultField(datasourceRequest); + + Provider provider; + if (crossDs) { + provider = ProviderFactory.getDefaultProvider(); + } else { + provider = ProviderFactory.getProvider(dsList.getFirst()); + } + Map data = provider.fetchResultField(datasourceRequest); List rows = (List) data.get("data"); // 重新构造data