执行前重建查询

Rebuild Query before execution

我正在研究将 jOOQ 用作可配置 JDBC 后端的抽象层。一个必需的选项是非常特定的数据库,它支持 JDBC,但它具有不常见的 SQL 方言。我需要使用这个数据库,但我想继续使用通用的 DSL 和 API。例如,我对使用 DSLContext.executeUpdate 调用很感兴趣。
我了解如何通过实施 DefaultExecuteListener 解决一半的问题。但是还有另一半,我必须将 jOOQ 生成的一个语句翻译成另一个语句,由 DB 接受。我认为这个任务应该比 SQL 修改更容易通过使用 DSL 操作来实现。 是否可以在 ExecutionListener 早期步骤(例如'start')中访问 DSL 构造,将其分解并将新的 DSL 构造注入后续步骤?

您正在寻找的是 VisitListener SPI,它也记录在手册中:

http://www.jooq.org/doc/latest/manual/sql-building/queryparts/custom-sql-transformation/