in core/src/main/java/com/alibaba/druid/sql/SQLUtils.java [977:1330]
public static void acceptTableSource(String sql,
DbType dbType,
Consumer<SQLTableSource> consumer,
Predicate<SQLTableSource> filter) {
if (sql == null || sql.isEmpty()) {
return;
}
List<SQLStatement> stmtList = new ArrayList<>();
try {
SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType, SQLParserFeature.EnableMultiUnion, SQLParserFeature.KeepComments, SQLParserFeature.EnableSQLBinaryOpExprGroup);
parser.parseStatementList(stmtList, -1, null);
} catch (Exception ignored) {
return;
}
SQLASTVisitor visitor;
switch (dbType) {
case odps:
visitor = new OdpsASTVisitorAdapter() {
@Override
public boolean visit(SQLExprTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLJoinTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLSubqueryTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLUnionQueryTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLValuesTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLUnnestTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLWithSubqueryClause.Entry x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLLateralViewTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLAdhocTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
};
break;
case mysql:
visitor = new MySqlASTVisitorAdapter() {
public boolean visit(SQLExprTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLJoinTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLSubqueryTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLUnionQueryTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLValuesTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLUnnestTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLWithSubqueryClause.Entry x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLLateralViewTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLAdhocTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(MySqlUpdateTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
};
break;
case oracle:
visitor = new OracleASTVisitorAdapter() {
public boolean visit(SQLExprTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLSubqueryTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLJoinTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLUnionQueryTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLValuesTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLUnnestTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLWithSubqueryClause.Entry x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLLateralViewTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLAdhocTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(OracleSelectTableReference x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(OracleWithSubqueryEntry x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(OracleSelectSubqueryTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
};
break;
default:
visitor = new SQLASTVisitorAdapter() {
public boolean visit(SQLExprTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLJoinTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLSubqueryTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLValuesTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLUnnestTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLUnionQueryTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLWithSubqueryClause.Entry x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLLateralViewTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
@Override
public boolean visit(SQLAdhocTableSource x) {
if (filter == null || filter.test(x)) {
consumer.accept(x);
}
return true;
}
};
break;
}
for (SQLStatement stmt : stmtList) {
stmt.accept(visitor);
}
}