From 6ba6471173f8f8c92eff158bbbc4b6ddfff5e3cd Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 13 Jan 2025 17:39:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20sql=E5=8F=98=E9=87=8F=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=86=99=E5=9C=A8=20join=20on=20=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/utils/SqlparserUtils.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) 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 c0be58252b..a9b557f713 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 @@ -280,6 +280,28 @@ public class SqlparserUtils { List joinsList = new ArrayList<>(); for (Join join : joins) { FromItem rightItem = join.getRightItem(); + Collection exprs = join.getOnExpressions(); + Collection exprs2 = new ArrayList<>(); + for (Expression expr : exprs) { + StringBuilder stringBuilder = new StringBuilder(); + BinaryExpression binaryExpression = null; + try { + binaryExpression = (BinaryExpression) expr; + } catch (Exception e) { + } + if (binaryExpression != null) { + boolean hasSubBinaryExpression = binaryExpression instanceof AndExpression || binaryExpression instanceof OrExpression; + if (!hasSubBinaryExpression && !(binaryExpression.getLeftExpression() instanceof BinaryExpression) && !(binaryExpression.getLeftExpression() instanceof InExpression) && (hasVariable(binaryExpression.getLeftExpression().toString()) || hasVariable(binaryExpression.getRightExpression().toString()))) { + stringBuilder.append(handleSubstitutedSql(binaryExpression.toString())); + } else { + expr.accept(getExpressionDeParser(stringBuilder)); + } + } else { + expr.accept(getExpressionDeParser(stringBuilder)); + } + exprs2.add(CCJSqlParserUtil.parseCondExpression(stringBuilder.toString())) ; + } + join.setOnExpressions(exprs2); if (rightItem instanceof ParenthesedSelect) { try { PlainSelect selectBody = ((ParenthesedSelect) rightItem).getPlainSelect();