From c73573ac8c42894a56dc81a5520c5e508c648672 Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 12 Sep 2016 02:26:58 +0800 Subject: [PATCH] SchemaStatVisitor support stat functions. --- .../visitor/OracleSchemaStatVisitor.java | 5 --- .../druid/sql/visitor/SchemaStatVisitor.java | 6 ++++ .../bvt/sql/schemaStat/SchemaStatTest9.java | 33 +++++++++++++++++++ 3 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/schemaStat/SchemaStatTest9.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java index f2b290607d..c794fa3faa 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java @@ -326,11 +326,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle return super.visit(x); } - public boolean visit(SQLMethodInvokeExpr x) { - accept(x.getParameters()); - return false; - } - public boolean visit(SQLIdentifierExpr x) { if ("ROWNUM".equalsIgnoreCase(x.getName())) { return false; diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java index af0e3c30bd..6ba31bce35 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -137,6 +137,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { protected final List orderByColumns = new ArrayList(); protected final Set groupByColumns = new LinkedHashSet(); protected final List aggregateFunctions = new ArrayList(); + protected final List functions = new ArrayList(2); protected final Map subQueryMap = new LinkedHashMap(); @@ -1191,6 +1192,8 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { } public boolean visit(SQLMethodInvokeExpr x) { + this.functions.add(x); + accept(x.getParameters()); return false; } @@ -1752,4 +1755,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { return false; } + public List getFunctions() { + return this.functions; + } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/schemaStat/SchemaStatTest9.java b/src/test/java/com/alibaba/druid/bvt/sql/schemaStat/SchemaStatTest9.java new file mode 100644 index 0000000000..45c38888be --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/schemaStat/SchemaStatTest9.java @@ -0,0 +1,33 @@ +package com.alibaba.druid.bvt.sql.schemaStat; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; +import org.junit.Assert; + +public class SchemaStatTest9 extends TestCase { + + public void test_schemaStat() throws Exception { + String sql = "select now() from t"; + + String dbType = JdbcConstants.ORACLE; + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType); + SQLStatement stmt = parser.parseStatementList().get(0); + + SchemaStatVisitor statVisitor = SQLUtils.createSchemaStatVisitor(dbType); + stmt.accept(statVisitor); + +// System.out.println(statVisitor.getColumns()); +// System.out.println(statVisitor.getGroupByColumns()); // group by +// System.out.println("relationships : " + statVisitor.getRelationships()); // group by + + Assert.assertEquals(0, statVisitor.getColumns().size()); + Assert.assertEquals(0, statVisitor.getConditions().size()); + assertEquals(1, statVisitor.getFunctions().size()); + assertEquals("now", statVisitor.getFunctions().get(0).getMethodName()); + } +}