godcrm/scripts/migrations/20260421_atoms_v2_widget_ref.sql
GOD CRM Release f89e074dd1
Some checks failed
CI / Lint / Typecheck / Test / Build (push) Has been cancelled
CI / PostgreSQL Integration Tests (push) Has been cancelled
GOD CRM — public scrubbed snapshot
Governed substrate for autonomous agents: scoped identity (passports),
audited actions, MCP workspace. Infra IPs and secrets redacted for public release.
2026-08-10 04:01:45 +03:00

65 lines
2.1 KiB
PL/PgSQL

-- T-127901 · ADR-0003 Phase 2 · atoms_v2 widget_ref + settings_override
--
-- Storage model reminder: atoms_v2 is universal_tables id=3574. Rows live in
-- `table_rows.data` (JSONB), "columns" are metadata rows in `table_columns`.
-- Adding a column = INSERT into table_columns. No PG-level ALTER TABLE.
--
-- widget_ref — number (FK-ish → widgets.id; no hard FK so legacy
-- widget cleanup does not cascade into atom rows)
-- settings_override — json (per-atom override on top of widget config)
--
-- Index: partial expression index on ((data->>'widget_ref')::int) scoped to
-- atoms_v2 rows, so lookups "which atoms embed widget N" stay cheap without
-- scanning the full 376-row (PROD) JSONB blob set.
--
-- Idempotent: re-running = 0 diff (guarded by NOT EXISTS).
BEGIN;
-- widget_ref (number, nullable)
INSERT INTO table_columns (
table_id, column_name, display_name, type, config,
order_index, is_visible, is_readonly, is_system,
created_at, updated_at
)
SELECT
3574, 'widget_ref', 'Widget Ref', 'number', NULL,
30, 1, 0, 0,
NOW(), NOW()
WHERE NOT EXISTS (
SELECT 1 FROM table_columns
WHERE table_id = 3574 AND column_name = 'widget_ref'
);
-- settings_override (json, nullable)
INSERT INTO table_columns (
table_id, column_name, display_name, type, config,
order_index, is_visible, is_readonly, is_system,
created_at, updated_at
)
SELECT
3574, 'settings_override', 'Settings Override', 'json', NULL,
31, 1, 0, 0,
NOW(), NOW()
WHERE NOT EXISTS (
SELECT 1 FROM table_columns
WHERE table_id = 3574 AND column_name = 'settings_override'
);
-- Partial expression index for widget_ref lookups on atoms_v2 rows only.
CREATE INDEX IF NOT EXISTS idx_atoms_v2_widget_ref
ON table_rows (((data->>'widget_ref')::int))
WHERE table_id = 3574 AND data ? 'widget_ref';
COMMIT;
-- Verify
SELECT column_name, type, order_index
FROM table_columns
WHERE table_id = 3574
AND column_name IN ('widget_ref','settings_override')
ORDER BY order_index;
SELECT indexname
FROM pg_indexes
WHERE indexname = 'idx_atoms_v2_widget_ref';