From 109fb79816d7992f7e284acde6738dde04d43e62 Mon Sep 17 00:00:00 2001 From: oshai Date: Mon, 4 Sep 2023 02:28:12 +0300 Subject: [PATCH 1/3] r2dbc: parse duration when string option Fix issue #412 --- .../main/java/MysqlConnectionFactoryProvider.kt | 16 ++++++++++++++-- .../mysql/MysqlConnectionFactoryProviderTest.kt | 12 ++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/r2dbc-mysql/src/main/java/MysqlConnectionFactoryProvider.kt b/r2dbc-mysql/src/main/java/MysqlConnectionFactoryProvider.kt index 38ea337c..67f3a07f 100644 --- a/r2dbc-mysql/src/main/java/MysqlConnectionFactoryProvider.kt +++ b/r2dbc-mysql/src/main/java/MysqlConnectionFactoryProvider.kt @@ -77,8 +77,8 @@ class MysqlConnectionFactoryProvider : ConnectionFactoryProvider { password = connectionFactoryOptions.getValue(PASSWORD)?.toString(), database = connectionFactoryOptions.getValue(DATABASE) as String?, applicationName = connectionFactoryOptions.getValue(APPLICATION_NAME) as String?, - connectionTimeout = (connectionFactoryOptions.getValue(CONNECT_TIMEOUT) as Duration?)?.toMillis()?.toInt() ?: 5000, - queryTimeout = connectionFactoryOptions.getValue(STATEMENT_TIMEOUT) as Duration?, + connectionTimeout = connectionFactoryOptions.getValue(CONNECT_TIMEOUT)?.parseDuration()?.toMillis()?.toInt() ?: 5000, + queryTimeout = connectionFactoryOptions.getValue(STATEMENT_TIMEOUT)?.parseDuration(), ssl = MysqlSSLConfigurationFactory.create(connectionFactoryOptions), rsaPublicKey = (connectionFactoryOptions.getValue(SERVER_RSA_PUBLIC_KEY_FILE) as String?)?.let { Paths.get(it) } ) @@ -97,3 +97,15 @@ class MysqlConnectionFactoryProvider : ConnectionFactoryProvider { override fun getDriver(): String = MYSQL_DRIVER } + +private fun Any.parseDuration(): Duration { + return when (this) { + is Duration -> { + this + } + is String -> { + Duration.parse(this) + } + else -> throw Exception("cant parse $this to Duration") + } +} diff --git a/r2dbc-mysql/src/test/java/com/github/jasync/r2dbc/mysql/MysqlConnectionFactoryProviderTest.kt b/r2dbc-mysql/src/test/java/com/github/jasync/r2dbc/mysql/MysqlConnectionFactoryProviderTest.kt index 24edfcf5..63753f6a 100644 --- a/r2dbc-mysql/src/test/java/com/github/jasync/r2dbc/mysql/MysqlConnectionFactoryProviderTest.kt +++ b/r2dbc-mysql/src/test/java/com/github/jasync/r2dbc/mysql/MysqlConnectionFactoryProviderTest.kt @@ -4,6 +4,7 @@ import com.github.jasync.sql.db.SSLConfiguration import io.r2dbc.spi.ConnectionFactoryOptions import org.junit.Assert.assertEquals import org.junit.Test +import java.time.Duration class MysqlConnectionFactoryProviderTest { @@ -63,4 +64,15 @@ class MysqlConnectionFactoryProviderTest { // then assertEquals("rsa.pem", result.mySQLConnectionFactory.configuration.rsaPublicKey.toString()) } + + @Test + fun shouldUseTimeoutAsString() { + val options = ConnectionFactoryOptions.parse("r2dbc:mysql://user@host/db?connectTimeout=PT3S") + + // when + val result = provider.create(options) + + // then + assertEquals(Duration.parse("PT3S").toMillis().toInt(), result.mySQLConnectionFactory.configuration.connectionTimeout) + } } From 3d899dd91a04298f72971b351ed7270dd979f532 Mon Sep 17 00:00:00 2001 From: oshai Date: Mon, 4 Sep 2023 02:11:01 +0300 Subject: [PATCH 2/3] r2dbc: don't change autocommit state when starting a transaction Fix issue #413 --- r2dbc-mysql/src/main/java/JasyncClientConnection.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/r2dbc-mysql/src/main/java/JasyncClientConnection.kt b/r2dbc-mysql/src/main/java/JasyncClientConnection.kt index 456d6d99..901821e5 100644 --- a/r2dbc-mysql/src/main/java/JasyncClientConnection.kt +++ b/r2dbc-mysql/src/main/java/JasyncClientConnection.kt @@ -43,8 +43,6 @@ class JasyncClientConnection( override fun beginTransaction(definition: TransactionDefinition): Publisher { return Mono.defer { - val setAutoCommit = Mono.from(setAutoCommit(false)) - val setLockWaitTimeout = Mono.justOrEmpty(definition.getAttribute(TransactionDefinition.LOCK_WAIT_TIMEOUT)) .flatMap { timeout -> Mono.from(setLockWaitTimeout(timeout)) } @@ -53,8 +51,7 @@ class JasyncClientConnection( val startTransaction = Mono.from(beginTransaction()) - return@defer Mono.from(setAutoCommit) - .then(setLockWaitTimeout) + return@defer Mono.from(setLockWaitTimeout) .then(changeIsolationLevel) .then(startTransaction) .then() From 06bedd16d37c0e606c6da6ebfed45a87eb7084aa Mon Sep 17 00:00:00 2001 From: oshai Date: Tue, 5 Sep 2023 00:03:02 +0300 Subject: [PATCH 3/3] bump version to 2.2.5 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index eba2e35a..19635393 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -24,7 +24,7 @@ apply(plugin = "io.github.gradle-nexus.publish-plugin") allprojects { group = "com.github.jasync-sql" - version = "2.2.4" + version = "2.2.5" apply(plugin = "kotlin") apply(plugin = "maven-publish")