-- CreateTable CREATE TABLE "PolicyDefaults" ( "id" INTEGER NOT NULL PRIMARY KEY DEFAULT 1, "responsible" TEXT NOT NULL DEFAULT '', "contactDPO" TEXT NOT NULL DEFAULT '', "dataSubjectsRights" TEXT NOT NULL DEFAULT '', "complaintRight" TEXT NOT NULL DEFAULT '', "withdrawalRight" TEXT NOT NULL DEFAULT '', "provisionObligation" TEXT NOT NULL DEFAULT '', "provisionConsequences" TEXT NOT NULL DEFAULT '', "updatedAt" DATETIME NOT NULL ); -- Standarddatensatz anlegen. Die Texte übernimmt der häufigste Bestandswert -- unten; ohne Bestand bleiben sie leer und werden im Admin gepflegt. INSERT INTO "PolicyDefaults" ("id", "updatedAt") VALUES (1, CURRENT_TIMESTAMP); UPDATE "PolicyDefaults" SET "responsible" = COALESCE((SELECT "responsible" FROM "PrivacyPolicy" WHERE "responsible" <> '' GROUP BY "responsible" ORDER BY COUNT(*) DESC, MIN("id") LIMIT 1), ''), "contactDPO" = COALESCE((SELECT "contactDPO" FROM "PrivacyPolicy" WHERE "contactDPO" <> '' GROUP BY "contactDPO" ORDER BY COUNT(*) DESC, MIN("id") LIMIT 1), ''), "dataSubjectsRights" = COALESCE((SELECT "dataSubjectsRights" FROM "PrivacyPolicy" WHERE "dataSubjectsRights" <> '' GROUP BY "dataSubjectsRights" ORDER BY COUNT(*) DESC, MIN("id") LIMIT 1), ''), "complaintRight" = COALESCE((SELECT "complaintRight" FROM "PrivacyPolicy" WHERE "complaintRight" <> '' GROUP BY "complaintRight" ORDER BY COUNT(*) DESC, MIN("id") LIMIT 1), ''), "withdrawalRight" = COALESCE((SELECT "withdrawalRight" FROM "PrivacyPolicy" WHERE "withdrawalRight" <> '' GROUP BY "withdrawalRight" ORDER BY COUNT(*) DESC, MIN("id") LIMIT 1), '') WHERE "id" = 1; -- RedefineTables: die fünf Baustein-Felder werden nullable (NULL = Standard gilt) PRAGMA defer_foreign_keys=ON; PRAGMA foreign_keys=OFF; CREATE TABLE "new_PrivacyPolicy" ( "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "title" TEXT NOT NULL, "responsible" TEXT, "contactDPO" TEXT, "dataSubjectsRights" TEXT, "complaintRight" TEXT, "withdrawalRight" TEXT, "processingDescription" TEXT NOT NULL, "processingPurposes" TEXT, "legalBasis" TEXT, "recipients" TEXT NOT NULL, "storageDuration" TEXT, "dataSource" TEXT, "provisionObligation" TEXT, "provisionConsequences" TEXT, "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" DATETIME NOT NULL, "isPublic" BOOLEAN NOT NULL DEFAULT true ); -- Werte, die dem übernommenen Standard entsprechen, werden auf NULL gesetzt: -- die Erklärung folgt damit dem Standard, ihr angezeigter Text bleibt derselbe. INSERT INTO "new_PrivacyPolicy" ("id", "title", "responsible", "contactDPO", "dataSubjectsRights", "complaintRight", "withdrawalRight", "processingDescription", "processingPurposes", "legalBasis", "recipients", "storageDuration", "dataSource", "provisionObligation", "provisionConsequences", "createdAt", "updatedAt", "isPublic") SELECT p."id", p."title", NULLIF(p."responsible", d."responsible"), NULLIF(p."contactDPO", d."contactDPO"), NULLIF(p."dataSubjectsRights", d."dataSubjectsRights"), NULLIF(p."complaintRight", d."complaintRight"), NULLIF(p."withdrawalRight", d."withdrawalRight"), p."processingDescription", p."processingPurposes", p."legalBasis", p."recipients", p."storageDuration", p."dataSource", p."provisionObligation", p."provisionConsequences", p."createdAt", p."updatedAt", p."isPublic" FROM "PrivacyPolicy" p CROSS JOIN "PolicyDefaults" d WHERE d."id" = 1; DROP TABLE "PrivacyPolicy"; ALTER TABLE "new_PrivacyPolicy" RENAME TO "PrivacyPolicy"; PRAGMA foreign_keys=ON; PRAGMA defer_foreign_keys=OFF;