小编典典

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

sql

使用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();

阅读 164

收藏
2021-04-14

共1个答案

小编典典

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

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

2021-04-14