jOOQ окружает функции кавычками, даже если настройка отключена - PullRequest
1 голос
/ 17 февраля 2020

Я отключил добавление кавычек в настройках:

.withRenderQuotedNames(RenderQuotedNames.NEVER)

Но когда я проверяю журнал SQL, я все равно нахожу двойные кавычки в выводе. jOOQ добавляет его к вызовам функций:

select connect_by_isleaf LEAF, ms.MODULNAME, ms.MODULNAMESPRUNG, 
       TOSCA.PA_BEZ."MODULTOSCA_MENUBEZ"(ms.MODULNAMESPRUNG, 
       TOSCA.PA_BASIS."SPRACHE_USER"()) MENUBEZ, app.BEZKURZ 
       from TOSCA.MODULSPRUNG ms 
       join TOSCA.MODULTOSCA mt1 on (ms.MODULNAME = mt1.MODULNAME and mt1.MODULART = 'M') 
       left outer join TOSCA.MODULTOSCA mt2 on mt2.MODULNAME = ms.MODULNAMESPRUNG 
       left outer join TOSCA.APPLIKATION app on app.APPL = mt2.APPL 
       start with ms.MODULNAME = 'X000' 
       connect by (prior ms.MODULNAMESPRUNG = ms.MODULNAME and prior ms.FUNKTION = 'springen') 
       order siblings by ms.SEQUENZ

И вызовам процедур:

begin ? := TOSCA.PA_SPRACH."MSGALERT_TEXT" (P_MODULNAME => 'ALLE', P_LAUFNR => 0); end;

Это ошибка? Или я должен настроить что-то еще?

1 Ответ

1 голос
/ 17 февраля 2020

Недавно сообщалось об ошибке. Возможно регрессия 3.12: https://github.com/jOOQ/jOOQ/issues/9813. В настоящее время мы изучаем это.

Обходной путь может заключаться в реализации ExecuteListener и регулярном выражении замены всех идентификаторов функций \."(\w+)"\( на .$1(:

class WorkaroundFor9813 extends DefaultExecuteListener {
    static final Pattern P = Pattern.compile("\\.\"(\\w+)\"\\(");
    @Override
    public void renderEnd(ExecuteContext ctx) {
        ctx.sql(P.matcher(ctx.sql()).replaceAll(".$1("));
    }
}

Конечно, это обходной путь, и он может случайно совпасть с вещами, которые не должны ...

...