From 67a3e2298e9ff1ca7667c92690c6227bed7b6440 Mon Sep 17 00:00:00 2001 From: shenfeng Date: Fri, 20 May 2022 13:38:03 +0800 Subject: [PATCH] fix #4765 --- .../sql/visitor/SQLASTOutputVisitor.java | 2 +- .../sql/postgresql/select/PGSelectTest87.java | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/postgresql/select/PGSelectTest87.java diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index c3bbb7628e..727a11db76 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -4053,7 +4053,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet print(' '); SQLTableSource right = x.getRight(); - if (right instanceof SQLJoinTableSource) { + if (right instanceof SQLJoinTableSource && ((SQLJoinTableSource) right).getJoinType() == JoinType.COMMA) { print('('); printTableSource(right); print(')'); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/select/PGSelectTest87.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/select/PGSelectTest87.java new file mode 100644 index 0000000000..7617ecb91a --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/select/PGSelectTest87.java @@ -0,0 +1,29 @@ +package com.alibaba.druid.bvt.sql.postgresql.select; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +import java.util.List; + +public class PGSelectTest87 extends TestCase { + public void test_0() throws Exception { + String sql = "select * from mc_job a inner join (mc_role b inner join mc_source c on b.id = c.id) as tem2 on tem2.user_id = a.id;"; + + final List statements = SQLUtils.parseStatements(sql, JdbcConstants.POSTGRESQL); + assertEquals(1, statements.size()); + final SQLStatement stmt = statements.get(0); + + assertEquals("SELECT *\n" + + "FROM mc_job a\n" + + "\tINNER JOIN (mc_role b\n" + + "\t\tINNER JOIN mc_source c ON b.id = c.id) AS tem2 ON tem2.user_id = a.id;" + , stmt.toString()); + + assertEquals("select *\n" + + "from mc_job a\n" + + "\tinner join (mc_role b\n" + + "\t\tinner join mc_source c on b.id = c.id) as tem2 on tem2.user_id = a.id;", stmt.toLowerCaseString()); + } +}