diff options
author | Antoine A <> | 2023-11-20 15:09:25 +0000 |
---|---|---|
committer | Antoine A <> | 2023-11-20 15:10:37 +0000 |
commit | 427e71c9586c8cbf4e71b7abf268a85c8e03bab2 (patch) | |
tree | 8763cbb20f43fec49a2b1d7129647e424a6efcdc /util/src/main/kotlin/DB.kt | |
parent | 5f0c56d06e7cc1832eb019f046921b1acecf3752 (diff) | |
download | libeufin-427e71c9586c8cbf4e71b7abf268a85c8e03bab2.tar.gz libeufin-427e71c9586c8cbf4e71b7abf268a85c8e03bab2.tar.bz2 libeufin-427e71c9586c8cbf4e71b7abf268a85c8e03bab2.zip |
Bounce malformed incoming transactions and improve exchange transaction
logic
Diffstat (limited to 'util/src/main/kotlin/DB.kt')
-rw-r--r-- | util/src/main/kotlin/DB.kt | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/util/src/main/kotlin/DB.kt b/util/src/main/kotlin/DB.kt index 804944f3..ebc7d7e2 100644 --- a/util/src/main/kotlin/DB.kt +++ b/util/src/main/kotlin/DB.kt @@ -176,6 +176,19 @@ fun PreparedStatement.executeUpdateViolation(): Boolean { } } +fun PreparedStatement.executeProcedureViolation(): Boolean { + val savepoint = connection.setSavepoint(); + return try { + executeUpdate() + connection.releaseSavepoint(savepoint) + true + } catch (e: SQLException) { + connection.rollback(savepoint); + if (e.sqlState == "23505") return false // unique_violation + throw e // rethrowing, not to hide other types of errors. + } +} + // sqlFilePrefix is, for example, "libeufin-bank" or "libeufin-nexus" (no trailing dash). fun initializeDatabaseTables(cfg: DatabaseConfig, sqlFilePrefix: String) { logger.info("doing DB initialization, sqldir ${cfg.sqlDir}, dbConnStr ${cfg.dbConnStr}") |