From 97b605ca8db04f38ef13ea22f61b74ecd0c7867c Mon Sep 17 00:00:00 2001 From: Jimmy Zelinskie Date: Wed, 3 Dec 2014 12:20:51 -0800 Subject: [PATCH] Fix starring after rebase. --- data/database.py | 2 +- .../versions/2088f2b81010_add_stars.py | 40 ++++++++++++++++++ .../versions/3b668be15dc0_add_stars.py | 38 ----------------- test/data/test.db | Bin 251904 -> 257024 bytes 4 files changed, 41 insertions(+), 39 deletions(-) create mode 100644 data/migrations/versions/2088f2b81010_add_stars.py delete mode 100644 data/migrations/versions/3b668be15dc0_add_stars.py diff --git a/data/database.py b/data/database.py index 51eeabf6f..e687a67f2 100644 --- a/data/database.py +++ b/data/database.py @@ -253,7 +253,7 @@ class Repository(BaseModel): # Therefore, we define our own deletion order here and use the dependency system to verify it. ordered_dependencies = [RepositoryAuthorizedEmail, RepositoryTag, Image, LogEntry, RepositoryBuild, RepositoryBuildTrigger, RepositoryNotification, - RepositoryPermission, AccessToken] + RepositoryPermission, AccessToken, Star] for query, fk in self.dependencies(search_nullable=True): model = fk.model_class diff --git a/data/migrations/versions/2088f2b81010_add_stars.py b/data/migrations/versions/2088f2b81010_add_stars.py new file mode 100644 index 000000000..d8c75966c --- /dev/null +++ b/data/migrations/versions/2088f2b81010_add_stars.py @@ -0,0 +1,40 @@ +"""add stars + +Revision ID: 2088f2b81010 +Revises: 1c5b738283a5 +Create Date: 2014-12-02 17:45:00.707498 + +""" + +# revision identifiers, used by Alembic. +revision = '2088f2b81010' +down_revision = '1c5b738283a5' + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +def upgrade(tables): + op.create_table('star', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('user_id', sa.Integer(), nullable=False), + sa.Column('repository_id', sa.Integer(), nullable=False), + sa.Column('created', sa.DateTime(), nullable=False), + sa.ForeignKeyConstraint(['repository_id'], ['repository.id'], name=op.f('fk_star_repository_id_repository')), + sa.ForeignKeyConstraint(['user_id'], ['user.id'], name=op.f('fk_star_user_id_user')), + sa.PrimaryKeyConstraint('id', name=op.f('pk_star')) + ) + with op.batch_alter_table('star', schema=None) as batch_op: + batch_op.create_index('star_repository_id', ['repository_id'], unique=False) + batch_op.create_index('star_user_id', ['user_id'], unique=False) + batch_op.create_index('star_user_id_repository_id', ['user_id', 'repository_id'], unique=True) + +def downgrade(tables): + op.drop_constraint('fk_star_repository_id_repository', 'star', type_='foreignkey') + op.drop_constraint('fk_star_user_id_user', 'star', type_='foreignkey') + with op.batch_alter_table('star', schema=None) as batch_op: + batch_op.drop_index('star_user_id_repository_id') + batch_op.drop_index('star_user_id') + batch_op.drop_index('star_repository_id') + + op.drop_table('star') diff --git a/data/migrations/versions/3b668be15dc0_add_stars.py b/data/migrations/versions/3b668be15dc0_add_stars.py deleted file mode 100644 index 47f1f1a3a..000000000 --- a/data/migrations/versions/3b668be15dc0_add_stars.py +++ /dev/null @@ -1,38 +0,0 @@ -"""add stars - -Revision ID: 3b668be15dc0 -Revises: 204abf14783d -Create Date: 2014-11-14 14:11:18.687340 - -""" - -# revision identifiers, used by Alembic. -revision = '3b668be15dc0' -down_revision = '204abf14783d' - -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import mysql - -def upgrade(tables): - op.create_table('star', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('repository_id', sa.Integer(), nullable=False), - sa.Column('created', sa.DateTime(), nullable=False), - sa.ForeignKeyConstraint(['repository_id'], ['repository.id'], name=op.f('fk_star_repository_id_repository')), - sa.ForeignKeyConstraint(['user_id'], ['user.id'], name=op.f('fk_star_user_id_user')), - sa.PrimaryKeyConstraint('id', name=op.f('pk_star')) - ) - op.create_index('star_repository_id', 'star', ['repository_id'], unique=False) - op.create_index('star_user_id', 'star', ['user_id'], unique=False) - op.create_index('star_user_id_repository_id', 'star', ['user_id', 'repository_id'], unique=True) - - -def downgrade(tables): - op.drop_constraint('fk_star_repository_id_repository', 'star', type_='foreignkey') - op.drop_constraint('fk_star_user_id_user', 'star', type_='foreignkey') - op.drop_index('star_user_id_repository_id', table_name='star') - op.drop_index('star_user_id', table_name='star') - op.drop_index('star_repository_id', table_name='star') - op.drop_table('star') diff --git a/test/data/test.db b/test/data/test.db index cdaa66e57f768e5e4463ddc644aca0f4add444b4..68f54f0a1d3043188d68d7459addaf31b55f2b08 100644 GIT binary patch delta 11546 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 delta 11098 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