从JOOQ解析器结果获取表/列元数据

时间:2018-12-09 20:04:36

标签: java sql jooq

使用JOOQ解析器API,我可以解析以下查询,并从生成的Query对象获取参数映射。由此,我可以知道有一个参数,它的名称是“ something”。

但是,我一直无法弄清楚如何确定参数“ something”是否已分配给名为“ BAZ”的列,并且该列是表“ BAR”的一部分。

解析器API是否可以获取与每个参数关联的表/列元数据?

String sql = "SELECT A.FOO FROM BAR A WHERE A.BAZ = :something";

DSLContext context = DSL.using...
Parser parser = context.parser();
Query query = parser.parseQuery(sql);


Map<String, Param<?>> params = query.getParams();

1 个答案:

答案 0 :(得分:1)

从jOOQ 3.11开始,可用于访问内部表达式树的SPI是VisitListener SPI,在解析之前必须将其附加到context.configuration()上。然后,只要您遍历该表达式树,例如在您的query.getParams()通话中。

但是,有很多手动管道需要完成。例如,VisitListener仅将A.BAZ视为列引用,而没有直接知道A是重命名的表BAR。当您访问BAR A表达式时,必须跟踪自己的重命名。