添加SQL统计功能,统计SQL中所使用的表和字段

git-svn-id: http://code.alibabatech.com/svn/druid/trunk@279 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
wenshao
2011-06-22 11:18:26 +00:00
parent 7d157798bd
commit 9e245f4773
5 changed files with 39 additions and 1 deletions
@@ -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);
}
@@ -1673,4 +1673,9 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
}
@Override
public void endVisit(OracleSelect x) {
}
}
@@ -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) {
}