From 8bd6bdcca4722bdf4b5a718e9f7584574f928a9c Mon Sep 17 00:00:00 2001 From: tjlygdx Date: Tue, 16 Jun 2026 14:32:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E3=80=90=E6=BC=8F=E6=B4=9E=E3=80=91?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8B=92=E7=BB=9D=E6=9C=8D=E5=8A=A1(?= =?UTF-8?q?=E6=AD=A3=E5=88=99=E8=A1=A8=E8=BE=BE=E5=BC=8F=E9=97=AE=E9=A2=98?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/utils/DeSqlparserUtils.java | 20 ++++++++++++------- .../commons/utils/SqlparserUtils.java | 20 ++++++++++++------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/commons/utils/DeSqlparserUtils.java b/core/core-backend/src/main/java/io/dataease/commons/utils/DeSqlparserUtils.java index 3006a5e530..9f70cb04f8 100644 --- a/core/core-backend/src/main/java/io/dataease/commons/utils/DeSqlparserUtils.java +++ b/core/core-backend/src/main/java/io/dataease/commons/utils/DeSqlparserUtils.java @@ -196,13 +196,7 @@ public class DeSqlparserUtils { } } - Pattern patternCross = Pattern.compile("(`.*?`)"); - Matcher matcherCross = patternCross.matcher(sql); - while (matcherCross.find()) { - String group = matcherCross.group(); - String info = group.substring(1, group.length() - 1); - sql = sql.replaceAll(group, prefix + info + suffix); - } + sql = replaceQuotedIdentifiers(sql, prefix, suffix); } } catch (Exception e) { e.printStackTrace(); @@ -498,6 +492,18 @@ public class DeSqlparserUtils { private record LiteralSegment(boolean variable, String content) { } + private String replaceQuotedIdentifiers(String sql, String prefix, String suffix) { + Matcher matcher = Pattern.compile("(`.*?`)").matcher(sql); + StringBuilder builder = new StringBuilder(); + while (matcher.find()) { + String group = matcher.group(); + String info = group.substring(1, group.length() - 1); + matcher.appendReplacement(builder, Matcher.quoteReplacement(prefix + info + suffix)); + } + matcher.appendTail(builder); + return builder.toString(); + } + private PreparedSqlFragment buildPreparedSysSqlFragment(String sysVariableId, boolean inOperator) { SysVariableBinding sysVariableBinding = resolveSysVariableBinding(sysVariableId, inOperator); if (sysVariableBinding == null || CollectionUtils.isEmpty(sysVariableBinding.values())) { 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 2b8bde846c..d8f46b3070 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 @@ -157,13 +157,7 @@ public class SqlparserUtils { } } - Pattern pattern = Pattern.compile("(`.*?`)"); - Matcher matcher = pattern.matcher(sql); - while (matcher.find()) { - String group = matcher.group(); - String info = group.substring(1, group.length() - 1); - sql = sql.replaceAll(group, prefix + info + suffix); - } + sql = replaceQuotedIdentifiers(sql, prefix, suffix); } this.removeSysParams = true; sql = removeVariables(sql, ds.getType()); @@ -982,6 +976,18 @@ public class SqlparserUtils { private record LiteralSegment(boolean variable, String content) { } + private String replaceQuotedIdentifiers(String sql, String prefix, String suffix) { + Matcher matcher = Pattern.compile("(`.*?`)").matcher(sql); + StringBuilder builder = new StringBuilder(); + while (matcher.find()) { + String group = matcher.group(); + String info = group.substring(1, group.length() - 1); + matcher.appendReplacement(builder, Matcher.quoteReplacement(prefix + info + suffix)); + } + matcher.appendTail(builder); + return builder.toString(); + } + private String handleSubstitutedSql(String sql) { if (sql.contains(SysParamsSubstitutedParams) && userEntity != null) { Matcher matcher = Pattern.compile(Pattern.quote(SysParamsSubstitutedParams) + "([A-Za-z0-9_.]+)").matcher(sql);