fix: guard legacy ownership claim on mariadb startup

This commit is contained in:
cesnimda
2026-03-23 00:25:34 +01:00
parent 49b33c7b05
commit 8f5eab2fe4
+56 -5
View File
@@ -723,11 +723,62 @@ CREATE TABLE IF NOT EXISTS "GmailConnections" (
var admin = users.FindByEmailAsync(adminEmail).GetAwaiter().GetResult(); var admin = users.FindByEmailAsync(adminEmail).GetAwaiter().GetResult();
if (admin is not null) if (admin is not null)
{ {
db.Database.ExecuteSqlRaw( try
"UPDATE Companies SET OwnerUserId = {0} WHERE OwnerUserId IS NULL;" + {
"UPDATE JobApplications SET OwnerUserId = {0} WHERE OwnerUserId IS NULL;", using var conn = db.Database.GetDbConnection();
admin.Id 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.");
}
} }
} }
} }