diff --git a/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 992793b84a..538ce19c35 100644 --- a/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -1176,10 +1176,13 @@ private void visitBinaryLeft(SQLExpr left, SQLBinaryOperator op) { if (leftRational) { this.indentCount++; } - //print('('); + if (!((SQLBinaryOpExpr) left).isParenthesized()) { + print('('); + } printExpr(left, parameterized); - // print(')'); - + if (!((SQLBinaryOpExpr) left).isParenthesized()) { + print(')'); + } if (leftRational) { this.indentCount--; } diff --git a/core/src/test/java/com/alibaba/druid/sql/issues/Issue6408.java b/core/src/test/java/com/alibaba/druid/sql/issues/Issue6408.java new file mode 100644 index 0000000000..57302da59c --- /dev/null +++ b/core/src/test/java/com/alibaba/druid/sql/issues/Issue6408.java @@ -0,0 +1,31 @@ +package com.alibaba.druid.sql.issues; + +import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; +import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; +import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr; +import junit.framework.TestCase; +/** + * @auther nojavacc + * @see ... + */ +public class Issue6408 extends TestCase { + public void testSQLBuild() { + +// 加法表达式 5+3 + SQLBinaryOpExpr addExpr = new SQLBinaryOpExpr(); + addExpr.setLeft(new SQLIntegerExpr(5)); + addExpr.setOperator(SQLBinaryOperator.Add); + addExpr.setRight(new SQLIntegerExpr(3)); + +//除法表达式 (5 + 3) / 2 + SQLBinaryOpExpr deviceExpr = new SQLBinaryOpExpr(); + deviceExpr.setLeft(addExpr); + deviceExpr.setOperator(SQLBinaryOperator.Divide); + deviceExpr.setRight(new SQLIntegerExpr(2)); + +// 期望输出(5 + 3) / 2,实际输出为 5 + 3 / 2 + System.out.println(deviceExpr); + + + } +}