in exposed-jdbc/src/main/kotlin/org/jetbrains/exposed/v1/jdbc/JdbcTransaction.kt [231:259]
fun <T, R> exec(stmt: BlockingExecutable<T, *>, body: Statement<T>.(T) -> R): R? {
@OptIn(InternalApi::class)
return withThreadLocalTransaction(this) {
statementCount++
val start = System.nanoTime()
val answer = stmt.executeIn(this)
val delta = (System.nanoTime() - start).let { TimeUnit.NANOSECONDS.toMillis(it) }
val lazySQL = lazy(LazyThreadSafetyMode.NONE) {
answer.second.map { it.sql(this) }.distinct().joinToString()
}
duration += delta
if (debug) {
statements.append(describeStatement(delta, lazySQL.value))
statementStats.getOrPut(lazySQL.value) { 0 to 0L }.let { (count, time) ->
statementStats[lazySQL.value] = (count + 1) to (time + delta)
}
}
if (delta > (warnLongQueriesDuration ?: Long.MAX_VALUE)) {
exposedLogger.warn("Long query: ${describeStatement(delta, lazySQL.value)}", LongQueryException())
}
answer.first?.let { stmt.statement.body(it) }
}
}