"""campaign_history Revision ID: b909216b4972 Revises: 9a78d10c101c Create Date: 2019-10-30 17:13:28.637995 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = 'b909216b4972' down_revision = '37ac3e669086' branch_labels = None depends_on = None def upgrade(): op.add_column('CampaignHistory', sa.Column('activity_id', sa.BigInteger(), nullable=True)) op.add_column('CampaignHistory', sa.Column('user_id', sa.Integer(), nullable=True)) op.create_foreign_key(op.f('fk_CampaignHistory_user_id_User'), 'CampaignHistory', 'User', ['user_id'], ['id']) conn = op.get_bind() # Populate new fields. conn.execute(''' UPDATE "CampaignHistory" SET activity_id = (regexp_match(endpoint, '/campaigns/[0-9]+/campaigns/([0-9]+)'))[1]::INT8 WHERE endpoint SIMILAR TO '/campaigns/[0-9]+/campaigns/[0-9]+' ''') conn.execute(''' UPDATE "CampaignHistory" SET user_id = u.id FROM "User" AS u WHERE u.auth0_id = "CampaignHistory".history_user_id ''') # Delete old entries related to deleted test campaigns and campaigns. conn.execute(''' DELETE FROM "CampaignHistory" AS h WHERE NOT EXISTS (SELECT 1 FROM "Campaign" AS c WHERE c.id = h.campaign_id) ''') conn.execute(''' DELETE FROM "CampaignHistory" AS h WHERE h.activity_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM "Activity" AS a WHERE a.id = h.activity_id) ''') def downgrade(): op.drop_constraint(op.f('fk_CampaignHistory_user_id_User'), 'CampaignHistory', type_='foreignkey') op.drop_column('CampaignHistory', 'user_id') op.drop_column('CampaignHistory', 'activity_id')