使用JOOQ解析器API,我能够解析以下查询并从生成的Query对象中获取参数映射 . 从这里,我可以看出有一个参数,它的名字是“东西” .
但是,我无法弄清楚如何确定参数“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 回答
从jOOQ 3.11开始,可用于访问内部表达式树的SPI是VisitListener SPI,您必须在解析之前将其附加到
context.configuration()
. 只要遍历该表达式树,就会调用它,例如,在你的query.getParams()
电话 .但是,需要完成相当多的手动管道 . 例如,
VisitListener
只会将A.BAZ
视为列引用,而不直接知道A
是重命名的表BAR
. 当您访问BAR A
表达式时,您必须自己跟踪这种重命名 .