From e0e5daea1de2ac8b6cbd0aa53ba284de70d5297c Mon Sep 17 00:00:00 2001 From: morpheus65535 Date: Mon, 31 Jul 2023 22:54:33 -0400 Subject: [PATCH] Fixed removal of rowid column while preventing the lost of history or blacklist data. --- migrations/versions/195144da1f7e_.py | 71 ++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 5 deletions(-) diff --git a/migrations/versions/195144da1f7e_.py b/migrations/versions/195144da1f7e_.py index 0dbcde1bd..f4151b9ff 100644 --- a/migrations/versions/195144da1f7e_.py +++ b/migrations/versions/195144da1f7e_.py @@ -8,6 +8,8 @@ Create Date: 2023-07-27 13:14:08.825037 from alembic import op import sqlalchemy as sa +from app.database import TableHistory, TableHistoryMovie, TableBlacklist, TableBlacklistMovie, select + # revision identifiers, used by Alembic. revision = '195144da1f7e' @@ -18,6 +20,7 @@ depends_on = None bind = op.get_context().bind insp = sa.inspect(bind) tables = insp.get_table_names() +sqlite = bind.engine.name == 'sqlite' def column_exists(table_name, column_name): @@ -26,13 +29,71 @@ def column_exists(table_name, column_name): def upgrade(): - with op.batch_alter_table('table_episodes') as batch_op: - if column_exists('table_episodes', 'rowid'): - batch_op.drop_column(column_name='rowid') + if column_exists('table_episodes', 'rowid'): + if sqlite: + table_history_data = [{ + "id": x.id, + "action": x.action, + "description": x.description, + "language": x.language, + "provider": x.provider, + "score": x.score, + "sonarrEpisodeId": x.sonarrEpisodeId, + "sonarrSeriesId": x.sonarrSeriesId, + "subs_id": x.subs_id, + "subtitles_path": x.subtitles_path, + "timestamp": x.timestamp, + "video_path": x.video_path, + "matched": x.matched, + "not_matched": x.not_matched, + } for x in bind.execute(select(TableHistory)).all()] - with op.batch_alter_table('table_movies') as batch_op: - if column_exists('table_movies', 'rowid'): + table_blacklist_data = [{ + "id": x.id, + "language": x.language, + "provider": x.provider, + "sonarr_episode_id": x.sonarr_episode_id, + "sonarr_series_id": x.sonarr_series_id, + "subs_id": x.subs_id, + "timestamp": x.timestamp, + } for x in bind.execute(select(TableBlacklist)).all()] + with op.batch_alter_table('table_episodes') as batch_op: batch_op.drop_column(column_name='rowid') + if sqlite: + op.bulk_insert(TableHistory.__table__, rows=table_history_data) + op.bulk_insert(TableBlacklist.__table__, rows=table_blacklist_data) + + if column_exists('table_movies', 'rowid'): + if sqlite: + table_history_movie_data = [{ + "id": x.id, + "action": x.action, + "description": x.description, + "language": x.language, + "provider": x.provider, + "radarrId": x.radarrId, + "score": x.score, + "subs_id": x.subs_id, + "subtitles_path": x.subtitles_path, + "timestamp": x.timestamp, + "video_path": x.video_path, + "matched": x.matched, + "not_matched": x.not_matched, + } for x in bind.execute(select(TableHistoryMovie)).all()] + + table_blacklist_movie_data = [{ + "id": x.id, + "language": x.language, + "provider": x.provider, + "radarr_id": x.radarr_id, + "subs_id": x.subs_id, + "timestamp": x.timestamp, + } for x in bind.execute(select(TableBlacklistMovie)).all()] + with op.batch_alter_table('table_movies') as batch_op: + batch_op.drop_column(column_name='rowid') + if sqlite: + op.bulk_insert(TableHistoryMovie.__table__, rows=table_history_movie_data) + op.bulk_insert(TableBlacklistMovie.__table__, rows=table_blacklist_movie_data) if 'table_custom_score_profile_conditions' in tables: op.drop_table('table_custom_score_profile_conditions')