From 4e2a8a8cc0b6186cae460bf986bf5b86bbd4298e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Sat, 17 Jul 2021 10:36:49 +0800 Subject: [PATCH] add --- .../com/alibaba/druid/sql/repository/Schema.java | 4 ++++ .../druid/sql/repository/SchemaRepository.java | 6 ++++++ .../druid/sql/visitor/SchemaStatVisitor.java | 16 +++++----------- .../java/com/alibaba/druid/stat/TableStat.java | 4 ++++ .../druid/support/opds/udf/SqlCodeStat.java | 3 ++- 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/repository/Schema.java b/src/main/java/com/alibaba/druid/sql/repository/Schema.java index 746c5de475..d8a8413324 100644 --- a/src/main/java/com/alibaba/druid/sql/repository/Schema.java +++ b/src/main/java/com/alibaba/druid/sql/repository/Schema.java @@ -340,6 +340,10 @@ public class Schema { return this.objects.values(); } + public boolean removeObject(Long nameHashCode64) { + return this.objects.remove(nameHashCode64) != null; + } + public int getViewCount() { int count = 0; for (SchemaObject object : this.objects.values()) { diff --git a/src/main/java/com/alibaba/druid/sql/repository/SchemaRepository.java b/src/main/java/com/alibaba/druid/sql/repository/SchemaRepository.java index 2c209d536d..64775060ec 100644 --- a/src/main/java/com/alibaba/druid/sql/repository/SchemaRepository.java +++ b/src/main/java/com/alibaba/druid/sql/repository/SchemaRepository.java @@ -348,6 +348,12 @@ public class SchemaRepository { return getDefaultSchema().getTables(x); } + public boolean removeTable(SQLName name) { + return getDefaultSchema() + .removeObject( + name.nameHashCode64()); + } + public int getTableCount() { return getDefaultSchema().getTableCount(); } 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 97d68390c5..adea51c418 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -1006,9 +1006,9 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { SQLExpr original = expr; for (int i = 0;;i++) { -// if (i > 100) { -// return null; -// } + if (i > 1000) { + return null; + } if (expr instanceof SQLMethodInvokeExpr) { SQLMethodInvokeExpr methodInvokeExp = (SQLMethodInvokeExpr) expr; @@ -1924,12 +1924,6 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { if (isSimpleExprTableSource(x)) { TableStat stat = getTableStatWithUnwrap(expr); if (stat == null) { - if (expr instanceof SQLIdentifierExpr - && ((SQLIdentifierExpr) expr).getResolvedOwnerObject() instanceof SQLCreateViewStatement) { - SQLCreateViewStatement createView = (SQLCreateViewStatement) ((SQLIdentifierExpr) expr).getResolvedOwnerObject(); - createView.getSubQuery().accept(this); - } - return false; } @@ -1975,8 +1969,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { SQLObject resolvedOwnerObject = identifierExpr.getResolvedOwnerObject(); if (resolvedOwnerObject instanceof SQLSubqueryTableSource - || resolvedOwnerObject instanceof SQLWithSubqueryClause.Entry - || resolvedOwnerObject instanceof SQLCreateViewStatement) { + || resolvedOwnerObject instanceof SQLWithSubqueryClause.Entry) { return true; } @@ -2191,6 +2184,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { if (x.getSelect() != null) { x.getSelect().accept(this); + stat.incrementInsertCount(); } SQLExprTableSource like = x.getLike(); diff --git a/src/main/java/com/alibaba/druid/stat/TableStat.java b/src/main/java/com/alibaba/druid/stat/TableStat.java index 99d49011fc..dc67ac6a99 100644 --- a/src/main/java/com/alibaba/druid/stat/TableStat.java +++ b/src/main/java/com/alibaba/druid/stat/TableStat.java @@ -40,6 +40,10 @@ public class TableStat { int dropIndexCount = 0; int referencedCount = 0; + public TableStat() { + + } + public int getReferencedCount() { return referencedCount; } diff --git a/src/main/java/com/alibaba/druid/support/opds/udf/SqlCodeStat.java b/src/main/java/com/alibaba/druid/support/opds/udf/SqlCodeStat.java index fe9e37c426..1a7dd823c3 100644 --- a/src/main/java/com/alibaba/druid/support/opds/udf/SqlCodeStat.java +++ b/src/main/java/com/alibaba/druid/support/opds/udf/SqlCodeStat.java @@ -1,5 +1,6 @@ package com.alibaba.druid.support.opds.udf; +import com.alibaba.druid.sql.parser.SQLParserFeature; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.serializer.SerializerFeature; @@ -27,7 +28,7 @@ public class SqlCodeStat extends UDF { DbType dbType = dbTypeName == null ? null : DbType.valueOf(dbTypeName); try { - List stmtList = SQLUtils.parseStatements(sql, DbType.odps); + List stmtList = SQLUtils.parseStatements(sql, DbType.odps, SQLParserFeature.EnableMultiUnion); CodeStatVisitor v = new CodeStatVisitor(); for (SQLStatement stmt : stmtList) {