簡體   English   中英

JOOQ 解析器問題(POSTGRES 到 H2 翻譯)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM