Refactor migrations to account for 2.1-preview users

This commit is contained in:
grimsi
2025-09-29 17:05:36 +02:00
parent 50868320ab
commit 8c2cedefe4
2 changed files with 88 additions and 99 deletions
@@ -1,7 +1,32 @@
-- Flyway Migration: V2.1.0 (Part 1) -- Flyway Migration: V2.1.0 (Part 1)
-- Purpose: -- Purpose:
-- 1. Drop unique constraints on GAME.COVER_IMAGE_ID and GAME.HEADER_IMAGE_ID -- 1. Drop unique constraints on GAME.COVER_IMAGE_ID and GAME.HEADER_IMAGE_ID
-- 2. Rename all remaining UK*/FK* constraints to human-readable names -- 2. Rename all remaining UK*/FK* constraints to human-readable names (idempotent)
-- This version has been updated to be resilient: if a hashed constraint name
-- does not exist (e.g. on legacy schemas where Hibernate never created it, or
-- on future fresh installs where the friendly name may already be present),
-- the rename attempt is ignored instead of failing the migration.
/******************************************************************************************
* Helper: Idempotent constraint rename for H2
* H2 does not support RENAME CONSTRAINT IF EXISTS, so we create a Java alias that
* executes a rename and suppresses error 90057 (constraint not found).
* NOTE: Do not declare method as public static; H2 wraps it and adds modifiers itself.
******************************************************************************************/
CREATE ALIAS IF NOT EXISTS RENAME_CONSTRAINT_IF_EXISTS AS
$$
import java.sql.*;
@CODE
void run(Connection conn, String table, String oldName, String newName) throws SQLException {
try (Statement st = conn.createStatement()) {
st.execute("ALTER TABLE " + table + " RENAME CONSTRAINT " + oldName + " TO " + newName);
} catch (SQLException e) {
if (e.getErrorCode() != 90057) { // ignore only 'constraint not found'
throw e;
}
}
}
$$;
/****************************************************************************************** /******************************************************************************************
* 1. Drop the two unwanted unique constraints on GAME * 1. Drop the two unwanted unique constraints on GAME
@@ -13,109 +38,74 @@ ALTER TABLE GAME
-- HEADER_IMAGE_ID unique -- HEADER_IMAGE_ID unique
/****************************************************************************************** /******************************************************************************************
* 2. Rename remaining UNIQUE constraints (UK*) * 2. Rename remaining UNIQUE constraints (UK*) (tolerant)
******************************************************************************************/ ******************************************************************************************/
ALTER TABLE COMPANY CALL RENAME_CONSTRAINT_IF_EXISTS('COMPANY', 'UK4UCNYHR8I0URHWDUDFAHKOB9E', 'UQ_COMPANY_NAME_TYPE');
RENAME CONSTRAINT UK4UCNYHR8I0URHWDUDFAHKOB9E TO UQ_COMPANY_NAME_TYPE; CALL RENAME_CONSTRAINT_IF_EXISTS('DIRECTORY_MAPPING', 'UKJ3GSATFAHEWFOLSEAJ29O3KYT',
ALTER TABLE DIRECTORY_MAPPING 'UQ_DIRECTORY_MAPPING_INTERNAL_PATH');
RENAME CONSTRAINT UKJ3GSATFAHEWFOLSEAJ29O3KYT TO UQ_DIRECTORY_MAPPING_INTERNAL_PATH; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME', 'UK4WXN9FPXFQ8QXPSB7FY0O3NOA', 'UQ_GAME_PATH');
ALTER TABLE GAME CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_IMAGES', 'UKBDE7M3TKHIEEYBINM2ED0B6X1', 'UQ_GAME_IMAGES_IMAGE_ID');
RENAME CONSTRAINT UK4WXN9FPXFQ8QXPSB7FY0O3NOA TO UQ_GAME_PATH; CALL RENAME_CONSTRAINT_IF_EXISTS('LIBRARY_DIRECTORIES', 'UKB5UM4CADBNC6UC8DVOMO81N5F',
ALTER TABLE GAME_IMAGES 'UQ_LIBRARY_DIRECTORIES_DIRECTORY_ID');
RENAME CONSTRAINT UKBDE7M3TKHIEEYBINM2ED0B6X1 TO UQ_GAME_IMAGES_IMAGE_ID; CALL RENAME_CONSTRAINT_IF_EXISTS('LIBRARY_GAMES', 'UK3E4VB9NQXPY27VMTA27GU5FY8', 'UQ_LIBRARY_GAMES_GAME_ID');
ALTER TABLE LIBRARY_DIRECTORIES CALL RENAME_CONSTRAINT_IF_EXISTS('USERS', 'UK6DOTKOTT2KJSP8VW4D0M25FB7', 'UQ_USERS_EMAIL');
RENAME CONSTRAINT UKB5UM4CADBNC6UC8DVOMO81N5F TO UQ_LIBRARY_DIRECTORIES_DIRECTORY_ID; CALL RENAME_CONSTRAINT_IF_EXISTS('USERS', 'UKR43AF9AP4EDM43MMTQ01ODDJ6', 'UQ_USERS_USERNAME');
ALTER TABLE LIBRARY_GAMES CALL RENAME_CONSTRAINT_IF_EXISTS('USERS', 'UKRSULCN2GYNJY3CDDPWMOSV881', 'UQ_USERS_AVATAR_ID');
RENAME CONSTRAINT UK3E4VB9NQXPY27VMTA27GU5FY8 TO UQ_LIBRARY_GAMES_GAME_ID; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_FIELD_METADATA', 'UKHW6U2Y9FLWPTI57QB7K0P27BL',
ALTER TABLE USERS 'UQ_GAME_FIELD_METADATA_SOURCE_ID');
RENAME CONSTRAINT UK6DOTKOTT2KJSP8VW4D0M25FB7 TO UQ_USERS_EMAIL; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_FIELDS', 'UK1L5OAH0UOOUV4V5A9P0PAK77X', 'UQ_GAME_FIELDS_FIELD_METADATA_ID');
ALTER TABLE USERS
RENAME CONSTRAINT UKR43AF9AP4EDM43MMTQ01ODDJ6 TO UQ_USERS_USERNAME;
ALTER TABLE USERS
RENAME CONSTRAINT UKRSULCN2GYNJY3CDDPWMOSV881 TO UQ_USERS_AVATAR_ID;
ALTER TABLE GAME_FIELD_METADATA
RENAME CONSTRAINT UKHW6U2Y9FLWPTI57QB7K0P27BL TO UQ_GAME_FIELD_METADATA_SOURCE_ID;
ALTER TABLE GAME_FIELDS
RENAME CONSTRAINT UK1L5OAH0UOOUV4V5A9P0PAK77X TO UQ_GAME_FIELDS_FIELD_METADATA_ID;
/****************************************************************************************** /******************************************************************************************
* 3. Rename FOREIGN KEY constraints (FK*) * 3. Rename FOREIGN KEY constraints (FK*) (tolerant)
******************************************************************************************/ ******************************************************************************************/
ALTER TABLE GAME CALL RENAME_CONSTRAINT_IF_EXISTS('GAME', 'FK6CVB43REAYSNYPI0XDY6HQTVF', 'FK_GAME_COVER_IMAGE');
RENAME CONSTRAINT FK6CVB43REAYSNYPI0XDY6HQTVF TO FK_GAME_COVER_IMAGE; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME', 'FK8N86NDPGKMOO7YOLX6HL8N84G', 'FK_GAME_HEADER_IMAGE');
ALTER TABLE GAME CALL RENAME_CONSTRAINT_IF_EXISTS('GAME', 'FKIUVR8XFB63T1K6T43EYYXVO2C', 'FK_GAME_LIBRARY');
RENAME CONSTRAINT FK8N86NDPGKMOO7YOLX6HL8N84G TO FK_GAME_HEADER_IMAGE;
ALTER TABLE GAME
RENAME CONSTRAINT FKIUVR8XFB63T1K6T43EYYXVO2C TO FK_GAME_LIBRARY;
ALTER TABLE GAME_DEVELOPERS CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_DEVELOPERS', 'FKB12PO9L2B9OJBAIHC82MM2QXB', 'FK_GAME_DEVELOPERS_COMPANY');
RENAME CONSTRAINT FKB12PO9L2B9OJBAIHC82MM2QXB TO FK_GAME_DEVELOPERS_COMPANY; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_DEVELOPERS', 'FKS4IJSVPIJ53DSL143XVRGBS09', 'FK_GAME_DEVELOPERS_GAME');
ALTER TABLE GAME_DEVELOPERS
RENAME CONSTRAINT FKS4IJSVPIJ53DSL143XVRGBS09 TO FK_GAME_DEVELOPERS_GAME;
ALTER TABLE GAME_FEATURES CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_FEATURES', 'FK63XLTCT60SCIMPM06K8BHBE4A', 'FK_GAME_FEATURES_GAME');
RENAME CONSTRAINT FK63XLTCT60SCIMPM06K8BHBE4A TO FK_GAME_FEATURES_GAME; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_GENRES', 'FKDTSX09YOPD98E0LUEWRUSJD9E', 'FK_GAME_GENRES_GAME');
ALTER TABLE GAME_GENRES
RENAME CONSTRAINT FKDTSX09YOPD98E0LUEWRUSJD9E TO FK_GAME_GENRES_GAME;
ALTER TABLE GAME_IMAGES CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_IMAGES', 'FK5YWV1DMXCM2VSQUEB7RHQ3JK9', 'FK_GAME_IMAGES_IMAGE');
RENAME CONSTRAINT FK5YWV1DMXCM2VSQUEB7RHQ3JK9 TO FK_GAME_IMAGES_IMAGE; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_IMAGES', 'FKOWCPUCV45OX8GT28TXGVHF1AA', 'FK_GAME_IMAGES_GAME');
ALTER TABLE GAME_IMAGES
RENAME CONSTRAINT FKOWCPUCV45OX8GT28TXGVHF1AA TO FK_GAME_IMAGES_GAME;
ALTER TABLE GAME_KEYWORDS CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_KEYWORDS', 'FKMVF6HNJ7ROMQQM2EX70A9NVAC', 'FK_GAME_KEYWORDS_GAME');
RENAME CONSTRAINT FKMVF6HNJ7ROMQQM2EX70A9NVAC TO FK_GAME_KEYWORDS_GAME; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_PERSPECTIVES', 'FKHUEENG29Y1GHBRDI5QHGUXH6E', 'FK_GAME_PERSPECTIVES_GAME');
ALTER TABLE GAME_PERSPECTIVES
RENAME CONSTRAINT FKHUEENG29Y1GHBRDI5QHGUXH6E TO FK_GAME_PERSPECTIVES_GAME;
ALTER TABLE GAME_PUBLISHERS CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_PUBLISHERS', 'FK49R2KB61LIJ54BQB4VNTST97N', 'FK_GAME_PUBLISHERS_GAME');
RENAME CONSTRAINT FK49R2KB61LIJ54BQB4VNTST97N TO FK_GAME_PUBLISHERS_GAME; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_PUBLISHERS', 'FKNGLD5ESGRBRH95J5BJF0HEF85', 'FK_GAME_PUBLISHERS_COMPANY');
ALTER TABLE GAME_PUBLISHERS
RENAME CONSTRAINT FKNGLD5ESGRBRH95J5BJF0HEF85 TO FK_GAME_PUBLISHERS_COMPANY;
ALTER TABLE GAME_THEMES CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_THEMES', 'FKRV351JXLIOY0A17Y5BBJJ6FW4', 'FK_GAME_THEMES_GAME');
RENAME CONSTRAINT FKRV351JXLIOY0A17Y5BBJJ6FW4 TO FK_GAME_THEMES_GAME; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_VIDEO_URLS', 'FKJKKWO8WDS086AS7B2KSLSVKM6', 'FK_GAME_VIDEO_URLS_GAME');
ALTER TABLE GAME_VIDEO_URLS
RENAME CONSTRAINT FKJKKWO8WDS086AS7B2KSLSVKM6 TO FK_GAME_VIDEO_URLS_GAME;
ALTER TABLE LIBRARY_DIRECTORIES CALL RENAME_CONSTRAINT_IF_EXISTS('LIBRARY_DIRECTORIES', 'FKFNCKIU58I9L89MLXV388DY13B',
RENAME CONSTRAINT FKFNCKIU58I9L89MLXV388DY13B TO FK_LIBRARY_DIRECTORIES_LIBRARY; 'FK_LIBRARY_DIRECTORIES_LIBRARY');
ALTER TABLE LIBRARY_DIRECTORIES CALL RENAME_CONSTRAINT_IF_EXISTS('LIBRARY_DIRECTORIES', 'FKJDXS58Q1IRTU0IDP6DXJHWAPM',
RENAME CONSTRAINT FKJDXS58Q1IRTU0IDP6DXJHWAPM TO FK_LIBRARY_DIRECTORIES_DIRECTORY_MAPPING; 'FK_LIBRARY_DIRECTORIES_DIRECTORY_MAPPING');
ALTER TABLE LIBRARY_GAMES CALL RENAME_CONSTRAINT_IF_EXISTS('LIBRARY_GAMES', 'FK6C71EEDM0I2N1JXDE9BOBWG5M', 'FK_LIBRARY_GAMES_LIBRARY');
RENAME CONSTRAINT FK6C71EEDM0I2N1JXDE9BOBWG5M TO FK_LIBRARY_GAMES_LIBRARY; CALL RENAME_CONSTRAINT_IF_EXISTS('LIBRARY_GAMES', 'FKDKKKES3DAY0WJ1QMV42KMMFDK', 'FK_LIBRARY_GAMES_GAME');
ALTER TABLE LIBRARY_GAMES
RENAME CONSTRAINT FKDKKKES3DAY0WJ1QMV42KMMFDK TO FK_LIBRARY_GAMES_GAME;
ALTER TABLE LIBRARY_UNMATCHED_PATHS CALL RENAME_CONSTRAINT_IF_EXISTS('LIBRARY_UNMATCHED_PATHS', 'FKSJ51WC2LBNNXY0LKLWELI6VSB',
RENAME CONSTRAINT FKSJ51WC2LBNNXY0LKLWELI6VSB TO FK_LIBRARY_UNMATCHED_PATHS_LIBRARY; 'FK_LIBRARY_UNMATCHED_PATHS_LIBRARY');
ALTER TABLE GAME_ORIGINAL_IDS CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_ORIGINAL_IDS', 'FK1CSD5QD7VJT7BTTA3G7HGYBUX', 'FK_GAME_ORIGINAL_IDS_GAME');
RENAME CONSTRAINT FK1CSD5QD7VJT7BTTA3G7HGYBUX TO FK_GAME_ORIGINAL_IDS_GAME; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_ORIGINAL_IDS', 'FKMT0XWLPWPU9NP0Q289JBAHJRY', 'FK_GAME_ORIGINAL_IDS_PLUGIN');
ALTER TABLE GAME_ORIGINAL_IDS
RENAME CONSTRAINT FKMT0XWLPWPU9NP0Q289JBAHJRY TO FK_GAME_ORIGINAL_IDS_PLUGIN;
ALTER TABLE USERS CALL RENAME_CONSTRAINT_IF_EXISTS('USERS', 'FK19LFLPG5SEIS4DWRM2LVJLXFV', 'FK_USERS_AVATAR_IMAGE');
RENAME CONSTRAINT FK19LFLPG5SEIS4DWRM2LVJLXFV TO FK_USERS_AVATAR_IMAGE;
ALTER TABLE GAME_FIELD_SOURCE CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_FIELD_SOURCE', 'FKNJC4QSS5APFHTPWP42OAEAL5G', 'FK_GAME_FIELD_SOURCE_PLUGIN');
RENAME CONSTRAINT FKNJC4QSS5APFHTPWP42OAEAL5G TO FK_GAME_FIELD_SOURCE_PLUGIN; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_FIELD_SOURCE', 'FKSR1BGTX5XJVMAL7FEFGL982TP', 'FK_GAME_FIELD_SOURCE_USER');
ALTER TABLE GAME_FIELD_SOURCE
RENAME CONSTRAINT FKSR1BGTX5XJVMAL7FEFGL982TP TO FK_GAME_FIELD_SOURCE_USER;
ALTER TABLE GAME_FIELD_METADATA CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_FIELD_METADATA', 'FKQ4RC409TP8FUBTTM733PMJD8F', 'FK_GAME_FIELD_METADATA_SOURCE');
RENAME CONSTRAINT FKQ4RC409TP8FUBTTM733PMJD8F TO FK_GAME_FIELD_METADATA_SOURCE;
ALTER TABLE GAME_FIELDS CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_FIELDS', 'FKLNEPI7YWCI86YH21KO9WD9PYF', 'FK_GAME_FIELDS_GAME');
RENAME CONSTRAINT FKLNEPI7YWCI86YH21KO9WD9PYF TO FK_GAME_FIELDS_GAME; CALL RENAME_CONSTRAINT_IF_EXISTS('GAME_FIELDS', 'FKT8FLOFDAPX5M746S5LW54C5B3', 'FK_GAME_FIELDS_METADATA');
ALTER TABLE GAME_FIELDS
RENAME CONSTRAINT FKT8FLOFDAPX5M746S5LW54C5B3 TO FK_GAME_FIELDS_METADATA;
ALTER TABLE TOKEN CALL RENAME_CONSTRAINT_IF_EXISTS('TOKEN', 'FKGHOIALAPTI5JFEJ506JBB1O8Y', 'FK_TOKEN_CREATOR_USER');
RENAME CONSTRAINT FKGHOIALAPTI5JFEJ506JBB1O8Y TO FK_TOKEN_CREATOR_USER;
ALTER TABLE USER_ROLES CALL RENAME_CONSTRAINT_IF_EXISTS('USER_ROLES', 'FKHFH9DX7W3UBF1CO1VDEV94G3F', 'FK_USER_ROLES_USER');
RENAME CONSTRAINT FKHFH9DX7W3UBF1CO1VDEV94G3F TO FK_USER_ROLES_USER;
-- End of migration -- End of migration
@@ -5,13 +5,13 @@
/****************************************************************************************** /******************************************************************************************
* 1. Create new sequence * 1. Create new sequence
******************************************************************************************/ ******************************************************************************************/
CREATE SEQUENCE GAME_REQUEST_SEQ CREATE SEQUENCE IF NOT EXISTS GAME_REQUEST_SEQ
INCREMENT BY 50; INCREMENT BY 50;
/****************************************************************************************** /******************************************************************************************
* 2. Create new tables * 2. Create new tables
******************************************************************************************/ ******************************************************************************************/
CREATE TABLE GAME_REQUEST CREATE TABLE IF NOT EXISTS GAME_REQUEST
( (
ID BIGINT NOT NULL PRIMARY KEY, ID BIGINT NOT NULL PRIMARY KEY,
TITLE VARCHAR(255) NOT NULL, TITLE VARCHAR(255) NOT NULL,
@@ -20,23 +20,22 @@ CREATE TABLE GAME_REQUEST
REQUESTER_ID BIGINT, REQUESTER_ID BIGINT,
LINKED_GAME_ID BIGINT, LINKED_GAME_ID BIGINT,
CREATED_AT TIMESTAMP NOT NULL, CREATED_AT TIMESTAMP NOT NULL,
UPDATED_AT TIMESTAMP NOT NULL UPDATED_AT TIMESTAMP NOT NULL,
CONSTRAINT FK_GAMEREQUEST_ON_REQUESTER
FOREIGN KEY (REQUESTER_ID) REFERENCES USERS
ON DELETE SET NULL
); );
CREATE TABLE GAME_REQUEST_VOTERS CREATE TABLE IF NOT EXISTS GAME_REQUEST_VOTERS
( (
GAME_REQUEST_ID BIGINT NOT NULL, GAME_REQUEST_ID BIGINT NOT NULL,
VOTERS_ID BIGINT NOT NULL, VOTERS_ID BIGINT NOT NULL,
PRIMARY KEY (GAME_REQUEST_ID, VOTERS_ID) PRIMARY KEY (GAME_REQUEST_ID, VOTERS_ID),
CONSTRAINT FK_GAMREQVOT_ON_GAME_REQUEST
FOREIGN KEY (GAME_REQUEST_ID) REFERENCES GAME_REQUEST
ON DELETE CASCADE,
CONSTRAINT FK_GAMREQVOT_ON_USER
FOREIGN KEY (VOTERS_ID) REFERENCES USERS
); );
ALTER TABLE GAME_REQUEST
ADD CONSTRAINT FK_GAMEREQUEST_ON_REQUESTER FOREIGN KEY (REQUESTER_ID) REFERENCES USERS (ID) ON DELETE SET NULL;
ALTER TABLE GAME_REQUEST_VOTERS
ADD CONSTRAINT FK_GAMREQVOT_ON_GAME_REQUEST FOREIGN KEY (GAME_REQUEST_ID) REFERENCES GAME_REQUEST (ID) ON DELETE CASCADE;
ALTER TABLE GAME_REQUEST_VOTERS
ADD CONSTRAINT FK_GAMREQVOT_ON_USER FOREIGN KEY (VOTERS_ID) REFERENCES USERS (ID);
-- End of migration -- End of migration