Skip to content

Commit 36a5b42

Browse files
committed
Deploy error fix
1 parent 05a0bf2 commit 36a5b42

1 file changed

Lines changed: 46 additions & 11 deletions

File tree

  • prisma/migrations/20260606120000_add_unique_tester_name_version

prisma/migrations/20260606120000_add_unique_tester_name_version/migration.sql

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
-- Existing databases can contain duplicate tester name/version rows from before
22
-- the API enforced tester-version uniqueness. Keep the most relevant row for
33
-- each duplicate group, repoint configs to it, and remove the redundant rows so
4-
-- the unique index can be created safely.
5-
CREATE TEMP TABLE "_tester_name_version_duplicates" ON COMMIT DROP AS
4+
-- the unique index can be created safely. Each statement uses its own CTE
5+
-- because Prisma migrate does not keep temporary tables available between all
6+
-- migration statements.
67
WITH "testerUsage" AS (
78
SELECT
89
tester."id",
@@ -28,21 +29,55 @@ WITH "testerUsage" AS (
2829
FROM "marathon_match"."tester" tester
2930
INNER JOIN "testerUsage"
3031
ON "testerUsage"."id" = tester."id"
32+
),
33+
"duplicateTesters" AS (
34+
SELECT
35+
"id" AS "duplicateId",
36+
"keeperId"
37+
FROM "rankedTesters"
38+
WHERE "id" <> "keeperId"
3139
)
32-
SELECT
33-
"id" AS "duplicateId",
34-
"keeperId"
35-
FROM "rankedTesters"
36-
WHERE "id" <> "keeperId";
37-
3840
UPDATE "marathon_match"."marathonMatchConfig" config
3941
SET "testerId" = duplicates."keeperId"
40-
FROM "_tester_name_version_duplicates" duplicates
42+
FROM "duplicateTesters" duplicates
4143
WHERE config."testerId" = duplicates."duplicateId";
4244

45+
WITH "testerUsage" AS (
46+
SELECT
47+
tester."id",
48+
COUNT(config."id") AS "configCount"
49+
FROM "marathon_match"."tester" tester
50+
LEFT JOIN "marathon_match"."marathonMatchConfig" config
51+
ON config."testerId" = tester."id"
52+
GROUP BY tester."id"
53+
),
54+
"rankedTesters" AS (
55+
SELECT
56+
tester."id",
57+
FIRST_VALUE(tester."id") OVER (
58+
PARTITION BY tester."name", tester."version"
59+
ORDER BY
60+
"testerUsage"."configCount" DESC,
61+
(tester."compilationStatus" = 'SUCCESS' AND tester."jarFile" IS NOT NULL) DESC,
62+
(tester."compilationStatus" = 'SUCCESS') DESC,
63+
tester."updatedAt" DESC,
64+
tester."createdAt" DESC,
65+
tester."id" ASC
66+
) AS "keeperId"
67+
FROM "marathon_match"."tester" tester
68+
INNER JOIN "testerUsage"
69+
ON "testerUsage"."id" = tester."id"
70+
),
71+
"duplicateTesters" AS (
72+
SELECT
73+
"id" AS "duplicateId",
74+
"keeperId"
75+
FROM "rankedTesters"
76+
WHERE "id" <> "keeperId"
77+
)
4378
DELETE FROM "marathon_match"."tester" tester
44-
USING "_tester_name_version_duplicates" duplicates
79+
USING "duplicateTesters" duplicates
4580
WHERE tester."id" = duplicates."duplicateId";
4681

4782
-- CreateIndex
48-
CREATE UNIQUE INDEX "tester_name_version_key" ON "marathon_match"."tester"("name", "version");
83+
CREATE UNIQUE INDEX IF NOT EXISTS "tester_name_version_key" ON "marathon_match"."tester"("name", "version");

0 commit comments

Comments
 (0)