JOOQ解析器问题(POSTGRES到H2的转换)



我试图在Java中使用jooq api将POSTGRES sql转换为H2。我是这个图书馆的新手。谁能告诉我我哪里做错了?下面是我的代码:

Query query = DSL
.using(SQLDialect.POSTGRES)
.parser()
.parseQuery("select split_part(some_field, '@', 2) from test");
String convertedQuery = DSL.using(SQLDialect.H2).render(query));

我正在使用jooq依赖版本3.13.6同样的sql当尝试从https://www.jooq.org/translate/工作完美,但我的代码抛出以下异常:

. lang。Exception: Unknown function: [1:21] SELECT SPLIT_PART ([]OPACKET_SC_EMAILADDRESSDECRYPTED, '@', 2) FROM TEST MT*

我想启用"解析未知函数&;从代码,我怎么能做到这一点?

jOOQParseListenerSPI可用于向jOOQ解析器添加新功能,例如在您的示例中:

Query query = configuration
.derive(ParseListener.onParseCondition(ctx -> {
if (ctx.parseFunctionNameIf("SPLIT_PART")) {
ctx.parse('(');
Field<?> f1 = ctx.parseField();
ctx.parse(',');
Field<?> f2 = ctx.parseField();
ctx.parse(',');
Field<?> f3 = ctx.parseField();
ctx.parse(')');
return ... // implement your emulation here
}
// Let the parser take over if we don't know the token
return null;
})
.dsl()
.parser()
.parseQuery("select split_part(some_field, '@', 2) from tes");

此功能需要jOOQ 3.15商业版