From 7d6073c452dd7444af00c2884cce8d0c080a8574 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Thu, 1 Feb 2024 13:46:23 -0800 Subject: [PATCH] Make Sqlite database name configurable (#15209) --- .../Workflows/Activities/SetupTenantTask.cs | 1 - .../Setup/SetupConstants.cs | 1 + .../OrchardCoreBuilderExtensions.cs | 2 +- .../OrchardCore.Data.YesSql/SqliteHelper.cs | 21 +++++++++++++------ .../OrchardCore.Setup.Core/SetupService.cs | 5 +++++ 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/OrchardCore.Modules/OrchardCore.Tenants/Workflows/Activities/SetupTenantTask.cs b/src/OrchardCore.Modules/OrchardCore.Tenants/Workflows/Activities/SetupTenantTask.cs index 50f5bcd13b4..2856346634b 100644 --- a/src/OrchardCore.Modules/OrchardCore.Tenants/Workflows/Activities/SetupTenantTask.cs +++ b/src/OrchardCore.Modules/OrchardCore.Tenants/Workflows/Activities/SetupTenantTask.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; diff --git a/src/OrchardCore/OrchardCore.Abstractions/Setup/SetupConstants.cs b/src/OrchardCore/OrchardCore.Abstractions/Setup/SetupConstants.cs index c00c9a80f69..3b84dfda5ec 100644 --- a/src/OrchardCore/OrchardCore.Abstractions/Setup/SetupConstants.cs +++ b/src/OrchardCore/OrchardCore.Abstractions/Setup/SetupConstants.cs @@ -10,6 +10,7 @@ public static class SetupConstants public const string DatabaseProvider = "DatabaseProvider"; public const string DatabaseConnectionString = "DatabaseConnectionString"; public const string DatabaseTablePrefix = "DatabaseTablePrefix"; + public const string DatabaseName = "DatabaseName"; public const string DatabaseSchema = "DatabaseSchema"; public const string SiteTimeZone = "SiteTimeZone"; public const string FeatureProfile = "FeatureProfile"; diff --git a/src/OrchardCore/OrchardCore.Data.YesSql/OrchardCoreBuilderExtensions.cs b/src/OrchardCore/OrchardCore.Data.YesSql/OrchardCoreBuilderExtensions.cs index d00bb6d8585..29f043c1a58 100644 --- a/src/OrchardCore/OrchardCore.Data.YesSql/OrchardCoreBuilderExtensions.cs +++ b/src/OrchardCore/OrchardCore.Data.YesSql/OrchardCoreBuilderExtensions.cs @@ -79,7 +79,7 @@ public static OrchardCoreBuilder AddDataAccess(this OrchardCoreBuilder builder) var databaseFolder = SqliteHelper.GetDatabaseFolder(shellOptions, shellSettings.Name); Directory.CreateDirectory(databaseFolder); - var connectionString = SqliteHelper.GetConnectionString(sqliteOptions, databaseFolder); + var connectionString = SqliteHelper.GetConnectionString(sqliteOptions, databaseFolder, shellSettings["DatabaseName"]); storeConfiguration .UseSqLite(connectionString, IsolationLevel.ReadUncommitted) .UseDefaultIdGenerator(); diff --git a/src/OrchardCore/OrchardCore.Data.YesSql/SqliteHelper.cs b/src/OrchardCore/OrchardCore.Data.YesSql/SqliteHelper.cs index 567bc80227e..999a4cc5a1e 100644 --- a/src/OrchardCore/OrchardCore.Data.YesSql/SqliteHelper.cs +++ b/src/OrchardCore/OrchardCore.Data.YesSql/SqliteHelper.cs @@ -6,18 +6,27 @@ namespace OrchardCore.Data; public static class SqliteHelper { - public static string GetConnectionString(SqliteOptions sqliteOptions, ShellOptions shellOptions, string shellName) => - GetConnectionString(sqliteOptions, GetDatabaseFolder(shellOptions, shellName)); + public static string GetConnectionString(SqliteOptions sqliteOptions, ShellOptions shellOptions, string shellName, string databaseName = "") + => GetConnectionString(sqliteOptions, GetDatabaseFolder(shellOptions, shellName), databaseName); - public static string GetConnectionString(SqliteOptions sqliteOptions, string databaseFolder) => - new SqliteConnectionStringBuilder + public static string GetConnectionString(SqliteOptions sqliteOptions, string databaseFolder, string databaseName = "") + { + if (string.IsNullOrEmpty(databaseName)) { - DataSource = Path.Combine(databaseFolder, "yessql.db"), + // For backward compatibility, we assume that the database name is 'yessql.db'. + databaseName = "yessql.db"; + } + + return new SqliteConnectionStringBuilder + { + DataSource = string.IsNullOrEmpty(databaseFolder) + ? databaseName + : Path.Combine(databaseFolder, databaseName), Cache = SqliteCacheMode.Shared, Pooling = sqliteOptions.UseConnectionPooling } .ToString(); - + } public static string GetDatabaseFolder(ShellOptions shellOptions, string shellName) => Path.Combine(shellOptions.ShellsApplicationDataPath, shellOptions.ShellsContainerName, shellName); } diff --git a/src/OrchardCore/OrchardCore.Setup.Core/SetupService.cs b/src/OrchardCore/OrchardCore.Setup.Core/SetupService.cs index 08056f171a6..e299c9f5eb4 100644 --- a/src/OrchardCore/OrchardCore.Setup.Core/SetupService.cs +++ b/src/OrchardCore/OrchardCore.Setup.Core/SetupService.cs @@ -161,6 +161,11 @@ private async Task SetupInternalAsync(SetupContext context) shellSettings["Schema"] = context.Properties.TryGetValue(SetupConstants.DatabaseSchema, out var schema) ? schema?.ToString() : null; } + if (shellSettings["DatabaseProvider"] == DatabaseProviderValue.Sqlite && string.IsNullOrEmpty(shellSettings["DatabaseName"])) + { + shellSettings["DatabaseName"] = context.Properties.TryGetValue(SetupConstants.DatabaseName, out var dbName) ? dbName?.ToString() : "OrchardCore.db"; + } + var validationContext = new DbConnectionValidatorContext(shellSettings); switch (await _dbConnectionValidator.ValidateAsync(validationContext)) {