From 7107d64a5bc8a3f40ffe80ddcf851c6aef57b13e Mon Sep 17 00:00:00 2001 From: Goffi Date: Sat, 20 Jun 2026 10:27:51 +0200 Subject: [PATCH] sqla (mapping): fix missing PEP constraint: A constraint name was missing on the `PubsubNode.pep` column, resulting in a crash when trying to generate the initial database on launch with an empty `local_dir`. Migration script introducing the column (f4cb5fc600c7_add_missing_pep_check_constraint.py) has been updated too. Another migration script has been made to add the constraint to existing DB (only if they are missing). --- .../007439b3b0ce_add_pep_to_pubsubnode.py | 2 +- ...c600c7_add_missing_pep_check_constraint.py | 40 +++++++++++++++++++ libervia/backend/memory/sqla_mapping.py | 2 +- 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 libervia/backend/memory/migration/versions/f4cb5fc600c7_add_missing_pep_check_constraint.py diff --git a/libervia/backend/memory/migration/versions/007439b3b0ce_add_pep_to_pubsubnode.py b/libervia/backend/memory/migration/versions/007439b3b0ce_add_pep_to_pubsubnode.py index 531a1dcf..04524e3f 100644 --- a/libervia/backend/memory/migration/versions/007439b3b0ce_add_pep_to_pubsubnode.py +++ b/libervia/backend/memory/migration/versions/007439b3b0ce_add_pep_to_pubsubnode.py @@ -21,7 +21,7 @@ def upgrade(): batch_op.add_column( sa.Column( "pep", - sa.Boolean(create_constraint=True), + sa.Boolean(create_constraint=True, name="pep_bool"), server_default=sa.text("0"), nullable=False, ) diff --git a/libervia/backend/memory/migration/versions/f4cb5fc600c7_add_missing_pep_check_constraint.py b/libervia/backend/memory/migration/versions/f4cb5fc600c7_add_missing_pep_check_constraint.py new file mode 100644 index 00000000..91b3cbce --- /dev/null +++ b/libervia/backend/memory/migration/versions/f4cb5fc600c7_add_missing_pep_check_constraint.py @@ -0,0 +1,40 @@ +"""add missing pep check constraint + +Revision ID: f4cb5fc600c7 +Revises: ccd879fef17e +Create Date: 2026-06-20 10:07:46.457551 + +""" + +from alembic import op +from sqlalchemy import inspect + +# revision identifiers, used by Alembic. +revision = "f4cb5fc600c7" +down_revision = "ccd879fef17e" +branch_labels = None +depends_on = None + + +def _existing_check_constraints(table_name: str) -> set[str | None]: + insp = inspect(op.get_bind()) + return {c["name"] for c in insp.get_check_constraints(table_name) if c.get("name")} + + +def upgrade(): + existing = _existing_check_constraints("pubsub_nodes") + + if "ck_pubsub_nodes_pep_bool" not in existing: + with op.batch_alter_table("pubsub_nodes") as batch_op: + batch_op.create_check_constraint( + "ck_pubsub_nodes_pep_bool", + "pep IN (0, 1)", + ) + + +def downgrade(): + existing = _existing_check_constraints("pubsub_nodes") + + if "ck_pubsub_nodes_pep_bool" in existing: + with op.batch_alter_table("pubsub_nodes") as batch_op: + batch_op.drop_constraint("ck_pubsub_nodes_pep_bool", type_="check") diff --git a/libervia/backend/memory/sqla_mapping.py b/libervia/backend/memory/sqla_mapping.py index 7bcc35dc..efaee88f 100644 --- a/libervia/backend/memory/sqla_mapping.py +++ b/libervia/backend/memory/sqla_mapping.py @@ -629,7 +629,7 @@ class PubsubNode(Base): service = Column(JID) name = Column(Text, nullable=False) pep = Column( - Boolean(create_constraint=True), + Boolean(create_constraint=True, name="pep_bool"), nullable=False, server_default=false(), )