fix: guard legacy ownership claim on mariadb startup
This commit is contained in:
@@ -723,11 +723,62 @@ CREATE TABLE IF NOT EXISTS "GmailConnections" (
|
||||
var admin = users.FindByEmailAsync(adminEmail).GetAwaiter().GetResult();
|
||||
if (admin is not null)
|
||||
{
|
||||
db.Database.ExecuteSqlRaw(
|
||||
"UPDATE Companies SET OwnerUserId = {0} WHERE OwnerUserId IS NULL;" +
|
||||
"UPDATE JobApplications SET OwnerUserId = {0} WHERE OwnerUserId IS NULL;",
|
||||
admin.Id
|
||||
);
|
||||
try
|
||||
{
|
||||
using var conn = db.Database.GetDbConnection();
|
||||
conn.Open();
|
||||
|
||||
static bool ColumnExists(DbConnection c, string providerName, string table, string column)
|
||||
{
|
||||
using var cmd = c.CreateCommand();
|
||||
if (providerName is "mysql" or "mariadb")
|
||||
{
|
||||
var databaseName = c.Database;
|
||||
cmd.CommandText = "SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = @table AND COLUMN_NAME = @column LIMIT 1;";
|
||||
|
||||
var schemaParam = cmd.CreateParameter();
|
||||
schemaParam.ParameterName = "@schema";
|
||||
schemaParam.Value = databaseName;
|
||||
cmd.Parameters.Add(schemaParam);
|
||||
|
||||
var tableParam = cmd.CreateParameter();
|
||||
tableParam.ParameterName = "@table";
|
||||
tableParam.Value = table;
|
||||
cmd.Parameters.Add(tableParam);
|
||||
|
||||
var columnParam = cmd.CreateParameter();
|
||||
columnParam.ParameterName = "@column";
|
||||
columnParam.Value = column;
|
||||
cmd.Parameters.Add(columnParam);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd.CommandText = $"SELECT 1 FROM pragma_table_info('{table}') WHERE name = '{column}' LIMIT 1;";
|
||||
}
|
||||
|
||||
return cmd.ExecuteScalar() is not null;
|
||||
}
|
||||
|
||||
var companyOwnershipExists = ColumnExists(conn, provider, "Companies", "OwnerUserId");
|
||||
var jobOwnershipExists = ColumnExists(conn, provider, "JobApplications", "OwnerUserId");
|
||||
|
||||
if (companyOwnershipExists || jobOwnershipExists)
|
||||
{
|
||||
if (companyOwnershipExists)
|
||||
{
|
||||
db.Database.ExecuteSqlRaw("UPDATE Companies SET OwnerUserId = {0} WHERE OwnerUserId IS NULL;", admin.Id);
|
||||
}
|
||||
|
||||
if (jobOwnershipExists)
|
||||
{
|
||||
db.Database.ExecuteSqlRaw("UPDATE JobApplications SET OwnerUserId = {0} WHERE OwnerUserId IS NULL;", admin.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
app.Logger.LogWarning(ex, "Skipping legacy ownership claim because the current schema does not support it yet.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user