From ee554b59b363cd1cb54fdadb9d207b0d1fbb493a Mon Sep 17 00:00:00 2001 From: junjun Date: Fri, 15 Nov 2024 17:15:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=95=B0=E6=8D=AE=E9=9B=86):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E8=AE=A1=E7=AE=97=E5=AD=97=E6=AE=B5=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E5=87=BA=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/engine/trans/Order2SQLObj.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java index d6678af228..cdee20be25 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java @@ -6,6 +6,7 @@ import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.constant.SQLConstants; import io.dataease.engine.utils.Utils; import io.dataease.extensions.datasource.api.PluginManageApi; +import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants; import io.dataease.extensions.datasource.dto.CalParam; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO; @@ -14,10 +15,7 @@ import io.dataease.extensions.datasource.model.SQLObj; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; /** * @Author Junjun @@ -50,10 +48,17 @@ public class Order2SQLObj { Map.Entry next = dsMap.entrySet().iterator().next(); dsType = next.getValue().getType(); } + Map fieldsDialect = new HashMap<>(); if (ObjectUtils.isNotEmpty(f.getExtField()) && Objects.equals(f.getExtField(), ExtFieldConstant.EXT_CALC)) { // 解析origin name中有关联的字段生成sql表达式 - originField = Utils.calcFieldRegex(f.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap, pluginManage); + String calcFieldExp = Utils.calcFieldRegex(f.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap, pluginManage); + // 给计算字段处加一个占位符,后续SQL方言转换后再替换 + originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, f.getId()); + fieldsDialect.put(originField, calcFieldExp); + if (isCross) { + originField = calcFieldExp; + } } else if (ObjectUtils.isNotEmpty(f.getExtField()) && Objects.equals(f.getExtField(), ExtFieldConstant.EXT_COPY)) { if (StringUtils.equalsIgnoreCase(dsType, "es")) { originField = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), f.getOriginName());