diff --git a/src/Altinn.Authorization.ServiceDefaults/src/ServiceDefaults.Npgsql.Yuniql/YuniqlDatabaseMigrator.cs b/src/Altinn.Authorization.ServiceDefaults/src/ServiceDefaults.Npgsql.Yuniql/YuniqlDatabaseMigrator.cs index 236ae73..0a183a2 100644 --- a/src/Altinn.Authorization.ServiceDefaults/src/ServiceDefaults.Npgsql.Yuniql/YuniqlDatabaseMigrator.cs +++ b/src/Altinn.Authorization.ServiceDefaults/src/ServiceDefaults.Npgsql.Yuniql/YuniqlDatabaseMigrator.cs @@ -1,4 +1,5 @@ using Altinn.Authorization.ServiceDefaults.Npgsql.Migration; +using CommunityToolkit.Diagnostics; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Logging; @@ -72,7 +73,7 @@ private void MigrateDatabaseSync(string connectionString, ITraceService traceSer config.Environment = options.Environment; config.MetaSchemaName = options.MigrationsTable.Schema; config.MetaTableName = options.MigrationsTable.Name; - config.TransactionMode = "session"; + config.TransactionMode = GetTransactionMode(options.TransactionMode); config.IsContinueAfterFailure = null; config.IsRequiredClearedDraft = false; config.IsForced = false; @@ -150,6 +151,15 @@ Cancelling a running migration has the potential to corrupt the process. } } + private static string GetTransactionMode(YuniqlTransactionMode mode) + => mode switch + { + YuniqlTransactionMode.None => TRANSACTION_MODE.NONE, + YuniqlTransactionMode.Version => TRANSACTION_MODE.VERSION, + YuniqlTransactionMode.Session => TRANSACTION_MODE.SESSION, + _ => ThrowHelper.ThrowArgumentOutOfRangeException(nameof(mode)), + }; + private Workspace ResolveWorkspace(YuniqlDatabaseMigratorOptions options) { if (options.WorkspaceFileProvider is null) diff --git a/src/Altinn.Authorization.ServiceDefaults/src/ServiceDefaults.Npgsql.Yuniql/YuniqlDatabaseMigratorOptions.cs b/src/Altinn.Authorization.ServiceDefaults/src/ServiceDefaults.Npgsql.Yuniql/YuniqlDatabaseMigratorOptions.cs index 1afb3e7..e274d70 100644 --- a/src/Altinn.Authorization.ServiceDefaults/src/ServiceDefaults.Npgsql.Yuniql/YuniqlDatabaseMigratorOptions.cs +++ b/src/Altinn.Authorization.ServiceDefaults/src/ServiceDefaults.Npgsql.Yuniql/YuniqlDatabaseMigratorOptions.cs @@ -43,6 +43,11 @@ public sealed class YuniqlDatabaseMigratorOptions /// public bool DisableTracing { get; set; } + /// + /// Gets or sets the transaction mode. + /// + public YuniqlTransactionMode TransactionMode { get; set; } = YuniqlTransactionMode.Version; + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) { if (string.IsNullOrEmpty(Environment)) @@ -81,3 +86,24 @@ public sealed class VersionTableOptions /// public string? Schema { get; set; } } + +/// +/// Yuniql transaction mode. +/// +public enum YuniqlTransactionMode +{ + /// + /// No transaction will be used (transaction per statement). + /// + None, + + /// + /// A transaction will be used for each version. + /// + Version, + + /// + /// A transaction will be used for each session. + /// + Session, +}