首页 文章

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

提问于
浏览
0

使用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 回答

  • 1

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

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

相关问题