Switch DBType to use the fully-qualified type name rather than a simple name

This commit is contained in:
Charles Nurse
2021-05-12 10:22:17 -07:00
parent c926fa0d27
commit 92dd8354ba
15 changed files with 43 additions and 18 deletions

View File

@ -135,7 +135,7 @@
var database = _databases.SingleOrDefault(d => d.Name == _databaseName); var database = _databases.SingleOrDefault(d => d.Name == _databaseName);
if (database != null) if (database != null)
{ {
_databaseConfigType = Type.GetType(database.Type); _databaseConfigType = Type.GetType(database.ControlType);
DatabaseConfigComponent = builder => DatabaseConfigComponent = builder =>
{ {
builder.OpenComponent(0, _databaseConfigType); builder.OpenComponent(0, _databaseConfigType);
@ -169,10 +169,12 @@
StateHasChanged(); StateHasChanged();
Uri uri = new Uri(NavigationManager.Uri); Uri uri = new Uri(NavigationManager.Uri);
var database = _databases.SingleOrDefault(d => d.Name == _databaseName);
var config = new InstallConfig var config = new InstallConfig
{ {
DatabaseType = _databaseName, DatabaseType = database.DBType,
ConnectionString = connectionString, ConnectionString = connectionString,
Aliases = uri.Authority, Aliases = uri.Authority,
HostEmail = _hostEmail, HostEmail = _hostEmail,

View File

@ -221,7 +221,7 @@ else
var database = _databases.SingleOrDefault(d => d.Name == _databaseName); var database = _databases.SingleOrDefault(d => d.Name == _databaseName);
if (database != null) if (database != null)
{ {
_databaseConfigType = Type.GetType(database.Type); _databaseConfigType = Type.GetType(database.ControlType);
DatabaseConfigComponent = builder => DatabaseConfigComponent = builder =>
{ {
builder.OpenComponent(0, _databaseConfigType); builder.OpenComponent(0, _databaseConfigType);
@ -301,9 +301,11 @@ else
{ {
connectionString = databaseConfigControl.GetConnectionString(); connectionString = databaseConfigControl.GetConnectionString();
} }
var database = _databases.SingleOrDefault(d => d.Name == _databaseName);
if (connectionString != "") if (connectionString != "")
{ {
config.DatabaseType = _databaseName; config.DatabaseType = database.DBType;
config.ConnectionString = connectionString; config.ConnectionString = connectionString;
config.HostPassword = _hostpassword; config.HostPassword = _hostpassword;
config.HostEmail = user.Email; config.HostEmail = user.Email;

View File

@ -18,6 +18,8 @@ namespace Oqtane.Database.MySQL
public override string Provider => "MySql.EntityFrameworkCore"; public override string Provider => "MySql.EntityFrameworkCore";
public override string TypeName => "Oqtane.Database.MySQL.MySQLDatabase, Oqtane.Database.MySQL";
public override OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name) public override OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name)
{ {
return table.Column<int>(name: name, nullable: false).Annotation("MySQL:ValueGenerationStrategy", MySQLValueGenerationStrategy.IdentityColumn); return table.Column<int>(name: name, nullable: false).Annotation("MySQL:ValueGenerationStrategy", MySQLValueGenerationStrategy.IdentityColumn);

View File

@ -26,6 +26,8 @@ namespace Oqtane.Database.PostgreSQL
public override string Provider => "Npgsql.EntityFrameworkCore.PostgreSQL"; public override string Provider => "Npgsql.EntityFrameworkCore.PostgreSQL";
public override string TypeName => "Oqtane.Database.PostgreSQL.PostgreSQLDatabase, Oqtane.Database.PostgreSQL";
public override OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name) public override OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name)
{ {
return table.Column<int>(name: name, nullable: false).Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityAlwaysColumn); return table.Column<int>(name: name, nullable: false).Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityAlwaysColumn);

View File

@ -6,5 +6,7 @@ namespace Oqtane.Database.SqlServer
private static string _name => "LocalDB"; private static string _name => "LocalDB";
public LocalDbDatabase() :base(_name, _friendlyName) { } public LocalDbDatabase() :base(_name, _friendlyName) { }
public override string TypeName => "Oqtane.Database.SqlServer.LocalDbDatabase, Oqtane.Database.SqlServer";
} }
} }

View File

@ -6,6 +6,8 @@ namespace Oqtane.Database.SqlServer
private static string _name => "SqlServer"; private static string _name => "SqlServer";
public SqlServerDatabase() :base(_name, _friendlyName) { } public SqlServerDatabase() : base(_name, _friendlyName) { }
public override string TypeName => "Oqtane.Database.SqlServer.SqlServerDatabase, Oqtane.Database.SqlServer";
} }
} }

View File

@ -18,6 +18,8 @@ namespace Oqtane.Database.Sqlite
public override string Provider => "Microsoft.EntityFrameworkCore.Sqlite"; public override string Provider => "Microsoft.EntityFrameworkCore.Sqlite";
public override string TypeName => "Oqtane.Database.Sqlite.SqliteDatabase, Oqtane.Database.Sqlite";
public override OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name) public override OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name)
{ {
return table.Column<int>(name: name, nullable: false).Annotation("Sqlite:Autoincrement", true); return table.Column<int>(name: name, nullable: false).Annotation("Sqlite:Autoincrement", true);

View File

@ -19,31 +19,36 @@ namespace Oqtane.Controllers
{ {
Name = "LocalDB", Name = "LocalDB",
FriendlyName = "Local Database", FriendlyName = "Local Database",
Type = "Oqtane.Installer.Controls.LocalDBConfig, Oqtane.Client" ControlType = "Oqtane.Installer.Controls.LocalDBConfig, Oqtane.Client",
DBType = "Oqtane.Database.SqlServer.LocalDbDatabase, Oqtane.Database.SqlServer"
}, },
new() new()
{ {
Name = "SqlServer", Name = "SqlServer",
FriendlyName = "SQL Server", FriendlyName = "SQL Server",
Type = "Oqtane.Installer.Controls.SqlServerConfig, Oqtane.Client" ControlType = "Oqtane.Installer.Controls.SqlServerConfig, Oqtane.Client",
DBType = "Oqtane.Database.SqlServer.SqlServerDatabase, Oqtane.Database.SqlServer"
}, },
new() new()
{ {
Name = "Sqlite", Name = "Sqlite",
FriendlyName = "Sqlite", FriendlyName = "Sqlite",
Type = "Oqtane.Installer.Controls.SqliteConfig, Oqtane.Client" ControlType = "Oqtane.Installer.Controls.SqliteConfig, Oqtane.Client",
DBType = "Oqtane.Database.Sqlite.SqliteDatabase, Oqtane.Database.Sqlite"
}, },
new() new()
{ {
Name = "MySQL", Name = "MySQL",
FriendlyName = "MySQL", FriendlyName = "MySQL",
Type = "Oqtane.Installer.Controls.MySQLConfig, Oqtane.Client" ControlType = "Oqtane.Installer.Controls.MySQLConfig, Oqtane.Client",
DBType = "Oqtane.Database.MySQL.MySQLDatabase, Oqtane.Database.MySQL"
}, },
new() new()
{ {
Name = "PostgreSQL", Name = "PostgreSQL",
FriendlyName = "PostgreSQL", FriendlyName = "PostgreSQL",
Type = "Oqtane.Installer.Controls.PostGreSQLConfig, Oqtane.Client" ControlType = "Oqtane.Installer.Controls.PostGreSQLConfig, Oqtane.Client",
DBType = "Oqtane.Database.PostgreSQL.PostgreSQLDatabase, Oqtane.Database.PostgreSQL"
} }
}; };
return databases; return databases;

