Skip to main content

V1_TENANT_ACTIVATE_SQL

Constant V1_TENANT_ACTIVATE_SQL 

Source
pub const V1_TENANT_ACTIVATE_SQL: &str = "-- Activate tenant-aware constraints after an operator-owned backfill.\n--\n-- The backfill must assign the same validated TenantId to each event and its\n-- delivery before this script runs. The script refuses to guess a tenant and\n-- makes the v2 invariant durable before the new adapter is deployed.\n\nBEGIN;\n\nDO $$\nBEGIN\n    IF EXISTS (SELECT 1 FROM dovecote_events WHERE tenant_id IS NULL)\n       OR EXISTS (SELECT 1 FROM dovecote_deliveries WHERE tenant_id IS NULL) THEN\n        RAISE EXCEPTION \'Dovecote tenant backfill is incomplete\';\n    END IF;\n    IF EXISTS (SELECT 1 FROM dovecote_events WHERE tenant_id = \'\')\n       OR EXISTS (SELECT 1 FROM dovecote_deliveries WHERE tenant_id = \'\') THEN\n        RAISE EXCEPTION \'Dovecote tenant backfill contains an empty tenant\';\n    END IF;\n    IF EXISTS (\n        SELECT 1\n        FROM dovecote_deliveries AS d\n        LEFT JOIN dovecote_events AS e ON e.row_id = d.event_row_id\n        WHERE e.row_id IS NULL OR d.tenant_id <> e.tenant_id\n    ) THEN\n        RAISE EXCEPTION \'Dovecote event and delivery tenants do not agree\';\n    END IF;\nEND\n$$;\n\nALTER TABLE dovecote_events\n    ALTER COLUMN tenant_id SET NOT NULL;\nALTER TABLE dovecote_deliveries\n    ALTER COLUMN tenant_id SET NOT NULL;\n\nALTER TABLE dovecote_events\n    ADD CONSTRAINT dovecote_events_tenant_size\n        CHECK (octet_length(tenant_id) <= 255),\n    ADD CONSTRAINT dovecote_events_tenant_nonempty\n        CHECK (octet_length(tenant_id) > 0),\n    ADD CONSTRAINT dovecote_events_tenant_row_unique\n        UNIQUE (tenant_id, row_id);\n\nDROP INDEX IF EXISTS dovecote_events_source_event_id;\nCREATE UNIQUE INDEX dovecote_events_tenant_source_event_id\n    ON dovecote_events (tenant_id COLLATE \"C\", source COLLATE \"C\", event_id COLLATE \"C\");\n\nALTER TABLE dovecote_deliveries\n    DROP CONSTRAINT IF EXISTS dovecote_deliveries_event_fk;\nDROP INDEX IF EXISTS dovecote_deliveries_claimable;\nDROP INDEX IF EXISTS dovecote_deliveries_expired_claims;\n\nALTER TABLE dovecote_deliveries\n    ADD CONSTRAINT dovecote_deliveries_tenant_size\n        CHECK (octet_length(tenant_id) <= 255),\n    ADD CONSTRAINT dovecote_deliveries_tenant_nonempty\n        CHECK (octet_length(tenant_id) > 0),\n    ADD CONSTRAINT dovecote_deliveries_event_fk\n        FOREIGN KEY (tenant_id, event_row_id)\n        REFERENCES dovecote_events (tenant_id, row_id)\n        ON DELETE RESTRICT;\n\nCREATE INDEX dovecote_deliveries_claimable\n    ON dovecote_deliveries (tenant_id COLLATE \"C\", state, available_at, event_row_id);\nCREATE INDEX dovecote_deliveries_expired_claims\n    ON dovecote_deliveries (tenant_id COLLATE \"C\", state, claim_expires_at, event_row_id);\n\nALTER TABLE dovecote_schema\n    DROP CONSTRAINT dovecote_schema_version_supported,\n    ADD CONSTRAINT dovecote_schema_version_supported\n        CHECK (schema_version = 2);\n\nUPDATE dovecote_schema\nSET schema_version = 2,\n    minimum_crate_major = 0,\n    minimum_crate_minor = 2,\n    minimum_crate_patch = 0,\n    rolling_compatible = FALSE;\n\nCOMMIT;\n";
👎Deprecated since 0.2.1:

the published 0.2.0 artifact cannot complete; use V1_TENANT_ACTIVATE_V2_SQL

Expand description

SQL that validates an operator-owned backfill and activates version 2.