From 41467a84b62b9381ba04744956385e1795c2dd1a Mon Sep 17 00:00:00 2001 From: Ulas Kalayci Date: Tue, 21 Apr 2026 14:03:33 +0200 Subject: [PATCH] chore: release v0.21.1 Co-Authored-By: Claude Sonnet 4.6 --- CHANGELOG.md | 5 +++++ package-lock.json | 4 ++-- package.json | 2 +- server/db.js | 9 +++++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f13912..950f210 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.21.1] - 2026-04-21 + +### Fixed +- ICS calendar subscription sync no longer fails with "ON CONFLICT clause does not match any PRIMARY KEY or UNIQUE constraint". Migration 12 replaces the partial unique index on `(subscription_id, external_calendar_id)` with a full unique index, which SQLite's upsert conflict-target syntax requires. + ## [0.21.0] - 2026-04-21 ### Added diff --git a/package-lock.json b/package-lock.json index c837033..f287a80 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "oikos", - "version": "0.21.0", + "version": "0.21.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "oikos", - "version": "0.21.0", + "version": "0.21.1", "license": "MIT", "dependencies": { "bcrypt": "^6.0.0", diff --git a/package.json b/package.json index 3b2629d..be73faf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "oikos", - "version": "0.21.0", + "version": "0.21.1", "description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.", "main": "server/index.js", "type": "module", diff --git a/server/db.js b/server/db.js index 8a5d903..6c1a582 100644 --- a/server/db.js +++ b/server/db.js @@ -475,6 +475,15 @@ const MIGRATIONS = [ WHERE subscription_id IS NOT NULL; `, }, + { + version: 12, + description: 'calendar_events: partiellen Unique-Index durch vollständigen ersetzen (ON CONFLICT support)', + up: ` + DROP INDEX IF EXISTS idx_calendar_sub_extid; + CREATE UNIQUE INDEX idx_calendar_sub_extid + ON calendar_events (subscription_id, external_calendar_id); + `, + }, ]; /**