From 2938c229ad0089605f0ca1b700023436ff7df3bd Mon Sep 17 00:00:00 2001 From: junjie Date: Tue, 11 May 2021 11:46:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E9=9B=86):sql=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/dataset/DataSetTableService.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index c5d0ecb3b5..21aba0ee9e 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -328,9 +328,10 @@ public class DataSetTableService { String sql = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class).getSql(); // 使用输入的sql先预执行一次 datasourceRequest.setQuery(sql); - datasourceProvider.fetchResultAndField(datasourceRequest); + Map stringListMap = datasourceProvider.fetchResultAndField(datasourceRequest); + List previewFields = stringListMap.get("fieldList"); // 正式执行 - datasourceRequest.setQuery("SELECT * FROM (" + sql + ") AS tmp LIMIT 0,1000"); + datasourceRequest.setQuery("SELECT * FROM (" + sql + ") AS tmp ORDER BY " + previewFields.get(0).getFieldName() + " LIMIT 0,1000"); Map result = datasourceProvider.fetchResultAndField(datasourceRequest); List data = result.get("dataList"); List fields = result.get("fieldList"); @@ -363,8 +364,12 @@ public class DataSetTableService { DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class); List list = dataSetTableUnionService.listByTableId(dataTableInfoDTO.getList().get(0).getTableId()); + // 使用输入的sql先预执行一次 + datasourceRequest.setQuery(getCustomSQL(dataTableInfoDTO, list)); + Map stringListMap = jdbcProvider.fetchResultAndField(datasourceRequest); + List previewFields = stringListMap.get("fieldList"); - datasourceRequest.setQuery("SELECT * FROM (" + getCustomSQL(dataTableInfoDTO, list) + ") AS tmp LIMIT 0,1000"); + datasourceRequest.setQuery("SELECT * FROM (" + getCustomSQL(dataTableInfoDTO, list) + ") AS tmp ORDER BY " + previewFields.get(0).getFieldName() + " LIMIT 0,1000"); Map result = jdbcProvider.fetchResultAndField(datasourceRequest); List data = result.get("dataList"); List fields = result.get("fieldList"); @@ -553,11 +558,11 @@ public class DataSetTableService { DatasourceTypes datasourceType = DatasourceTypes.valueOf(type); switch (datasourceType) { case mysql: - return MessageFormat.format("SELECT {0} FROM {1}", StringUtils.join(fields, ","), table); + return MessageFormat.format("SELECT {0} FROM {1} ORDER BY " + fields[0], StringUtils.join(fields, ","), table); case sqlServer: - return MessageFormat.format("SELECT {0} FROM {1}", StringUtils.join(fields, ","), table); + return MessageFormat.format("SELECT {0} FROM {1} ORDER BY " + fields[0], StringUtils.join(fields, ","), table); default: - return MessageFormat.format("SELECT {0} FROM {1}", StringUtils.join(fields, ","), table); + return MessageFormat.format("SELECT {0} FROM {1} ORDER BY " + fields[0], StringUtils.join(fields, ","), table); } }