Skip to content

Commit a8552b6

Browse files
committed
fix(sql): Catch all SQLExceptions right way
1 parent bdd79e0 commit a8552b6

File tree

5 files changed

+17
-14
lines changed

5 files changed

+17
-14
lines changed

core/src/main/kotlin/internal/data/repository/InventoriesRepository.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import ru.endlesscode.inventory.internal.data.sql.InventoryDao
2828
import ru.endlesscode.inventory.internal.data.sql.entity.toDomain
2929
import ru.endlesscode.inventory.internal.data.sql.entity.toSqlEntity
3030
import ru.endlesscode.inventory.internal.di.DI
31+
import ru.endlesscode.inventory.internal.util.Log
3132
import java.util.*
3233

3334
internal class InventoriesRepository(
@@ -55,7 +56,12 @@ internal class InventoriesRepository(
5556

5657
fun loadInventories(player: Player) {
5758
scheduler.runAsync {
58-
val holderInventories = dao.getInventories(player.uniqueId).asSequence()
59+
val holderInventories = dao.getInventories(player.uniqueId)
60+
.getOrElse { exception ->
61+
Log.e("Error on loading inventories of player ${player.name}", exception)
62+
return@runAsync
63+
}
64+
.asSequence()
5965
.map { it.toDomain(getLayout(it.layout), player) }
6066
.associateBy { it.id }
6167

core/src/main/kotlin/internal/data/sql/BaseDao.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ internal abstract class BaseDao(private var dataSource: DataSource) {
4545
}
4646
}
4747

48-
protected inline fun <T> statement(sql: String, crossinline block: PreparedStatement.() -> T): T {
48+
protected inline fun <T> statement(sql: String, crossinline block: PreparedStatement.() -> T): Result<T> {
4949
return dataSource.statement(sql.trimIndent(), block)
5050
}
5151

core/src/main/kotlin/internal/data/sql/InventoryDao.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ internal class InventoryDao(dataSource: DataSource) : BaseDao(dataSource) {
7474
}
7575
}
7676

77-
fun getInventories(holderId: UUID): List<InventorySqlEntity> {
77+
fun getInventories(holderId: UUID): Result<List<InventorySqlEntity>> {
7878
return statement(
7979
"""
8080
SELECT $INVENTORIES.*

core/src/main/kotlin/internal/data/sql/Jdbc.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,16 @@ package ru.endlesscode.inventory.internal.data.sql
2222
import java.sql.Connection
2323
import java.sql.PreparedStatement
2424
import java.sql.ResultSet
25+
import java.sql.SQLException
2526
import javax.sql.DataSource
2627

27-
internal inline fun <T> DataSource.statement(sql: String, block: PreparedStatement.() -> T): T {
28+
internal inline fun <T> DataSource.statement(sql: String, block: PreparedStatement.() -> T): Result<T> {
2829
return connection.use { it.statement(sql, block) }
2930
}
3031

31-
internal inline fun <T> Connection.statement(sql: String, block: PreparedStatement.() -> T): T {
32-
return prepareStatement(sql).use(block)
32+
internal inline fun <T> Connection.statement(sql: String, block: PreparedStatement.() -> T): Result<T> {
33+
return runCatching { prepareStatement(sql).use(block) }
34+
.onFailure { exception -> if (exception !is SQLException) throw exception }
3335
}
3436

3537
internal fun ResultSet.asSequence(): Sequence<ResultSet> = sequence {

core/src/main/kotlin/internal/data/sql/MainTableDao.kt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
package ru.endlesscode.inventory.internal.data.sql
2121

22-
import java.sql.SQLException
2322
import javax.sql.DataSource
2423

2524
// language=SQL
@@ -38,13 +37,9 @@ internal class MainTableDao(dataSource: DataSource) : BaseDao(dataSource) {
3837
LIMIT 1;
3938
"""
4039
) {
41-
try {
42-
val resultSet = executeQuery()
43-
if (resultSet.next()) resultSet.getInt(COLUMN_VERSION) else -1
44-
} catch (_: SQLException) {
45-
-1
46-
}
47-
}
40+
val resultSet = executeQuery()
41+
if (resultSet.next()) resultSet.getInt(COLUMN_VERSION) else -1
42+
}.getOrElse { -1 }
4843
}
4944

5045
private companion object {

0 commit comments

Comments
 (0)