zebra 解析sql使用的阿里druid连接池内部的 ast解析器
SQLParser#parseInternal(SQLStatement stmt)
解析sql 语句的时候,会使用自定义 ast 的访问器 AbstractMySQLASTVisitor 去访问 SQLStatement 的 SQLExprTableSource
@Override
public boolean visit(SQLExprTableSource x) {
SQLName table = (SQLName) x.getExpr();
String simpleName = table.getSimpleName();
String tableName = simpleName.startsWith("`") ? parseTableName(simpleName) : simpleName;
result.getRouterContext().getTableSet().add(tableName);
return true;
}
从而获取到逻辑表明, 填充到路由上下文 RouterContext 中供后续使用
网友评论