|
1349 | 1349 | ALTER TABLE "VULNERABILITY" ALTER COLUMN "SEVERITY" TYPE severity USING "SEVERITY"::severity;
|
1350 | 1350 | </sql>
|
1351 | 1351 | </changeSet>
|
| 1352 | + |
| 1353 | + <changeSet id="v5.6.0-19" author="nscuro"> |
| 1354 | + <sql> |
| 1355 | + -- Identify OIDC groups with duplicate names. |
| 1356 | + WITH cte_duplicate_group AS ( |
| 1357 | + SELECT "NAME" AS name |
| 1358 | + , MIN("ID") AS canonical_id |
| 1359 | + FROM "OIDCGROUP" |
| 1360 | + GROUP BY "NAME" |
| 1361 | + HAVING COUNT(*) > 1 |
| 1362 | + ), |
| 1363 | + -- Delete mappings of duplicate OIDC groups. |
| 1364 | + cte_deleted_mapping AS ( |
| 1365 | + DELETE FROM "MAPPEDOIDCGROUP" |
| 1366 | + USING cte_duplicate_group |
| 1367 | + , "OIDCGROUP" |
| 1368 | + WHERE "MAPPEDOIDCGROUP"."GROUP_ID" = "OIDCGROUP"."ID" |
| 1369 | + AND "OIDCGROUP"."NAME" = cte_duplicate_group.name |
| 1370 | + AND "OIDCGROUP"."ID" != cte_duplicate_group.canonical_id |
| 1371 | + RETURNING "OIDCGROUP"."NAME" AS group_name |
| 1372 | + , "MAPPEDOIDCGROUP"."TEAM_ID" AS team_id |
| 1373 | + , "MAPPEDOIDCGROUP"."UUID" AS uuid |
| 1374 | + ), |
| 1375 | + -- Delete duplicate OIDC groups. |
| 1376 | + cte_deleted_group AS ( |
| 1377 | + DELETE FROM "OIDCGROUP" |
| 1378 | + USING cte_duplicate_group |
| 1379 | + WHERE "OIDCGROUP"."NAME" = cte_duplicate_group.name |
| 1380 | + AND "OIDCGROUP"."ID" != cte_duplicate_group.canonical_id |
| 1381 | + RETURNING "OIDCGROUP"."ID" AS id |
| 1382 | + ) |
| 1383 | + -- Re-create deleted mappings, but using the canonical group ID. |
| 1384 | + INSERT INTO "MAPPEDOIDCGROUP" ("GROUP_ID", "TEAM_ID", "UUID") |
| 1385 | + SELECT "OIDCGROUP"."ID" |
| 1386 | + , cte_deleted_mapping.team_id |
| 1387 | + , cte_deleted_mapping.uuid |
| 1388 | + FROM cte_deleted_mapping |
| 1389 | + INNER JOIN "OIDCGROUP" |
| 1390 | + ON "OIDCGROUP"."NAME" = cte_deleted_mapping.group_name |
| 1391 | + -- This condition mostly just forces evaluation of cte_deleted_group. |
| 1392 | + WHERE "OIDCGROUP"."ID" NOT IN (SELECT id FROM cte_deleted_group) |
| 1393 | + -- If the duplicate groups had overlapping mappings, we'll get conflicts here. |
| 1394 | + ON CONFLICT ("TEAM_ID", "GROUP_ID") DO NOTHING |
| 1395 | + </sql> |
| 1396 | + |
| 1397 | + <createIndex tableName="OIDCGROUP" indexName="OIDCGROUP_NAME_IDX" unique="true"> |
| 1398 | + <column name="NAME"/> |
| 1399 | + </createIndex> |
| 1400 | + </changeSet> |
1352 | 1401 | </databaseChangeLog>
|
0 commit comments