druid 查询字段别名与Column映射问题

lyr7nygr  于 2023-02-04  发布在  Druid
关注(0)|答案(1)|浏览(414)
  1. SQLSelectItem中有查询字段和别名,可以通过MySqlSelectQueryBlock.getSelectList()获取(如果是SQLUnionQuery需要递归)。
  2. 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里找了好久貌似没见到过类似的问题。
juzqafwq

juzqafwq1#

我也遇到 别名获取不到的问题 如 select abc as count from table where id = ${xxid}中的count 无法获取到 而且${xxid}这个动态参数 visitor里解析是个空 我想拿到{}里的xxid 无法获取

相关问题