summaryrefslogtreecommitdiff
path: root/util/src/main/kotlin/DB.kt
diff options
context:
space:
mode:
authorAntoine A <>2023-11-20 15:09:25 +0000
committerAntoine A <>2023-11-20 15:10:37 +0000
commit427e71c9586c8cbf4e71b7abf268a85c8e03bab2 (patch)
tree8763cbb20f43fec49a2b1d7129647e424a6efcdc /util/src/main/kotlin/DB.kt
parent5f0c56d06e7cc1832eb019f046921b1acecf3752 (diff)
downloadlibeufin-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.kt13
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}")