diff options
author | MS <ms@taler.net> | 2023-12-01 11:41:29 +0100 |
---|---|---|
committer | MS <ms@taler.net> | 2023-12-01 11:41:29 +0100 |
commit | f699e3c07a88e901aa0d37044a2618639005ca7b (patch) | |
tree | 58023c1776028232cf4408326c65e9578839d19d | |
parent | 48ec12d433ea44c6e0130f7c4f364019dc8cb0d1 (diff) | |
download | libeufin-f699e3c07a88e901aa0d37044a2618639005ca7b.tar.gz libeufin-f699e3c07a88e901aa0d37044a2618639005ca7b.tar.bz2 libeufin-f699e3c07a88e901aa0d37044a2618639005ca7b.zip |
optionally loading versioning.sql
-rw-r--r-- | util/src/main/kotlin/DB.kt | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/util/src/main/kotlin/DB.kt b/util/src/main/kotlin/DB.kt index f3ed575c..ec7268f7 100644 --- a/util/src/main/kotlin/DB.kt +++ b/util/src/main/kotlin/DB.kt @@ -19,10 +19,6 @@ package tech.libeufin.util -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.async -import kotlinx.coroutines.coroutineScope -import net.taler.wallet.crypto.Base32Crockford import org.postgresql.ds.PGSimpleDataSource import org.postgresql.jdbc.PgConnection import org.postgresql.util.PSQLState @@ -191,17 +187,30 @@ fun PreparedStatement.executeProcedureViolation(): Boolean { } } +/** + * Only runs versioning.sql if the _v schema is not found. + * + * @param conn database connection + * @param cfg database configuration + */ +fun maybeApplyV(conn: PgConnection, cfg: DatabaseConfig) { + conn.transaction { + val checkVSchema = conn.prepareStatement( + "SELECT schema_name FROM information_schema.schemata WHERE schema_name = '_v'" + ) + if (!checkVSchema.executeQueryCheck()) { + logger.debug("_v schema not found, applying versioning.sql") + val sqlVersioning = File("${cfg.sqlDir}/versioning.sql").readText() + conn.execSQLUpdate(sqlVersioning) + } + } +} + // 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}") pgDataSource(cfg.dbConnStr).pgConnection().use { conn -> - conn.transaction { - // FIXME: evil hack, we should instead simply first check if _v exists! - val sqlVersioning = File("${cfg.sqlDir}/versioning.sql").readText() - try { - conn.execSQLUpdate(sqlVersioning) - } catch (e: SQLException) {} - } + maybeApplyV(conn, cfg) conn.transaction { val checkStmt = conn.prepareStatement("SELECT count(*) as n FROM _v.patches where patch_name = ?") |