use sendQuery if no return is expected

This commit is contained in:
2019-08-04 21:09:24 +02:00
parent cbb86dacc5
commit 24349fc71f
12 changed files with 101 additions and 16 deletions

View File

@@ -185,9 +185,17 @@ class Connection(
}
}
override fun sendQuery(sql: String): QueryResult {
return stopwatchQuery(sql) {
connect().sendQuery(sql).join()
override fun sendQuery(sql: String, values: List<Any?>): Int {
return stopwatchQuery(sql, values) {
replaceArgsIntoSql(sql, compileArgs(values)) {
connect().sendQuery(it).join().rowsAffected.toInt()
}
}
}
override fun sendQuery(sql: String, values: Map<String, Any?>): Int {
return replaceArgs(sql, values) {
sendQuery(this.sql, this.parameters)
}
}
@@ -219,6 +227,19 @@ class Connection(
return block(ParametersQuery(newSql, newArgs))
}
private fun <T> replaceArgsIntoSql(sql: String, values: List<Any?>, block: (String) -> T): T {
val paramRegex = "(?<!\\?)(\\?)".toRegex(RegexOption.IGNORE_CASE)
var i = 0
val newSql = paramRegex.replace(sql) { _ ->
values[i] ?: error("Parameter $i missing")
val valToReplace = values[i].toString()
++i
"'$valToReplace'"
}
return block(newSql)
}
data class ParametersQuery(val sql: String, val parameters: List<Any?>)
private fun <T> stopwatchQuery(sql: String, values: List<Any?> = emptyList(), callback: () -> T): T {