jOOQ转换POSTGRES SQL到H2报未知函数错误,如何开启未知函数解析?
报错原因
jOOQ默认配置下,解析器遇到未在当前方言中注册的函数会直接抛出异常,官方在线转换工具默认开启了「允许解析未知函数」的配置,因此可以正常处理该SQL。
解决方案
构造解析用的DSLContext时传入自定义Settings,开启未知函数解析即可,3.13.6版本的修改后代码如下:
import org.jooq.conf.Settings; import org.jooq.conf.ParseUnknownFunctions; // 构造配置,开启未知函数解析 Settings parserSettings = new Settings() .withParseUnknownFunctions(ParseUnknownFunctions.ALLOW); Query query = DSL .using(SQLDialect.POSTGRES, parserSettings) .parser() .parseQuery("select split_part(some_field, '@', 2) from test"); // 注意原代码此行末尾多了一个多余右括号,已修正 String convertedQuery = DSL.using(SQLDialect.H2).render(query);
补充说明
开启该配置后,解析器会将所有未识别的函数作为通用自定义函数处理,后续渲染到H2方言时,jOOQ会自动完成split_part这类通用函数的方言适配,最终输出的H2语法和官方在线工具转换结果一致。需要注意开启该配置后,解析器不会对函数名拼写做严格校验,拼写错误的函数会被直接渲染到最终SQL中,执行阶段才会报错。
内容的提问来源于stack exchange,提问作者user4725450
相关产品推荐
相关产品推荐

