fix(db): normalize document index names across MariaDB collations
MariaDB persistence qualification / mariadb (push) Failing after 8s

This commit is contained in:
cesnimda
2026-10-24 14:00:26 +02:00
parent 1a1b7c8221
commit 2b26953d6f
2 changed files with 181 additions and 7 deletions
@@ -59,8 +59,10 @@ public sealed class DocumentsIndexService(JobTrackerContext db)
var answers = HasAnswers(sqlite);
var recruiter = HasContent("j.RecruiterMessageDraft");
var tailored = HasContent("j.TailoredCvText");
// Startup-created tables can have different collations; keep the index's folded, accent-sensitive names compatible.
string Name(string value) => sqlite ? value : $"CONVERT({value} USING utf8mb4) COLLATE utf8mb4_bin";
var sources = $$"""
SELECT 'cv' AS Type, CAST(v.Id AS CHAR) AS ResourceId, v.Name AS Name, 'current' AS State,
SELECT 'cv' AS Type, CAST(v.Id AS CHAR) AS ResourceId, {{Name("v.Name")}} AS Name, 'current' AS State,
CASE WHEN v.IsPublic = 1 THEN 'public' ELSE 'private' END AS Visibility,
j.Id AS JobApplicationId, j.JobTitle AS JobTitle, c.Name AS CompanyName, j.IsDeleted AS JobIsDeleted,
CAST(v.UpdatedAtUtc AS CHAR) AS RawRecordedAt, 'updated-utc' AS DateKind,
@@ -73,7 +75,7 @@ public sealed class DocumentsIndexService(JobTrackerContext db)
LEFT JOIN `Companies` c ON c.Id = j.CompanyId AND c.OwnerUserId = {0}
WHERE v.OwnerUserId = {0}
UNION ALL
SELECT 'cover-letter', CAST(j.Id AS CHAR), j.JobTitle, 'draft', NULL,
SELECT 'cover-letter', CAST(j.Id AS CHAR), {{Name("j.JobTitle")}}, 'draft', NULL,
j.Id, j.JobTitle, c.Name, j.IsDeleted, {{letterDate}},
CASE WHEN {{letterDate}} IS NULL THEN 'unknown' ELSE 'history-recorded-utc' END,
{{letterVersion}}, {{letterCount}}, NULL, NULL, NULL, NULL,
@@ -82,14 +84,14 @@ public sealed class DocumentsIndexService(JobTrackerContext db)
LEFT JOIN `Companies` c ON c.Id = j.CompanyId AND c.OwnerUserId = {0}
WHERE j.OwnerUserId = {0} AND ({{letterContent}} OR {{letterCount}} > 0)
UNION ALL
SELECT 'application-material', CAST(j.Id AS CHAR), j.JobTitle, 'draft', NULL,
SELECT 'application-material', CAST(j.Id AS CHAR), {{Name("j.JobTitle")}}, 'draft', NULL,
j.Id, j.JobTitle, c.Name, j.IsDeleted, NULL, 'unknown',
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
FROM `JobApplications` j
LEFT JOIN `Companies` c ON c.Id = j.CompanyId AND c.OwnerUserId = {0}
WHERE j.OwnerUserId = {0} AND ({{answers}} OR {{recruiter}})
UNION ALL
SELECT 'tailored-cv', CAST(j.Id AS CHAR), j.JobTitle, 'draft', NULL,
SELECT 'tailored-cv', CAST(j.Id AS CHAR), {{Name("j.JobTitle")}}, 'draft', NULL,
j.Id, j.JobTitle, c.Name, j.IsDeleted,
CAST(COALESCE(d.LastEditedAtUtc, d.LastGeneratedAtUtc, j.TailoredCvUpdatedAt) AS CHAR),
CASE WHEN COALESCE(d.LastEditedAtUtc, d.LastGeneratedAtUtc, j.TailoredCvUpdatedAt) IS NULL THEN 'unknown' ELSE 'updated-utc' END,
@@ -99,14 +101,14 @@ public sealed class DocumentsIndexService(JobTrackerContext db)
LEFT JOIN `TailoredCvDrafts` d ON d.JobApplicationId = j.Id AND d.OwnerUserId = {0}
WHERE j.OwnerUserId = {0} AND (d.Id IS NOT NULL OR {{tailored}})
UNION ALL
SELECT 'attachment', CAST(a.Id AS CHAR), a.FileName, 'current', NULL,
SELECT 'attachment', CAST(a.Id AS CHAR), {{Name("a.FileName")}}, 'current', NULL,
j.Id, j.JobTitle, c.Name, j.IsDeleted, CAST(a.UploadDate AS CHAR), 'uploaded-local',
NULL, NULL, NULL, NULL, NULL, NULL, a.FileType, a.FileSize, a.Purpose, a.UseForAi, NULL, NULL, NULL
FROM `Attachments` a
JOIN `JobApplications` j ON j.Id = a.JobApplicationId AND j.OwnerUserId = {0}
LEFT JOIN `Companies` c ON c.Id = j.CompanyId AND c.OwnerUserId = {0}
UNION ALL
SELECT 'submitted-package', CAST(p.Id AS CHAR), COALESCE(p.CvVariantName, j.JobTitle), 'frozen', NULL,
SELECT 'submitted-package', CAST(p.Id AS CHAR), {{Name("COALESCE(p.CvVariantName, j.JobTitle)")}}, 'frozen', NULL,
j.Id, j.JobTitle, c.Name, j.IsDeleted, CAST(p.CreatedAtUtc AS CHAR), 'captured-utc',
p.Version, NULL, (SELECT COUNT(*) FROM `SubmittedPackageAttachments` a WHERE a.SubmittedApplicationPackageId = p.Id),
p.CvVariantId, p.CvVariantName, p.CvVariantVersion, NULL, NULL, NULL, NULL, NULL, NULL, NULL
@@ -115,7 +117,7 @@ public sealed class DocumentsIndexService(JobTrackerContext db)
LEFT JOIN `Companies` c ON c.Id = j.CompanyId AND c.OwnerUserId = {0}
WHERE p.OwnerUserId = {0}
UNION ALL
SELECT 'email-draft', CAST(d.Id AS CHAR), d.Subject, 'draft', NULL,
SELECT 'email-draft', CAST(d.Id AS CHAR), {{Name("d.Subject")}}, 'draft', NULL,
j.Id, j.JobTitle, c.Name, j.IsDeleted, CAST(d.UpdatedAtUtc AS CHAR), 'updated-utc',
d.Revision, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, d.Provider, NULL, NULL
FROM `EmailDrafts` d