From 63b0adea19775d77829141d543b394461708d3a7 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Tue, 31 Dec 2024 15:36:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E3=80=90=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=E3=80=91=E5=B8=A6=E7=B3=BB=E7=BB=9F=E5=8F=98=E9=87=8F=E7=9A=84?= =?UTF-8?q?SQL=E8=8A=82=E7=82=B9=EF=BC=8C=E4=BF=9D=E5=AD=98=E6=97=B6?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E6=88=90=E5=8A=9F=EF=BC=8C=E4=BD=86=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E7=AA=97=E5=8F=A3=E6=8F=90=E7=A4=BA=E6=9C=AA=E4=BF=9D?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/commons/utils/SqlparserUtils.java | 15 +++++++++++---- .../views/visualized/data/dataset/form/AddSql.vue | 10 ++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java b/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java index a0d422976b..be315c978c 100644 --- a/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java +++ b/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java @@ -45,9 +45,9 @@ public class SqlparserUtils { private static final String SubstitutedParams = "DATAEASE_PATAMS_BI"; private static final String SysParamsSubstitutedParams = "DeSysParams_"; private static final String SubstitutedSql = " 'DE-BI' = 'DE-BI' "; - private ExpressionDeParser expressionDeParser; private boolean removeSysParams; private UserFormVO userEntity; + private final List> sysParams = new ArrayList<>(); public String handleVariableDefaultValue(String sql, String sqlVariableDetails, boolean isEdit, boolean isFromDataSet, List parameters, boolean isCross, Map dsMap, PluginManageApi pluginManage, UserFormVO userEntity) { if (StringUtils.isEmpty(sql)) { @@ -105,7 +105,7 @@ public class SqlparserUtils { try { DatasourceSchemaDTO ds = dsMap.entrySet().iterator().next().getValue(); this.removeSysParams = false; - sql = removeVariables(sql, "mysql"); + sql = removeVariables(sql, ds.getType()); // replace keyword '`' if (!isCross) { Map.Entry next = dsMap.entrySet().iterator().next(); @@ -140,7 +140,7 @@ public class SqlparserUtils { } } this.removeSysParams = true; - sql = removeVariables(sql, "mysql"); + sql = removeVariables(sql, ds.getType()); } catch (Exception e) { e.printStackTrace(); } @@ -158,6 +158,9 @@ public class SqlparserUtils { tmpSql = tmpSql.replace(matcher.group(), SubstitutedParams); } if (removeSysParams) { + for (Map sysParam : sysParams) { + tmpSql = tmpSql.replaceAll(sysParam.get("replace"), sysParam.get("origin")); + } pattern = Pattern.compile(regex2); matcher = pattern.matcher(tmpSql); while (matcher.find()) { @@ -167,9 +170,14 @@ public class SqlparserUtils { } else { pattern = Pattern.compile(regex2); matcher = pattern.matcher(tmpSql); + sysParams.clear(); while (matcher.find()) { hasVariables = true; tmpSql = tmpSql.replace(matcher.group(), SysParamsSubstitutedParams + matcher.group().substring(1, matcher.group().length() - 1)); + Map sysParam = new HashMap<>(); + sysParam.put("origin", matcher.group()); + sysParam.put("replace", SysParamsSubstitutedParams + matcher.group().substring(1, matcher.group().length() - 1)); + sysParams.add(sysParam); } } Statement statement = CCJSqlParserUtil.parse(tmpSql); @@ -560,7 +568,6 @@ public class SqlparserUtils { } } }; - this.expressionDeParser = expressionDeParser; return expressionDeParser; } diff --git a/core/core-frontend/src/views/visualized/data/dataset/form/AddSql.vue b/core/core-frontend/src/views/visualized/data/dataset/form/AddSql.vue index 44bd2ea6f8..ed765ef81f 100644 --- a/core/core-frontend/src/views/visualized/data/dataset/form/AddSql.vue +++ b/core/core-frontend/src/views/visualized/data/dataset/form/AddSql.vue @@ -315,7 +315,7 @@ watch( () => { state.variables = sqlNode.value.variables if (codeCom.value) { - insertParamToCodeMirror(Base64.decode(sqlNode.value.sql)) + insertParamToCodeMirror(setNameIdTrans('id', 'name', Base64.decode(sqlNode.value.sql))) } }, { @@ -347,8 +347,7 @@ const save = (cb?: () => void) => { } parseVariable() - sql = codeCom.value.state.doc.toString() - sql = setNameIdTrans('name', 'id', sql) + sql = setNameIdTrans('name', 'id', codeCom.value.state.doc.toString()) sqlNode.value.changeFlag = true if (!sql.trim()) { ElMessage.error(t('data_set.cannot_be_empty_de')) @@ -373,14 +372,13 @@ const close = () => { state.plxTableData = [] state.fields = [] if (codeCom.value) { - insertParamToCodeMirror(Base64.decode(sqlNode.value.sql)) + insertParamToCodeMirror(setNameIdTrans('id', 'name', Base64.decode(sqlNode.value.sql))) } emits('close') } const handleClose = () => { - let sqlNew = codeCom.value.state.doc.toString() - sqlNew = setNameIdTrans('name', 'id', sqlNew) + let sqlNew = setNameIdTrans('name', 'id', codeCom.value.state.doc.toString()) if (changeFlag || sql !== sqlNew || !sqlNew.trim()) { ElMessageBox.confirm(t('chart.tips'), { confirmButtonType: 'primary',