From 2f651adf3b4e8d689461da2083c3afcb1eb1d477 Mon Sep 17 00:00:00 2001 From: Elias Schneider Date: Sat, 3 Jan 2026 14:32:19 +0100 Subject: [PATCH] fix: migration fails if users exist with no email address --- ...60102231700_ldap_admin_group_rename.up.sql | 9 +++- ...51217141000_v2_export_normalization.up.sql | 4 +- ...60102231700_ldap_admin_group_rename.up.sql | 9 +++- ...260103142200_user_nullable_fields.down.sql | 1 + ...20260103142200_user_nullable_fields.up.sql | 52 +++++++++++++++++++ 5 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 backend/resources/migrations/sqlite/20260103142200_user_nullable_fields.down.sql create mode 100644 backend/resources/migrations/sqlite/20260103142200_user_nullable_fields.up.sql diff --git a/backend/resources/migrations/postgres/20260102231700_ldap_admin_group_rename.up.sql b/backend/resources/migrations/postgres/20260102231700_ldap_admin_group_rename.up.sql index 4a92606d..99259449 100644 --- a/backend/resources/migrations/postgres/20260102231700_ldap_admin_group_rename.up.sql +++ b/backend/resources/migrations/postgres/20260102231700_ldap_admin_group_rename.up.sql @@ -1 +1,8 @@ -UPDATE app_config_variables SET key = 'ldapAdminGroupName' WHERE key = 'ldapAttributeAdminGroup'; +UPDATE app_config_variables +SET key = 'ldapAdminGroupName' +WHERE key = 'ldapAttributeAdminGroup' + AND NOT EXISTS ( + SELECT 1 + FROM app_config_variables + WHERE key = 'ldapAdminGroupName' +); \ No newline at end of file diff --git a/backend/resources/migrations/sqlite/20251217141000_v2_export_normalization.up.sql b/backend/resources/migrations/sqlite/20251217141000_v2_export_normalization.up.sql index 1eae6c6f..2aa0b52b 100644 --- a/backend/resources/migrations/sqlite/20251217141000_v2_export_normalization.up.sql +++ b/backend/resources/migrations/sqlite/20251217141000_v2_export_normalization.up.sql @@ -10,8 +10,8 @@ CREATE TABLE users_new id TEXT NOT NULL PRIMARY KEY, created_at DATETIME, username TEXT COLLATE NOCASE NOT NULL UNIQUE, - email TEXT NOT NULL UNIQUE, - first_name TEXT, + email TEXT UNIQUE, + first_name TEXT NOT NULL, last_name TEXT NOT NULL, display_name TEXT NOT NULL, is_admin BOOLEAN DEFAULT FALSE NOT NULL, diff --git a/backend/resources/migrations/sqlite/20260102231700_ldap_admin_group_rename.up.sql b/backend/resources/migrations/sqlite/20260102231700_ldap_admin_group_rename.up.sql index 800371fd..981d0a97 100644 --- a/backend/resources/migrations/sqlite/20260102231700_ldap_admin_group_rename.up.sql +++ b/backend/resources/migrations/sqlite/20260102231700_ldap_admin_group_rename.up.sql @@ -1,7 +1,14 @@ PRAGMA foreign_keys= OFF; BEGIN; -UPDATE app_config_variables SET key = 'ldapAdminGroupName' WHERE key = 'ldapAttributeAdminGroup'; +UPDATE app_config_variables +SET key = 'ldapAdminGroupName' +WHERE key = 'ldapAttributeAdminGroup' + AND NOT EXISTS ( + SELECT 1 + FROM app_config_variables + WHERE key = 'ldapAdminGroupName' +); COMMIT; PRAGMA foreign_keys= ON; diff --git a/backend/resources/migrations/sqlite/20260103142200_user_nullable_fields.down.sql b/backend/resources/migrations/sqlite/20260103142200_user_nullable_fields.down.sql new file mode 100644 index 00000000..f8e19576 --- /dev/null +++ b/backend/resources/migrations/sqlite/20260103142200_user_nullable_fields.down.sql @@ -0,0 +1 @@ +-- No-op \ No newline at end of file diff --git a/backend/resources/migrations/sqlite/20260103142200_user_nullable_fields.up.sql b/backend/resources/migrations/sqlite/20260103142200_user_nullable_fields.up.sql new file mode 100644 index 00000000..1b5d29a1 --- /dev/null +++ b/backend/resources/migrations/sqlite/20260103142200_user_nullable_fields.up.sql @@ -0,0 +1,52 @@ +PRAGMA foreign_keys= OFF; +BEGIN; + +CREATE TABLE users_new +( + id TEXT NOT NULL PRIMARY KEY, + created_at DATETIME, + updated_at DATETIME, + username TEXT COLLATE NOCASE NOT NULL UNIQUE, + email TEXT UNIQUE, + first_name TEXT NOT NULL, + last_name TEXT NOT NULL, + display_name TEXT NOT NULL, + is_admin BOOLEAN DEFAULT FALSE NOT NULL, + ldap_id TEXT UNIQUE, + locale TEXT, + disabled BOOLEAN DEFAULT FALSE NOT NULL +); + +INSERT INTO users_new ( + id, + created_at, + updated_at, + username, + email, + first_name, + last_name, + display_name, + is_admin, + ldap_id, + locale, + disabled +) SELECT + id, + created_at, + updated_at, + username, + email, + first_name, + last_name, + display_name, + is_admin, + ldap_id, + locale, + disabled FROM users; + +DROP TABLE users; +ALTER TABLE users_new RENAME TO users; + + +COMMIT; +PRAGMA foreign_keys= ON;