From e447eabe672c52039fb300d483d2fbddcafbe1a3 Mon Sep 17 00:00:00 2001 From: Sung-Heon Date: Sun, 18 May 2025 23:56:02 +0900 Subject: [PATCH 1/3] Add Boolean type conversion support in JasyncRow --- r2dbc-mysql/src/main/java/JasyncRow.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/r2dbc-mysql/src/main/java/JasyncRow.kt b/r2dbc-mysql/src/main/java/JasyncRow.kt index d272c9c0..ba74c74a 100644 --- a/r2dbc-mysql/src/main/java/JasyncRow.kt +++ b/r2dbc-mysql/src/main/java/JasyncRow.kt @@ -30,6 +30,14 @@ class JasyncRow(private val rowData: RowData, private val metadata: JasyncMetada return when { requestedType == Object::class.java -> value requestedType == String::class.java -> value?.toString() + requestedType == java.lang.Boolean::class.java -> { + when (value) { + is Number -> value.toInt() != 0 + is String -> value.toBoolean() + is Boolean -> value + else -> throw IllegalStateException("Cannot convert ${value?.javaClass?.simpleName} to Boolean") + } + } value is Number -> { when (requestedType) { java.lang.Long::class.java -> value.toLong() @@ -54,6 +62,12 @@ class JasyncRow(private val rowData: RowData, private val metadata: JasyncMetada else -> throw IllegalStateException("unmatched requested type ${requestedType.simpleName}") } } + value is Boolean && requestedType.isPrimitive -> { + when (requestedType.name) { + "boolean" -> value + else -> throw IllegalStateException("Cannot convert Boolean to ${requestedType.name}") + } + } value is LocalDateTime -> { when (requestedType) { LocalDate::class.java -> value.toLocalDate() From 3922c34f12da2ff542e75e0b62ef577e6fb4c70c Mon Sep 17 00:00:00 2001 From: Sung-Heon Date: Sun, 18 May 2025 23:59:45 +0900 Subject: [PATCH 2/3] Add unit tests for Boolean type conversion in JasyncRow --- .../jasync/r2dbc/mysql/JasyncRowTest.kt | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 r2dbc-mysql/src/test/java/com/github/jasync/r2dbc/mysql/JasyncRowTest.kt diff --git a/r2dbc-mysql/src/test/java/com/github/jasync/r2dbc/mysql/JasyncRowTest.kt b/r2dbc-mysql/src/test/java/com/github/jasync/r2dbc/mysql/JasyncRowTest.kt new file mode 100644 index 00000000..2794293e --- /dev/null +++ b/r2dbc-mysql/src/test/java/com/github/jasync/r2dbc/mysql/JasyncRowTest.kt @@ -0,0 +1,56 @@ +package com.github.jasync.r2dbc.mysql + +import com.github.jasync.sql.db.RowData +import io.mockk.every +import io.mockk.mockk +import org.junit.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +/** + * Unit tests for [JasyncRow]. + */ +internal class JasyncRowTest { + + @Test + fun testBooleanConversion() { + // Mock dependencies + val rowData = mockk() + val metadata = mockk() + + // Setup mock values for different types of data + every { rowData["boolTrue"] } returns true + every { rowData["boolFalse"] } returns false + every { rowData["numZero"] } returns 0 + every { rowData["numOne"] } returns 1 + every { rowData["stringTrue"] } returns "true" + every { rowData["stringFalse"] } returns "false" + every { rowData[0] } returns true + every { rowData[1] } returns 0 + every { rowData[2] } returns "true" + + val row = JasyncRow(rowData, metadata) + + // Test conversion from Boolean to Boolean + assertTrue(row.get("boolTrue", java.lang.Boolean::class.java) as Boolean) + assertFalse(row.get("boolFalse", java.lang.Boolean::class.java) as Boolean) + + // Test conversion from Number to Boolean + assertFalse(row.get("numZero", java.lang.Boolean::class.java) as Boolean) + assertTrue(row.get("numOne", java.lang.Boolean::class.java) as Boolean) + + // Test conversion from String to Boolean + assertTrue(row.get("stringTrue", java.lang.Boolean::class.java) as Boolean) + assertFalse(row.get("stringFalse", java.lang.Boolean::class.java) as Boolean) + + // Test conversion from various types using index + assertTrue(row.get(0, java.lang.Boolean::class.java) as Boolean) + assertFalse(row.get(1, java.lang.Boolean::class.java) as Boolean) + assertTrue(row.get(2, java.lang.Boolean::class.java) as Boolean) + + // Test conversion to primitive boolean - using Boolean class in Kotlin + assertTrue(row.get("boolTrue", java.lang.Boolean::class.java) as Boolean) + assertFalse(row.get("boolFalse", java.lang.Boolean::class.java) as Boolean) + } +} From 7fe6c61b3ebb908f396a47e3fb45375b98c6f741 Mon Sep 17 00:00:00 2001 From: Sung-Heon Date: Mon, 19 May 2025 15:22:10 +0900 Subject: [PATCH 3/3] Refactor JasyncRowTest to remove unnecessary blank lines --- .../github/jasync/r2dbc/mysql/JasyncRowTest.kt | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/r2dbc-mysql/src/test/java/com/github/jasync/r2dbc/mysql/JasyncRowTest.kt b/r2dbc-mysql/src/test/java/com/github/jasync/r2dbc/mysql/JasyncRowTest.kt index 2794293e..44ecad31 100644 --- a/r2dbc-mysql/src/test/java/com/github/jasync/r2dbc/mysql/JasyncRowTest.kt +++ b/r2dbc-mysql/src/test/java/com/github/jasync/r2dbc/mysql/JasyncRowTest.kt @@ -4,7 +4,6 @@ import com.github.jasync.sql.db.RowData import io.mockk.every import io.mockk.mockk import org.junit.Test -import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue @@ -18,7 +17,7 @@ internal class JasyncRowTest { // Mock dependencies val rowData = mockk() val metadata = mockk() - + // Setup mock values for different types of data every { rowData["boolTrue"] } returns true every { rowData["boolFalse"] } returns false @@ -29,26 +28,26 @@ internal class JasyncRowTest { every { rowData[0] } returns true every { rowData[1] } returns 0 every { rowData[2] } returns "true" - + val row = JasyncRow(rowData, metadata) - + // Test conversion from Boolean to Boolean assertTrue(row.get("boolTrue", java.lang.Boolean::class.java) as Boolean) assertFalse(row.get("boolFalse", java.lang.Boolean::class.java) as Boolean) - + // Test conversion from Number to Boolean assertFalse(row.get("numZero", java.lang.Boolean::class.java) as Boolean) assertTrue(row.get("numOne", java.lang.Boolean::class.java) as Boolean) - + // Test conversion from String to Boolean assertTrue(row.get("stringTrue", java.lang.Boolean::class.java) as Boolean) assertFalse(row.get("stringFalse", java.lang.Boolean::class.java) as Boolean) - + // Test conversion from various types using index assertTrue(row.get(0, java.lang.Boolean::class.java) as Boolean) assertFalse(row.get(1, java.lang.Boolean::class.java) as Boolean) assertTrue(row.get(2, java.lang.Boolean::class.java) as Boolean) - + // Test conversion to primitive boolean - using Boolean class in Kotlin assertTrue(row.get("boolTrue", java.lang.Boolean::class.java) as Boolean) assertFalse(row.get("boolFalse", java.lang.Boolean::class.java) as Boolean)