mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
添加SQL统计功能,统计SQL中所使用的表和字段
git-svn-id: http://code.alibabatech.com/svn/druid/trunk@279 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
+8
@@ -54,6 +54,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRefDataType;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleReferencesConstaint;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectHierachicalQueryClause;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectJoin;
|
||||
@@ -76,6 +77,13 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitorAdapter;
|
||||
|
||||
public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements OracleASTVisitor {
|
||||
|
||||
public boolean visit(OracleSelect x) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void endVisit(OracleSelect x) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(OracleAggregateExpr astNode) {
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRefDataType;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleReferencesConstaint;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectHierachicalQueryClause;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectJoin;
|
||||
@@ -362,4 +363,8 @@ public interface OracleASTVisitor extends SQLASTVisitor {
|
||||
boolean visit(OracleBinaryDoubleExpr x);
|
||||
|
||||
void endVisit(OracleBinaryDoubleExpr x);
|
||||
|
||||
boolean visit(OracleSelect x);
|
||||
|
||||
void endVisit(OracleSelect x);
|
||||
}
|
||||
|
||||
+5
@@ -1673,4 +1673,9 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(OracleSelect x) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+20
@@ -24,6 +24,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleAggregateExpr;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectQueryBlock;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectTableReference;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement;
|
||||
@@ -160,6 +161,25 @@ public class OracleSchemaStatVisitor extends OracleASTVIsitorAdapter {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void endVisit(OracleSelect x) {
|
||||
}
|
||||
|
||||
public boolean visit(OracleSelect x) {
|
||||
accept(x.getFactoring());
|
||||
accept(x.getQuery());
|
||||
|
||||
String originalTable = currentTableLocal.get();
|
||||
|
||||
currentTableLocal.set((String) x.getQuery().getAttribute("table"));
|
||||
x.putAttribute("_old_local_", originalTable);
|
||||
|
||||
accept(x.getOrderBy());
|
||||
|
||||
currentTableLocal.set(originalTable);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void endVisit(SQLSelect x) {
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user