transactionResult

open fun <T> transactionResult(propagation: TransactionPropagation = TransactionPropagation.REQUIRED, isolation: TransactionIsolationLevel? = null, readOnly: Boolean = false, statementTimeout: Duration? = null, transactionTimeout: Duration? = null, block: OctaviusClient.() -> DataResult<T>): DataResult<T>

transaction for the result style. A plain transaction rolls back only on a throw, so a failure turned into a value inside it is committed over; here a returned DataResult.Failure rolls back.

val created = db.transactionResult {
val id = rawQuery("INSERT INTO citizens (name) VALUES (@n) RETURNING id")
.asResult().fetchFieldStrict<Int>("n" to name)
.getOrElse { return@transactionResult it }

rawQuery("INSERT INTO citizen_profiles (citizen_id, bio) VALUES (@id, @bio)")
.asResult().executeUpdate("id" to id, "bio" to bio)
.map { id }
}

Everything else is as on transaction.