From 956edd618d0440a3dcbeb562408a4c28702f1806 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 30 Aug 2017 17:06:58 +0800 Subject: [PATCH] refactor sql parser. --- .../druid/sql/visitor/SchemaStatVisitor.java | 28 ++++++++++++------- .../sql/MySqlParameterizedBenchmark.java | 2 +- 2 files changed, 19 insertions(+), 11 deletions(-) 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 3d8b9b13cc..7b28c24e5a 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -534,8 +534,8 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { break; } - left.accept(this); - right.accept(this); + statExpr(left); + statExpr(right); return false; } @@ -1417,7 +1417,9 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { repository.resolve(x); } - return true; + visit(x.getSelect()); + + return false; } public void endVisit(SQLSelectStatement x) { @@ -1602,14 +1604,20 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { } public boolean visit(SQLSelect x) { - if (x.getOrderBy() != null) { - x.getOrderBy().setParent(x); + SQLWithSubqueryClause with = x.getWithSubQuery(); + if (with != null) { + with.accept(this); } - accept(x.getWithSubQuery()); - accept(x.getQuery()); + SQLSelectQuery query = x.getQuery(); + if (query != null) { + query.accept(this); + } - accept(x.getOrderBy()); + SQLOrderBy orderBy = x.getOrderBy(); + if (orderBy != null) { + accept(x.getOrderBy()); + } return false; @@ -2315,8 +2323,8 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { visit((SQLPropertyExpr) x); // } else if (clazz == SQLAggregateExpr.class) { // visit((SQLAggregateExpr) x); -// } else if (clazz == SQLBinaryOpExpr.class) { -// visit((SQLBinaryOpExpr) x); + } else if (clazz == SQLBinaryOpExpr.class) { + visit((SQLBinaryOpExpr) x); // } else if (clazz == SQLCharExpr.class) { // visit((SQLCharExpr) x); // } else if (clazz == SQLNullExpr.class) { diff --git a/src/test/java/com/alibaba/druid/benckmark/sql/MySqlParameterizedBenchmark.java b/src/test/java/com/alibaba/druid/benckmark/sql/MySqlParameterizedBenchmark.java index 687291e305..ebf9ab404d 100644 --- a/src/test/java/com/alibaba/druid/benckmark/sql/MySqlParameterizedBenchmark.java +++ b/src/test/java/com/alibaba/druid/benckmark/sql/MySqlParameterizedBenchmark.java @@ -38,7 +38,7 @@ public class MySqlParameterizedBenchmark extends TestCase { // perf_parse(sql3); // 9174 5875 5805 5536 5717 // perf_parse(sql4); // 2953 2502 - perf_stat(sql); // 11793 13628 13561 13259 9946 7637 + perf_stat(sql); // 11793 13628 13561 13259 9946 7637 7444 7389 // perf_resolve(sql); // 4970 4586 3600 }