def upgrade()

in annotation/alembic/versions/2b3ed53127ea_alter_categories_id_integer_to_varchar.py [0:0]


def upgrade():
    op.drop_constraint(
        "categories_parent_fkey", "categories", type_="foreignkey"
    )
    op.drop_constraint(
        "association_jobs_categories_category_id_fkey",
        "association_jobs_categories",
        type_="foreignkey",
    )
    op.add_column(
        "categories",
        sa.Column(
            "parent_temp",
            sa.VARCHAR(),
            nullable=True,
        ),
    )
    op.add_column(
        "categories",
        sa.Column(
            "id_temp",
            sa.VARCHAR(),
            sa.Sequence("categories_id_seq"),
            nullable=True,
            primary_key=True,
        ),
    )
    op.add_column(
        "association_jobs_categories",
        sa.Column(
            "category_id_temp",
            sa.VARCHAR(),
            nullable=True,
        ),
    )
    op.execute("UPDATE categories SET parent_temp = CAST(parent AS varchar)")
    op.execute("UPDATE categories SET id_temp = CAST(id AS varchar)")
    op.execute(
        "UPDATE association_jobs_categories "
        "SET category_id_temp = CAST(category_id AS varchar)"
    )
    op.drop_column("categories", "parent")
    op.drop_column("categories", "id")
    op.drop_column("association_jobs_categories", "category_id")
    op.create_primary_key("pk_categories", "categories", ["id_temp"])
    op.create_foreign_key(
        "categories_parent_fkey",
        "categories",
        "categories",
        ["parent_temp"],
        ["id_temp"],
        ondelete="CASCADE",
    )
    op.create_foreign_key(
        "association_jobs_categories_category_id_fkey",
        "association_jobs_categories",
        "categories",
        ["category_id_temp"],
        ["id_temp"],
    )
    op.alter_column(
        "categories",
        "parent_temp",
        new_column_name="parent",
        server_default="null",
    )
    op.alter_column(
        "categories", "id_temp", new_column_name="id", nullable=False
    )
    op.alter_column(
        "association_jobs_categories",
        "category_id_temp",
        new_column_name="category_id",
        nullable=False,
    )
    op.create_check_constraint(
        "is_not_self_parent", "categories", "id != parent"
    )
    op.create_index(
        op.f("ix_categories_parent"),
        "categories",
        ["parent"],
        unique=False,
    )