aurweb/migrations/versions/be7adae47ac3_upgrade_voteinfo_integers.py
Kevin Morris b5ff8581f3
feat(migrations): add upgrade_voteinfo_integers ref
This migration modifies the Yes, No, Abstain and ActiveTUs columns
of the TUVoteInfo table from unsigned TINYINT to unsigned INTEGER.

TINYINT supports a total of 1 byte (up to 255 trusted users). This
is quite limited and we don't spend too much more by storing a
standard 4-byte INTEGER.

Signed-off-by: Kevin Morris <kevr@0cost.org>
2022-01-06 20:27:23 -08:00

49 lines
1.7 KiB
Python

"""
upgrade voteinfo integers
Within `aurweb/schema.py`, these were previously forced to use
TINYINT(3, unsigned=True) types. When generating with dummy data,
it is very easy to bypass 3-character TU counts; in addition,
this is possible in the future on production, and so we should
deal with this case regardless.
All previous TINYINT(3, unsigned=True) typed columns are upgraded
INTEGER(unsigned=True) types, supporting up to 4-bytes of active TUs
and votes for one particular proposal.
Revision ID: be7adae47ac3
Revises: 56e2ce8e2ffa
Create Date: 2022-01-06 14:37:07.899778
"""
from alembic import op
from sqlalchemy.dialects.mysql import INTEGER, TINYINT
# revision identifiers, used by Alembic.
revision = 'be7adae47ac3'
down_revision = '56e2ce8e2ffa'
branch_labels = None
depends_on = None
# Upgrade to INTEGER(unsigned=True); supports 4-byte values.
UPGRADE_T = INTEGER(unsigned=True)
# Downgrade to TINYINT(3, unsigned=True); supports 1-byte values.
DOWNGRADE_T = TINYINT(3, unsigned=True)
def upgrade():
""" Upgrade 'Yes', 'No', 'Abstain' and 'ActiveTUs' to unsigned INTEGER. """
op.alter_column("TU_VoteInfo", "Yes", type_=UPGRADE_T)
op.alter_column("TU_VoteInfo", "No", type_=UPGRADE_T)
op.alter_column("TU_VoteInfo", "Abstain", type_=UPGRADE_T)
op.alter_column("TU_VoteInfo", "ActiveTUs", type_=UPGRADE_T)
def downgrade():
"""
Downgrade 'Yes', 'No', 'Abstain' and 'ActiveTUs' to unsigned TINYINT.
"""
op.alter_column("TU_VoteInfo", "ActiveTUs", type_=DOWNGRADE_T)
op.alter_column("TU_VoteInfo", "Abstain", type_=DOWNGRADE_T)
op.alter_column("TU_VoteInfo", "No", type_=DOWNGRADE_T)
op.alter_column("TU_VoteInfo", "Yes", type_=DOWNGRADE_T)