From 47eb0471dda30f8c52dace1513d282fa12e0b066 Mon Sep 17 00:00:00 2001 From: Philip Wedemann <22521688+hfhbd@users.noreply.github.com> Date: Thu, 22 Sep 2022 18:14:52 +0200 Subject: [PATCH 1/4] Adopt R2DBC changes which does not always send a value --- .../cash/sqldelight/driver/r2dbc/R2dbcDriver.kt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt b/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt index 848110c617b..1d121da1223 100644 --- a/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt +++ b/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt @@ -8,7 +8,9 @@ import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.db.SqlPreparedStatement import io.r2dbc.spi.Connection import io.r2dbc.spi.Statement -import kotlinx.coroutines.reactive.awaitLast +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.reactive.asFlow +import kotlinx.coroutines.reactive.awaitFirstOrNull import kotlinx.coroutines.reactive.awaitSingle class R2dbcDriver(private val connection: Connection) : SqlDriver { @@ -29,7 +31,7 @@ class R2dbcDriver(private val connection: Connection) : SqlDriver { val rowSet = mutableListOf>() result.map { row, rowMetadata -> rowSet.add(rowMetadata.columnMetadatas.mapIndexed { index, _ -> index to row.get(index) }.toMap()) - }.awaitLast() + }.asFlow().collect() return@AsyncValue mapper(R2dbcCursor(rowSet)) } @@ -47,7 +49,7 @@ class R2dbcDriver(private val connection: Connection) : SqlDriver { return QueryResult.AsyncValue { val result = prepared.execute().awaitSingle() - return@AsyncValue result.rowsUpdated.awaitSingle() + return@AsyncValue result.rowsUpdated.awaitFirstOrNull()?.toLong() ?: 0 } } @@ -64,7 +66,7 @@ class R2dbcDriver(private val connection: Connection) : SqlDriver { this.transaction = transaction if (enclosing == null) { - connection.beginTransaction().awaitSingle() + connection.beginTransaction().awaitFirstOrNull() } return@AsyncValue transaction @@ -88,9 +90,9 @@ class R2dbcDriver(private val connection: Connection) : SqlDriver { override fun endTransaction(successful: Boolean): QueryResult = QueryResult.AsyncValue { if (enclosingTransaction == null) { if (successful) { - connection.commitTransaction().awaitSingle() + connection.commitTransaction().awaitFirstOrNull() } else { - connection.rollbackTransaction().awaitSingle() + connection.rollbackTransaction().awaitFirstOrNull() } } transaction = enclosingTransaction From f958a76936578779c9c87fd950b9a4bec37b5c4a Mon Sep 17 00:00:00 2001 From: Philip Wedemann <22521688+hfhbd@users.noreply.github.com> Date: Thu, 22 Sep 2022 18:24:03 +0200 Subject: [PATCH 2/4] Update R2dbcDriver.kt --- .../app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt b/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt index 1d121da1223..03159cc14ae 100644 --- a/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt +++ b/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt @@ -8,7 +8,7 @@ import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.db.SqlPreparedStatement import io.r2dbc.spi.Connection import io.r2dbc.spi.Statement -import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.toList import kotlinx.coroutines.reactive.asFlow import kotlinx.coroutines.reactive.awaitFirstOrNull import kotlinx.coroutines.reactive.awaitSingle @@ -28,10 +28,9 @@ class R2dbcDriver(private val connection: Connection) : SqlDriver { return QueryResult.AsyncValue { val result = prepared.execute().awaitSingle() - val rowSet = mutableListOf>() - result.map { row, rowMetadata -> - rowSet.add(rowMetadata.columnMetadatas.mapIndexed { index, _ -> index to row.get(index) }.toMap()) - }.asFlow().collect() + val rowSet = result.map { row, rowMetadata -> + List(rowMetadata.columnMetadatas.size) { index -> index to row.get(index) }.toMap() + }.asFlow().toList() return@AsyncValue mapper(R2dbcCursor(rowSet)) } From da3afa4a66ed1cb8157874c4178630d8953b352e Mon Sep 17 00:00:00 2001 From: Philip Wedemann <22521688+hfhbd@users.noreply.github.com> Date: Thu, 22 Sep 2022 18:26:43 +0200 Subject: [PATCH 3/4] Update R2dbcDriver.kt --- .../kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt b/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt index 03159cc14ae..2e8013f9561 100644 --- a/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt +++ b/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt @@ -29,7 +29,7 @@ class R2dbcDriver(private val connection: Connection) : SqlDriver { val result = prepared.execute().awaitSingle() val rowSet = result.map { row, rowMetadata -> - List(rowMetadata.columnMetadatas.size) { index -> index to row.get(index) }.toMap() + List(rowMetadata.columnMetadatas.size) { index -> row.get(index) } }.asFlow().toList() return@AsyncValue mapper(R2dbcCursor(rowSet)) @@ -152,7 +152,7 @@ class R2dbcPreparedStatement(private val statement: Statement) : SqlPreparedStat /** * TODO: Write a better async cursor API */ -class R2dbcCursor(val rowSet: List>) : SqlCursor { +class R2dbcCursor(val rowSet: List>) : SqlCursor { var row = -1 private set From 258b4a1b79638e93dc297dc7a5f1b6c52faab62f Mon Sep 17 00:00:00 2001 From: Philip Wedemann <22521688+hfhbd@users.noreply.github.com> Date: Thu, 22 Sep 2022 18:36:45 +0200 Subject: [PATCH 4/4] Update R2dbcDriver.kt --- .../main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt b/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt index 2e8013f9561..346cac32c0c 100644 --- a/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt +++ b/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt @@ -48,7 +48,7 @@ class R2dbcDriver(private val connection: Connection) : SqlDriver { return QueryResult.AsyncValue { val result = prepared.execute().awaitSingle() - return@AsyncValue result.rowsUpdated.awaitFirstOrNull()?.toLong() ?: 0 + return@AsyncValue result.rowsUpdated.awaitFirstOrNull() ?: 0 } }