From 62775ac2f62128db852bea4a8b3e0351e8d5d051 Mon Sep 17 00:00:00 2001 From: junjie Date: Wed, 28 Jul 2021 19:47:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=BA=95=E5=B1=82sql=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../provider/doris/DorisQueryProvider.java | 3 ++- .../provider/mysql/MysqlQueryProvider.java | 3 ++- .../provider/oracle/OracleQueryProvider.java | 3 ++- .../dataset/impl/direct/DirectFieldService.java | 14 +++++++++----- backend/src/main/resources/sql/sqlTemplate.stg | 4 ++-- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java index bb75faece5..63a3dfb180 100644 --- a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java @@ -130,7 +130,8 @@ public class DorisQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("querySql"); - if (isGroup && CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); + st_sql.add("isGroup", isGroup); + if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); if ((fields.size() > 0)) { xOrders.add(SQLObj.builder() diff --git a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java index f6a630dade..e069706248 100644 --- a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java @@ -128,7 +128,8 @@ public class MysqlQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("querySql"); - if (isGroup && CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); + st_sql.add("isGroup", isGroup); + if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); return st_sql.render(); } diff --git a/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java b/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java index 40c6ef35a3..71556e43fe 100644 --- a/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java @@ -101,7 +101,8 @@ public class OracleQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("querySql"); - if (isGroup && CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); + st_sql.add("isGroup", isGroup); + if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); return st_sql.render(); } diff --git a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java index f5a063f330..3694d17c1a 100644 --- a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java +++ b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java @@ -9,11 +9,13 @@ import io.dataease.datasource.provider.DatasourceProvider; import io.dataease.datasource.provider.ProviderFactory; import io.dataease.datasource.request.DatasourceRequest; import io.dataease.datasource.service.DatasourceService; +import io.dataease.dto.dataset.DataSetTableUnionDTO; import io.dataease.dto.dataset.DataTableInfoDTO; import io.dataease.provider.QueryProvider; import io.dataease.service.dataset.DataSetFieldService; import io.dataease.service.dataset.DataSetTableFieldsService; import io.dataease.service.dataset.DataSetTableService; +import io.dataease.service.dataset.DataSetTableUnionService; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -28,17 +30,14 @@ import java.util.stream.Collectors; @Service("directDataSetFieldService") public class DirectFieldService implements DataSetFieldService { - - @Resource private DataSetTableFieldsService dataSetTableFieldsService; - @Resource private DataSetTableService dataSetTableService; - - @Resource private DatasourceService datasourceService; + @Resource + private DataSetTableUnionService dataSetTableUnionService; @Override public List fieldValues(String fieldId) { @@ -71,6 +70,11 @@ public class DirectFieldService implements DataSetFieldService { datasourceRequest.setQuery(qp.createQuerySQL(dataTableInfoDTO.getTable(), Collections.singletonList(field), true)); } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql")) { datasourceRequest.setQuery(qp.createQuerySQLAsTmp(dataTableInfoDTO.getSql(), Collections.singletonList(field), true)); + } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "custom")) { + DataTableInfoDTO dt = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class); + List listUnion = dataSetTableUnionService.listByTableId(dt.getList().get(0).getTableId()); + String sql = dataSetTableService.getCustomSQLDatasource(dt, listUnion, ds); + datasourceRequest.setQuery(qp.createQuerySQLAsTmp(sql, Collections.singletonList(field), true)); } } else if (datasetTable.getMode() == 1) {// 抽取 // 连接doris,构建doris数据源查询 diff --git a/backend/src/main/resources/sql/sqlTemplate.stg b/backend/src/main/resources/sql/sqlTemplate.stg index 5b2bd4c82e..30965e3589 100644 --- a/backend/src/main/resources/sql/sqlTemplate.stg +++ b/backend/src/main/resources/sql/sqlTemplate.stg @@ -1,4 +1,4 @@ -querySql(groups, aggregators, filters, orders, table) +querySql(groups, aggregators, filters, orders, table, isGroup) ::=<< SELECT @@ -17,7 +17,7 @@ FROM WHERE }; separator="\nAND "> - + GROUP BY }; separator=",\n">