From 43cb2c2190d9d2fe59d497fbc4e3c8fc9cb055b0 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 25 Aug 2022 21:59:27 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=95=B0=E6=8D=AE=E9=9B=86):=20SQL?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9B=86=E5=8F=82=E6=95=B0=E4=BC=9A=E6=8A=8A?= =?UTF-8?q?between=E7=AD=89=E6=9D=A1=E4=BB=B6=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/dataset/DataSetTableService.java | 69 +++++++++++-------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 22210b6bab..6a7f37d28c 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -2594,38 +2594,62 @@ public class DataSetTableService { visitBinaryExpr(andExpression, "AND"); } + @Override + public void visit(Between between) { + if(hasVarible(between.getBetweenExpressionStart().toString()) || hasVarible(between.getBetweenExpressionEnd().toString())){ + getBuffer().append(SubstitutedSql); + }else { + getBuffer().append(between.getLeftExpression()).append(" BETWEEN ").append(between.getBetweenExpressionStart()).append(" AND ").append(between.getBetweenExpressionEnd()); + } + } @Override public void visit(MinorThan minorThan) { + if(hasVarible(minorThan.getLeftExpression().toString()) || hasVarible(minorThan.getRightExpression().toString())){ + getBuffer().append(SubstitutedSql); + return; + } getBuffer().append(minorThan.getLeftExpression()); getBuffer().append(" < "); - getBuffer().append(minorThan.getRightExpression()); + getBuffer().append( minorThan.getRightExpression()); } @Override public void visit(MinorThanEquals minorThan) { + if(hasVarible(minorThan.getLeftExpression().toString()) || hasVarible(minorThan.getRightExpression().toString())){ + getBuffer().append(SubstitutedSql); + return; + } getBuffer().append(minorThan.getLeftExpression()); getBuffer().append(" <= "); - getBuffer().append(minorThan.getRightExpression()); + getBuffer().append( minorThan.getRightExpression()); } @Override public void visit(GreaterThanEquals minorThan) { + if(hasVarible(minorThan.getLeftExpression().toString()) || hasVarible(minorThan.getRightExpression().toString())){ + getBuffer().append(SubstitutedSql); + return; + } getBuffer().append(minorThan.getLeftExpression()); getBuffer().append(" >= "); - getBuffer().append(minorThan.getRightExpression()); + getBuffer().append( minorThan.getRightExpression()); } @Override - public void visit(GreaterThan minorThan) { - getBuffer().append(minorThan.getLeftExpression()); + public void visit(GreaterThan greaterThan) { + if(hasVarible(greaterThan.getLeftExpression().toString()) || hasVarible(greaterThan.getRightExpression().toString())){ + getBuffer().append(SubstitutedSql); + return; + } + getBuffer().append(greaterThan.getLeftExpression()); getBuffer().append(" > "); - getBuffer().append(minorThan.getRightExpression()); + getBuffer().append( greaterThan.getRightExpression()); } @Override public void visit(ExpressionList expressionList) { - for (Iterator iter = expressionList.getExpressions().iterator(); iter.hasNext(); ) { + for (Iterator iter = expressionList.getExpressions().iterator(); iter.hasNext();) { Expression expression = iter.next(); expression.accept(this); if (iter.hasNext()) { @@ -2634,15 +2658,6 @@ public class DataSetTableService { } } - @Override - public void visit(Between between) { - if (hasVarible(between.getBetweenExpressionStart().toString()) || hasVarible(between.getBetweenExpressionEnd().toString())) { - getBuffer().append(SubstitutedSql); - } else { - getBuffer().append(between.getLeftExpression()).append(" BETWEEN ").append(between.getBetweenExpressionStart()).append(" AND ").append(between.getBetweenExpressionEnd()); - } - } - @Override public void visit(LikeExpression likeExpression) { if (hasVarible(likeExpression.toString())) { @@ -2706,33 +2721,29 @@ public class DataSetTableService { private void visitBinaryExpr(BinaryExpression expr, String operator) { - boolean hasBinaryExpression = false; + boolean hasSubBinaryExpression = false; try { BinaryExpression leftBinaryExpression = (BinaryExpression) expr.getLeftExpression(); - hasBinaryExpression = leftBinaryExpression.getLeftExpression() instanceof BinaryExpression; - } catch (Exception e) { - } + hasSubBinaryExpression = leftBinaryExpression.getLeftExpression() instanceof Expression; + } catch (Exception e) {e.printStackTrace();} - if (expr.getLeftExpression() instanceof BinaryExpression && !hasBinaryExpression && hasVarible(expr.getLeftExpression().toString())) { + if (expr.getLeftExpression() instanceof BinaryExpression && !hasSubBinaryExpression && hasVarible(expr.getLeftExpression().toString())) { getBuffer().append(SubstitutedSql); } else { expr.getLeftExpression().accept(this); } getBuffer().append(" " + operator + " "); - - hasBinaryExpression = false; + hasSubBinaryExpression = false; try { BinaryExpression rightBinaryExpression = (BinaryExpression) expr.getRightExpression(); - hasBinaryExpression = rightBinaryExpression.getRightExpression() instanceof BinaryExpression; + hasSubBinaryExpression = rightBinaryExpression.getRightExpression() instanceof BinaryExpression; + } catch (Exception e) { } - - if (expr.getRightExpression() instanceof BinaryExpression && !hasBinaryExpression && hasVarible(expr.getRightExpression().toString())) { + if (expr.getRightExpression() instanceof BinaryExpression && !hasSubBinaryExpression && hasVarible(expr.getRightExpression().toString())) { getBuffer().append(SubstitutedSql); - } else if (expr.getRightExpression() instanceof InExpression && !hasBinaryExpression && hasVarible(expr.getRightExpression().toString())) { - getBuffer().append(SubstitutedSql); - } else { + } else { expr.getRightExpression().accept(this); } }