This approach uses part of sqlalchemy example history_meta code

adapted to recording inserts and updates.

This removes need to manually create history tables.

Our code still remains in control of when history records are
created.
This commit is contained in:
Adam Shimali
2016-04-14 15:09:59 +01:00
parent 16553af133
commit a6a18c1a6f
10 changed files with 442 additions and 54 deletions

View File

@@ -0,0 +1,56 @@
"""empty message
Revision ID: 0003_add_service_history
Revises: 0002_add_content_char_count
Create Date: 2016-04-19 13:01:54.519821
"""
# revision identifiers, used by Alembic.
revision = '0003_add_service_history'
down_revision = '0002_add_content_char_count'
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.create_table('services_history',
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
sa.Column('name', sa.String(length=255), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.Column('updated_at', sa.DateTime(), nullable=True),
sa.Column('active', sa.Boolean(), nullable=False),
sa.Column('message_limit', sa.BigInteger(), nullable=False),
sa.Column('restricted', sa.Boolean(), nullable=False),
sa.Column('email_from', sa.Text(), nullable=False),
sa.Column('created_by_id', postgresql.UUID(as_uuid=True), nullable=False),
sa.Column('version', sa.Integer(), autoincrement=False, nullable=False),
sa.PrimaryKeyConstraint('id', 'version')
)
op.create_index(op.f('ix_services_history_created_by_id'), 'services_history', ['created_by_id'], unique=False)
op.add_column('services', sa.Column('created_by_id', postgresql.UUID(as_uuid=True), nullable=True))
op.add_column('services', sa.Column('version', sa.Integer(), nullable=True))
op.create_index(op.f('ix_services_created_by_id'), 'services', ['created_by_id'], unique=False)
op.create_foreign_key(None, 'services', 'users', ['created_by_id'], ['id'])
op.get_bind()
op.execute('UPDATE services SET created_by_id = (SELECT user_id FROM user_to_service WHERE services.id = user_to_service.service_id LIMIT 1)')
op.execute('UPDATE services SET version = 1')
op.execute('INSERT INTO services_history SELECT * FROM services')
op.alter_column('services', 'created_by_id', nullable=False)
op.alter_column('services', 'version', nullable=False)
### end Alembic commands ###
def downgrade():
### commands auto generated by Alembic - please adjust! ###
op.drop_constraint(None, 'services', type_='foreignkey')
op.drop_index(op.f('ix_services_created_by_id'), table_name='services')
op.drop_column('services', 'version')
op.drop_column('services', 'created_by_id')
op.drop_index(op.f('ix_services_history_created_by_id'), table_name='services_history')
op.drop_table('services_history')
### end Alembic commands ###