-- Migración 002: campos multi-valor en persons + frontmatter no-owned. -- -- La inversión "DuckDB como fuente de verdad" hace que las fichas de persona -- puedan tener varios teléfonos, emails y direcciones (no solo el singular del -- frontmatter). Se añaden columnas JSON con la lista completa y se mantienen las -- columnas singulares (telefono/email/direccion) por compatibilidad: el service -- las rellena con el primer elemento de cada lista al materializar la ficha. -- -- extra_fm guarda las claves del frontmatter de la nota que NO son campos OWNED -- de la DB ni claves de control (slug/tipo/fuente/note_path): así un re-ingest -- del vault puede refrescarlas sin pisar lo que la DB posee. -- -- DuckDB 1.5.3: soporta ALTER TABLE ADD COLUMN IF NOT EXISTS y to_json([...]). -- Aditiva e idempotente. ALTER TABLE persons ADD COLUMN IF NOT EXISTS telefonos JSON; ALTER TABLE persons ADD COLUMN IF NOT EXISTS emails JSON; ALTER TABLE persons ADD COLUMN IF NOT EXISTS direcciones JSON; ALTER TABLE persons ADD COLUMN IF NOT EXISTS extra_fm JSON; -- Backfill: deriva las listas desde los singulares existentes la primera vez. -- COALESCE deja '[]' donde no había singular, para no dejar NULLs en las listas. UPDATE persons SET telefonos = CASE WHEN telefonos IS NULL AND telefono IS NOT NULL THEN to_json([telefono]) ELSE COALESCE(telefonos, '[]') END, emails = CASE WHEN emails IS NULL AND email IS NOT NULL THEN to_json([email]) ELSE COALESCE(emails, '[]') END, direcciones = CASE WHEN direcciones IS NULL AND direccion IS NOT NULL THEN to_json([direccion]) ELSE COALESCE(direcciones,'[]') END;