20260817_513_tenant_manifest_reader_fix.py 1.6 KB

12345678910111213141516171819202122232425262728293031
  1. """Correct the closed manifest projection without altering applied history."""
  2. from alembic import op
  3. revision = "20260817_513"
  4. down_revision = "20260817_512"
  5. branch_labels = None
  6. depends_on = None
  7. def upgrade() -> None:
  8. op.execute(r"""
  9. CREATE OR REPLACE FUNCTION public.tenant_control_read_manifests(p_payload jsonb)
  10. RETURNS jsonb LANGUAGE plpgsql SECURITY DEFINER SET search_path=pg_catalog,public AS $tenant_read_manifests$
  11. DECLARE v_state jsonb; v_tenant text;
  12. BEGIN
  13. v_state:=public.tenant_control_read_state(p_payload); v_tenant:=v_state->>'tenant_id'; PERFORM set_config('dataops.tenant_id',v_tenant,true);
  14. RETURN jsonb_build_object('tenant_id',v_tenant,'manifests',coalesce((SELECT jsonb_agg(jsonb_build_object('resource_type',resource_type,'digest',digest,'namespace',namespace,'provider_enabled',provider_enabled) ORDER BY resource_type,namespace) FROM public.tenant_resource_manifests WHERE tenant_id=v_tenant),'[]'::jsonb));
  15. END; $tenant_read_manifests$;
  16. ALTER FUNCTION public.tenant_control_read_manifests(jsonb) OWNER TO dataops_tenant_foundation_owner;
  17. REVOKE ALL ON FUNCTION public.tenant_control_read_manifests(jsonb) FROM PUBLIC,dataops_app_runtime;
  18. GRANT EXECUTE ON FUNCTION public.tenant_control_read_manifests(jsonb) TO dataops_tenant_control;
  19. """)
  20. def downgrade() -> None:
  21. op.execute("""
  22. DO $$ BEGIN
  23. IF EXISTS (SELECT 1 FROM public.tenant_resource_manifests LIMIT 1) THEN RAISE EXCEPTION 'tenant manifest reader downgrade refused while manifests exist'; END IF;
  24. END $$;
  25. """)