[英]JOOQ Parser Issue (POSTGRES to H2 Translation)
我正在嘗試使用 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:未知 function:[1:21] SELECT SPLIT_PART ( [ ]OPACKET_SC_EMAILADDRESSDDECRYPTED, '@', 2 ) FROM TEST MT*
我想從代碼中啟用“解析未知函數”,我該如何實現?
我想出了如何啟用“解析未知函數”,但是無法識別諸如 date_diff 和 date_parse 之類的某些函數。 有什么線索嗎?
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 商業版
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.