Я в данный момент на 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 есть скрытый драгоценный камень, о котором я не знаю?