1
This commit is contained in:
67
alembic/versions/010_desktop_config_name_oem_unique.py
Normal file
67
alembic/versions/010_desktop_config_name_oem_unique.py
Normal file
@@ -0,0 +1,67 @@
|
||||
"""desktop_configs: oem_id + unique (name, oem_id)
|
||||
|
||||
Revision ID: 010
|
||||
Revises: 009
|
||||
Create Date: 2026-05-21
|
||||
|
||||
"""
|
||||
|
||||
from typing import Sequence, Union
|
||||
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
|
||||
revision: str = "010"
|
||||
down_revision: Union[str, None] = "009"
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def _drop_name_unique(conn) -> None:
|
||||
inspector = sa.inspect(conn)
|
||||
for uc in inspector.get_unique_constraints("desktop_configs"):
|
||||
cols = uc.get("column_names") or []
|
||||
if cols == ["name"]:
|
||||
op.drop_constraint(uc["name"], "desktop_configs", type_="unique")
|
||||
return
|
||||
|
||||
for idx in inspector.get_indexes("desktop_configs"):
|
||||
if idx.get("column_names") == ["name"] and idx.get("unique"):
|
||||
op.drop_index(idx["name"], table_name="desktop_configs")
|
||||
return
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
conn = op.get_bind()
|
||||
inspector = sa.inspect(conn)
|
||||
columns = {c["name"] for c in inspector.get_columns("desktop_configs")}
|
||||
|
||||
if "oem_id" not in columns:
|
||||
op.add_column(
|
||||
"desktop_configs",
|
||||
sa.Column("oem_id", sa.Integer(), nullable=False, server_default="1"),
|
||||
)
|
||||
|
||||
unique_names = {uc["name"] for uc in inspector.get_unique_constraints("desktop_configs")}
|
||||
if "uq_desktop_configs_name_oem_id" not in unique_names:
|
||||
_drop_name_unique(conn)
|
||||
op.create_unique_constraint(
|
||||
"uq_desktop_configs_name_oem_id",
|
||||
"desktop_configs",
|
||||
["name", "oem_id"],
|
||||
)
|
||||
|
||||
inspector = sa.inspect(conn)
|
||||
index_names = {idx["name"] for idx in inspector.get_indexes("desktop_configs")}
|
||||
if "ix_desktop_configs_name" not in index_names:
|
||||
op.create_index("ix_desktop_configs_name", "desktop_configs", ["name"], unique=False)
|
||||
if "ix_desktop_configs_oem_id" not in index_names:
|
||||
op.create_index("ix_desktop_configs_oem_id", "desktop_configs", ["oem_id"], unique=False)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_index("ix_desktop_configs_oem_id", table_name="desktop_configs")
|
||||
op.drop_index("ix_desktop_configs_name", table_name="desktop_configs")
|
||||
op.drop_constraint("uq_desktop_configs_name_oem_id", "desktop_configs", type_="unique")
|
||||
op.create_unique_constraint("name", "desktop_configs", ["name"])
|
||||
op.drop_column("desktop_configs", "oem_id")
|
||||
Reference in New Issue
Block a user