java - 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 从https://www.jooq.org/translate/尝试时使用相同的 sql ,但我的代码抛出以下异常:
java.lang.Exception:未知函数:[1:21] SELECT SPLIT_PART ([ ]OPACKET_SC_EMAILADDRESSDECRYPTED, '@', 2) FROM TEST MT*
我想从代码中启用“解析未知函数”,我该如何实现?
解决方案
jOOQ ParseListener
SPI可用于向 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 商业版
推荐阅读
- adaptive-cards - 自适应卡片:元素的可见性取决于 ChoiceSet 的值
- javascript - 无法解析 blob 的数据
- javascript - 如何将 C 程序与 javascript 连接起来?
- python-3.x - Python3 Struct 解包格式字符串
- javascript - 当我多次点击带有锚点的链接时,为什么我的页面不向下滚动?
- performance-testing - 什么会影响 TPS,性能测试中的每秒点击次数?
- javascript - react native - 如何使用 sqlite 保存数据?因为出错了
- html - 如何对齐背景图像中心
- ios - 播放下一首歌曲时播放器中的颤动audio_manager ios延迟
- sql-server - SQL Server Express LocalDb 2019 的安静(无人值守)安装