diff --git a/build.gradle.kts b/build.gradle.kts index 42c2821d..7d5a26fb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -28,7 +28,7 @@ allprojects { } } - version = "0.0.4" + version = "0.0.5" group = "io.github.ustudiocompany" configurations.all { diff --git a/library/jdbc/core/api/jdbc-core-library.api b/library/jdbc/core/api/jdbc-core-library.api index ddbae08d..db6ac97f 100644 --- a/library/jdbc/core/api/jdbc-core-library.api +++ b/library/jdbc/core/api/jdbc-core-library.api @@ -72,6 +72,7 @@ public final class io/github/ustudiocompany/uframework/jdbc/sql/ParametrizedSql public synthetic fun (Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getParameters ()Ljava/util/Map; public final fun getValue ()Ljava/lang/String; + public fun toString ()Ljava/lang/String; } public final class io/github/ustudiocompany/uframework/jdbc/sql/ParametrizedSql$Companion { diff --git a/library/jdbc/core/build.gradle.kts b/library/jdbc/core/build.gradle.kts index 8d890fd1..ba4d62b5 100644 --- a/library/jdbc/core/build.gradle.kts +++ b/library/jdbc/core/build.gradle.kts @@ -7,9 +7,12 @@ plugins { dependencies { implementation(project(":failure-library")) + implementation(project(":logging-slf4j-extension-library")) implementation(libs.airflux.commons.types) { isChanging = true } implementation(libs.postgresql) + implementation(libs.slf4j.api) + implementation(libs.logback.classic) /* Tests */ testImplementation(project(":jdbc-kotest-matchers-library")) diff --git a/library/jdbc/core/src/main/kotlin/io/github/ustudiocompany/uframework/jdbc/sql/ParametrizedSql.kt b/library/jdbc/core/src/main/kotlin/io/github/ustudiocompany/uframework/jdbc/sql/ParametrizedSql.kt index 84925520..df569e88 100644 --- a/library/jdbc/core/src/main/kotlin/io/github/ustudiocompany/uframework/jdbc/sql/ParametrizedSql.kt +++ b/library/jdbc/core/src/main/kotlin/io/github/ustudiocompany/uframework/jdbc/sql/ParametrizedSql.kt @@ -5,6 +5,11 @@ public class ParametrizedSql private constructor( public val parameters: Map ) { + override fun toString(): String { + return "Sql: '${value.trim()}' \n " + + "Parameters: ${parameters.entries.joinToString(", ") { "${it.key}: ${it.value}" }}" + } + public companion object { private const val PARAMETER_NAME_PLACEHOLDER = "?" private const val PREFIX_PARAMETER_NAME = ':' diff --git a/library/jdbc/core/src/main/kotlin/io/github/ustudiocompany/uframework/jdbc/transaction/TransactionInstance.kt b/library/jdbc/core/src/main/kotlin/io/github/ustudiocompany/uframework/jdbc/transaction/TransactionInstance.kt index a3559eb4..a65fdd33 100644 --- a/library/jdbc/core/src/main/kotlin/io/github/ustudiocompany/uframework/jdbc/transaction/TransactionInstance.kt +++ b/library/jdbc/core/src/main/kotlin/io/github/ustudiocompany/uframework/jdbc/transaction/TransactionInstance.kt @@ -1,3 +1,5 @@ +@file:Suppress("ImportOrdering") + package io.github.ustudiocompany.uframework.jdbc.transaction import io.github.airflux.commons.types.maybe.Maybe @@ -12,28 +14,41 @@ import io.github.ustudiocompany.uframework.jdbc.statement.JDBCNamedPreparedState import io.github.ustudiocompany.uframework.jdbc.statement.JDBCPreparedStatement import io.github.ustudiocompany.uframework.jdbc.statement.JDBCPreparedStatementInstance import io.github.ustudiocompany.uframework.jdbc.statement.JDBCStatement +import io.github.ustudiocompany.uframework.telemetry.logging.logger.slf4jextension.debug +import io.github.ustudiocompany.uframework.telemetry.logging.logger.slf4jextension.error +import io.github.ustudiocompany.uframework.telemetry.logging.logger.slf4jextension.warn import java.sql.Connection import java.sql.PreparedStatement +import org.slf4j.LoggerFactory internal class TransactionInstance( private val unwrappedConnection: Connection, ) : Transaction, JDBCConnection { + private val logger = LoggerFactory.getLogger(TransactionInstance::class.java) + override val connection: JDBCConnection get() = this override fun commit(): Maybe = Maybe.catch( catch = { exception -> - JDBCError(description = "Error while committing transaction", exception = exception) + val errorDescription = "Error while committing transaction." + logger.error { errorDescription } + JDBCError(description = errorDescription, exception = exception) }, block = { unwrappedConnection.commit() } ) override fun rollback(): Maybe = Maybe.catch( catch = { exception -> - JDBCError(description = "Error while rolling back transaction", exception = exception) + val errorDescription = "Error while rolling back transaction." + logger.error { errorDescription } + JDBCError(description = errorDescription, exception = exception) }, - block = { unwrappedConnection.rollback() } + block = { + logger.warn { "Transaction would be rolled back." } + unwrappedConnection.rollback() + } ) override fun close() { @@ -48,18 +63,22 @@ internal class TransactionInstance( override fun preparedStatement( sql: String, timeout: JDBCStatement.Timeout - ): JDBCResult = - prepareStatement(sql, timeout) + ): JDBCResult { + logger.debug { "Executing Query: \n $sql" } + return prepareStatement(sql, timeout) .map { statement -> JDBCPreparedStatementInstance(statement = statement) } + } override fun namedPreparedStatement( sql: ParametrizedSql, timeout: JDBCStatement.Timeout - ): JDBCResult = - prepareStatement(sql.value, timeout) + ): JDBCResult { + logger.debug { "Executing ParametrizedSql: \n $sql" } + return prepareStatement(sql.value, timeout) .map { statement -> JDBCNamedPreparedStatementInstance(parameters = sql.parameters, statement = statement) } + } private fun prepareStatement( sql: String,