"""Rewrite changes and tags. Revision ID: 69d10714ee45 Revises: 7d9cf9d4337c Create Date: 2019-04-13 15:53:25.321093 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = '69d10714ee45' down_revision = '7d9cf9d4337c' branch_labels = None depends_on = None def upgrade(): """Many tag related changes. - add many to many relationships for added/removed tags to changes. - add a composed primary key to Tag from name and is_default_language. - change sticker-tag many to many relationship to new primary key of tag. """ op.drop_constraint('sticker_tag_tag_name_fkey', 'sticker_tag', type_='foreignkey') op.drop_constraint('tag_pkey', 'tag') op.create_primary_key('tag_pkey', 'tag', ['name', 'is_default_language']) # Change added tags many to many relationship op.create_table( 'change_added_tags', sa.Column('change_id', sa.Integer(), nullable=True), sa.Column('tag_name', sa.String(), nullable=True), sa.Column('tag_is_default_language', sa.Boolean(), nullable=True), sa.ForeignKeyConstraint(['change_id'], ['change.id'], onupdate='cascade', ondelete='cascade', deferrable=True), sa.ForeignKeyConstraint( ['tag_name', 'tag_is_default_language'], ['tag.name', 'tag.is_default_language'], onupdate='cascade', ondelete='cascade', deferrable=True, ) ) op.create_index(op.f('ix_change_added_tags_change_id'), 'change_added_tags', ['change_id'], unique=False) op.create_index(op.f('ix_change_added_tags_tag_name'), 'change_added_tags', ['tag_name'], unique=False) # Change removed tags many to many relationship op.create_table( 'change_removed_tags', sa.Column('change_id', sa.Integer(), nullable=True), sa.Column('tag_name', sa.String(), nullable=True), sa.Column('tag_is_default_language', sa.Boolean(), nullable=True), sa.ForeignKeyConstraint(['change_id'], ['change.id'], onupdate='cascade', ondelete='cascade', deferrable=True), sa.ForeignKeyConstraint( ['tag_name', 'tag_is_default_language'], ['tag.name', 'tag.is_default_language'], onupdate='cascade', ondelete='cascade', deferrable=True) ) op.create_index(op.f('ix_change_removed_tags_change_id'), 'change_removed_tags', ['change_id'], unique=False) op.create_index(op.f('ix_change_removed_tags_tag_name'), 'change_removed_tags', ['tag_name'], unique=False) op.add_column('sticker_tag', sa.Column('tag_is_default_language', sa.Boolean(), nullable=True)) op.create_foreign_key('sticker_tag_tag_name_fkey', 'sticker_tag', 'tag', ['tag_name', 'tag_is_default_language'], ['name', 'is_default_language'], onupdate='cascade', ondelete='cascade', deferrable=True) def downgrade(): """Down migration.""" # Drop all the new stuff op.drop_index(op.f('ix_change_removed_tags_tag_name'), table_name='change_removed_tags') op.drop_index(op.f('ix_change_removed_tags_change_id'), table_name='change_removed_tags') op.drop_table('change_removed_tags') op.drop_index(op.f('ix_change_added_tags_tag_name'), table_name='change_added_tags') op.drop_index(op.f('ix_change_added_tags_change_id'), table_name='change_added_tags') op.drop_table('change_added_tags') # Restore the old tag primary key constraint stuff op.drop_constraint('sticker_tag_tag_name_fkey', 'sticker_tag', type_='foreignkey') op.drop_column('sticker_tag', 'tag_is_default_language') op.drop_constraint('tag_pkey', 'tag') op.create_primary_key('tag_pkey', 'tag', ['name']) op.create_foreign_key( 'sticker_tag_tag_name_fkey', 'sticker_tag', 'tag', ['tag_name'], ['name'], onupdate='CASCADE', ondelete='CASCADE', deferrable=True ) # ### end Alembic commands ###