From 205f8acad2caf87cfa70e907b975ac64d5427fc2 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Tue, 24 Oct 2023 16:27:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20doris=E6=95=B0=E5=AD=97=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E7=BB=84=E4=BB=B6=E6=8E=92=E5=BA=8F=E6=97=A0=E6=95=88?= =?UTF-8?q?#6277?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/doris/DorisQueryProvider.java | 62 +++++++++++++++---- 1 file changed, 49 insertions(+), 13 deletions(-) diff --git a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java index 25a98a15d5..720b2167b8 100644 --- a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java @@ -102,6 +102,18 @@ public class DorisQueryProvider extends QueryProvider { .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); + int originSize = fields.size(); + List fieldList = fields.stream().map(DatasetTableField::getId).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(sortFields)) { + sortFields.forEach(item -> { + int indexOf = fieldList.indexOf(item.getId()); + if (indexOf == -1) { + fields.add(item); + } else { + fields.set(indexOf, item); + } + }); + } List xOrders = new ArrayList<>(); if (CollectionUtils.isNotEmpty(fields)) { for (int i = 0; i < fields.size(); i++) { @@ -113,7 +125,15 @@ public class DorisQueryProvider extends QueryProvider { } else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) { originField = String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getDataeaseName()); } else { - originField = String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getDataeaseName()); + if (f.getDeType() == 2 || f.getDeType() == 3) { + if (f.getDeExtractType() == 1) { + originField = String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getDataeaseName()); + } else { + originField = String.format(DorisConstants.CAST, String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getDataeaseName()), DorisConstants.DEFAULT_FLOAT_FORMAT); + } + } else { + originField = String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getDataeaseName()); + } } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); String fieldName = ""; @@ -151,6 +171,14 @@ public class DorisQueryProvider extends QueryProvider { .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); + if (f instanceof DeSortField) { + DeSortField x = (DeSortField) f; + xOrders.add(SQLObj.builder() + .orderField(originField) + .orderAlias(fieldAlias) + .orderDirection(x.getOrderDirection()) + .build()); + } } } @@ -170,19 +198,27 @@ public class DorisQueryProvider extends QueryProvider { if (whereTrees != null) wheres.add(whereTrees); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); - if (CollectionUtils.isNotEmpty(sortFields)) { - int step = fields.size(); - for (int i = step; i < (step + sortFields.size()); i++) { - DeSortField deSortField = sortFields.get(i - step); - SQLObj order = buildSortField(deSortField, tableObj, i); - xOrders.add(order); - } - } - if (ObjectUtils.isNotEmpty(xOrders)) { - st_sql.add("orders", xOrders); - } + String sql = st_sql.render(); + ST st = stg.getInstanceOf("previewSql"); + st.add("isGroup", false); + SQLObj tableSQL = SQLObj.builder() + .tableName(String.format(DorisConstants.BRACKETS, sql)) + .tableAlias(String.format(TABLE_ALIAS_PREFIX, 1)) + .build(); + st.add("table", tableSQL); - return st_sql.render(); + List outFieldList = new ArrayList<>(); + for (int i = 0; i < originSize; i++) { + SQLObj fieldObj = xFields.get(i); + String outFieldAlias = tableSQL.getTableAlias() + "." + fieldObj.getFieldAlias(); + outFieldList.add(SQLObj.builder().fieldName(outFieldAlias).fieldAlias(fieldObj.getFieldAlias()).build()); + } + st.add("groups", outFieldList); + if (CollectionUtils.isNotEmpty(xOrders)) { + st.add("orders", xOrders); + return st.render() + " LIMIT 0, 10000000"; + } + return st.render(); } private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int i) {