From 66e773f5a25af1fdfffe7f5ff0edeb0cf4b3dc75 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 27 Jan 2017 14:59:11 +0800 Subject: [PATCH] add testcase for issue #1591 --- .../bvt/sql/oracle/OracleListAggTest1.java | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleListAggTest1.java diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleListAggTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleListAggTest1.java new file mode 100644 index 0000000000..a33832fa2d --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleListAggTest1.java @@ -0,0 +1,72 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; +import com.alibaba.druid.util.JdbcConstants; +import com.alibaba.druid.wall.WallUtils; +import org.junit.Assert; + +import java.util.List; + +public class OracleListAggTest1 extends OracleTest { + private final String dbType = JdbcConstants.ORACLE; + + public void test_0() throws Exception { + String sql = "SELECT count(0) " + + "FROM WEP_USER T " + + "LEFT JOIN (" + + " SELECT T.ID, LISTAGG(T2.ROLE_NAME, ',') WITHIN GROUP (ORDER BY T.ID) AS ROLENAMES FROM WEP_USER T " + + " LEFT JOIN WEP_USER_ROLE T1 ON T.ID = T1.USER_ID " + + " LEFT JOIN WEP_ROLE T2 ON T1.ROLE_ID = T2.ID " + + " WHERE t.IS_DELETED = 0 " + + " AND T1.IS_DELETED = 0 " + + " AND T2.IS_DELETED = 0 " + + " GROUP BY T.ID" + + ") T1 ON T.ID = T1.ID " + + "WHERE t.IS_DELETED = 0"; + + List statementList = SQLUtils.parseStatements(sql, dbType); + SQLStatement stmt = statementList.get(0); + // print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("SELECT COUNT(0)\n" + + "FROM WEP_USER T\n" + + "\tLEFT JOIN (\n" + + "\t\tSELECT T.ID, LISTAGG(T2.ROLE_NAME, ',') WITHIN GROUP (ORDER BY T.ID) AS ROLENAMES\n" + + "\t\tFROM WEP_USER T\n" + + "\t\tLEFT JOIN WEP_USER_ROLE T1 ON T.ID = T1.USER_ID \n" + + "\t\t\tLEFT JOIN WEP_ROLE T2 ON T1.ROLE_ID = T2.ID \n" + + "\t\tWHERE t.IS_DELETED = 0\n" + + "\t\t\tAND T1.IS_DELETED = 0\n" + + "\t\t\tAND T2.IS_DELETED = 0\n" + + "\t\tGROUP BY T.ID\n" + + "\t) T1 ON T.ID = T1.ID \n" + + "WHERE t.IS_DELETED = 0",// + SQLUtils.toSQLString(stmt, dbType)); + + SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(dbType); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + + Assert.assertEquals(3, visitor.getTables().size()); + Assert.assertEquals(8, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("WEP_USER_ROLE"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("WEP_ROLE"))); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("WEP_USER_ROLE", "IS_DELETED"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("WEP_ROLE", "IS_DELETED"))); + + WallUtils.isValidateOracle(sql); + } + +}