JDBI: Есть ли способ получить заполненный оператор SQL из SqlLogger? - PullRequest
0 голосов
/ 09 февраля 2020

Я в данный момент на jdbi3-postgres и использую SqlLogger, чтобы помочь мне в отладке.

Это моя текущая реализация SqlLogger:

new SqlLogger() {
    @Override
    public void logAfterExecution(StatementContext context) {
            log.debug("\nsql: {},\n\tbindings: {}\n\ttook {}ms\n\n",
                context.getRenderedSql(),
                context.getBinding().toString(),
                context.getElapsedTime(ChronoUnit.MILLIS)
            );
        }
    }
}

И вывод что-то как:

2020-02-09 17:01:32.359 [main] DEBUG yamaha.app.AppContext - 
sql: SELECT t.id, t.action, t.created_at, created_by.id c_id, created_by.displayname c_displayname FROM input_checksheet_flow t JOIN t_user created_by on created_by.id = t.created_by_id WHERE t.input_checksheet_id = :input_checksheet_id ORDER BY t.id DESC, t.created_at DESC LIMIT 1,
    bindings: {positional:{}, named:{input_checksheet_id:20}, finder:[]}
    took 3ms

Это полезно, но все еще проблематично c, если бы я ожидал, что полный sql готов к выполнению в sql клиенте, таком как psql в моем случае.

Было бы полезно, если бы я мог просто скопировать и вставить вставленный в привязку оператор sql в мой клиент sql без необходимости заменять имена параметров на значения из StatementContext::getBinding, но я не уверен, как этого добиться это без необходимости делать это вручную, при условии предоставления кавычек для строки после замены, и т. д. c.

Возможно, в jdbi SqlLogger есть скрытый драгоценный камень, о котором я не знаю?

...