View File

@ -191,7 +191,7 @@ namespace Oqtane.Infrastructure
{ {
var databases = scope.ServiceProvider.GetServices<IOqtaneDatabase>(); var databases = scope.ServiceProvider.GetServices<IOqtaneDatabase>();
using (var dbc = new DbContext(new DbContextOptionsBuilder().UseOqtaneDatabase(databases.Single(d => d.Name == databaseType), connectionString).Options)) using (var dbc = new DbContext(new DbContextOptionsBuilder().UseOqtaneDatabase(databases.Single(d => d.TypeName == databaseType), connectionString).Options))
{ {
// create empty database if it does not exist // create empty database if it does not exist
dbc.Database.EnsureCreated(); dbc.Database.EnsureCreated();
@ -596,7 +596,7 @@ namespace Oqtane.Infrastructure
var databaseType = _config.GetSection(SettingKeys.DatabaseSection)[SettingKeys.DatabaseTypeKey]; var databaseType = _config.GetSection(SettingKeys.DatabaseSection)[SettingKeys.DatabaseTypeKey];
var connectionString = NormalizeConnectionString(_config.GetConnectionString(SettingKeys.ConnectionStringKey)); var connectionString = NormalizeConnectionString(_config.GetConnectionString(SettingKeys.ConnectionStringKey));
return new InstallationContext(databases.Single(d => d.Name == databaseType), connectionString); return new InstallationContext(databases.Single(d => d.TypeName == databaseType), connectionString);
} }
private string GetInstallationConfig(string key, string defaultValue) private string GetInstallationConfig(string key, string defaultValue)

View File

@ -84,7 +84,7 @@ namespace Oqtane.Repository
{ {
if (Databases != null) if (Databases != null)
{ {
optionsBuilder.UseOqtaneDatabase(Databases.Single(d => d.Name == _databaseType), _connectionString); optionsBuilder.UseOqtaneDatabase(Databases.Single(d => d.TypeName == _databaseType), _connectionString);
} }
else else
{ {
@ -101,7 +101,7 @@ namespace Oqtane.Repository
if (Databases != null) if (Databases != null)
{ {
var database = Databases.Single(d => d.Name == _databaseType); var database = Databases.Single(d => d.TypeName == _databaseType);
database.UpdateIdentityStoreTableNames(builder); database.UpdateIdentityStoreTableNames(builder);
} }

View File

@ -52,7 +52,7 @@ namespace Oqtane.Repository
{ {
if (Databases != null) if (Databases != null)
{ {
optionsBuilder.UseOqtaneDatabase(Databases.Single(d => d.Name == databaseType), connectionString); optionsBuilder.UseOqtaneDatabase(Databases.Single(d => d.TypeName == databaseType), connectionString);
} }
else else
{ {

View File

@ -80,13 +80,13 @@ namespace Oqtane.Repository
public IDataReader ExecuteReader(Tenant tenant, string query) public IDataReader ExecuteReader(Tenant tenant, string query)
{ {
var db = _databases.Single(d => d.Name == tenant.DBType); var db = _databases.Single(d => d.TypeName == tenant.DBType);
return db.ExecuteReader(tenant.DBConnectionString, query); return db.ExecuteReader(tenant.DBConnectionString, query);
} }
private int ExecuteNonQuery(string connectionString, string databaseType, string query) private int ExecuteNonQuery(string connectionString, string databaseType, string query)
{ {
var db = _databases.Single(d => d.Name == databaseType); var db = _databases.Single(d => d.TypeName == databaseType);
return db.ExecuteNonQuery(connectionString, query); return db.ExecuteNonQuery(connectionString, query);
} }

View File

@ -15,6 +15,8 @@ namespace Oqtane.Interfaces
public string Provider { get; } public string Provider { get; }
public string TypeName { get; }
public OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name); public OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name);
public string ConcatenateSql(params string[] values); public string ConcatenateSql(params string[] values);

View File

@ -6,6 +6,8 @@ namespace Oqtane.Models
public string Name { get; set; } public string Name { get; set; }
public string Type { get; set; } public string ControlType { get; set; }
public string DBType { get; set; }
} }
} }

View File

@ -23,6 +23,8 @@ namespace Oqtane.Shared
public abstract string Provider { get; } public abstract string Provider { get; }
public abstract string TypeName { get; }
public abstract OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name); public abstract OperationBuilder<AddColumnOperation> AddAutoIncrementColumn(ColumnsBuilder table, string name);
public virtual string ConcatenateSql(params string[] values) public virtual string ConcatenateSql(params string[] values)