- SQLSelectItem中有查询字段和别名,可以通过MySqlSelectQueryBlock.getSelectList()获取(如果是SQLUnionQuery需要递归)。
- visitor可以获取一个TableStat.Column的集合,该对象有个isSelect()可以判断是否是查询字段(但是类似count(1)这种不涉及具体字段的查询就不会出现在该集合里,而count(col_name)这种就会)
问题:1中的SQLSelectItem如何和2中的Column关联,即题目提到的如何把查询字段的别名 和 查询字段的完全限定名(库名.表名.字段)关联起来,以便对查询结果进行例如脱敏等操作。
尝试过的方法:SchemaStatVisitor中有 protected Column getColumn(SQLExpr expr)方法,把SqlSelectItem.getExpr()获取到的SQLExpr传入(反射强行操作- -!)。也只能处理普通查询,因为里面对于SQLSubqueryTableSource直接return null;所以类似select ... from (select ..)这种查询就不得行;
各位大佬有没有解决方案...issue里找了好久貌似没见到过类似的问题。
回答(1) 发布于 4个月前
回答(3) 发布于 4个月前
回答(3) 发布于 4个月前
回答(1) 发布于 4个月前
回答(1) 发布于 4个月前
1条答案
按热度按时间juzqafwq1#
我也遇到 别名获取不到的问题 如 select abc as count from table where id = ${xxid}中的count 无法获取到 而且${xxid}这个动态参数 visitor里解析是个空 我想拿到{}里的xxid 无法获取