diff --git a/tubesync/sync/management/commands/fix-mariadb.py b/tubesync/sync/management/commands/fix-mariadb.py index a25f8da7..826b5533 100644 --- a/tubesync/sync/management/commands/fix-mariadb.py +++ b/tubesync/sync/management/commands/fix-mariadb.py @@ -11,7 +11,12 @@ def _(arg_str): def SQLTable(arg_table): if not isinstance(arg_table, str): raise TypeError(type(arg_table)) - if not arg_table.startswith('sync_'): + tables = db.connection.introspection.table_names(include_views=False) + valid_table_name = ( + arg_table.startswith('sync_') and + arg_table in tables + ) + if not valid_table_name: raise ValueError(_('Invalid table name')) return str(arg_table) @@ -43,20 +48,27 @@ class Command(BaseCommand): _('An invalid database vendor is configured') + f': {db.connection.vendor}' ) + db_is_mariadb = ( hasattr(db.connection, 'mysql_is_mariadb') and + db.connection.is_usable() and db.connection.mysql_is_mariadb() ) if not db_is_mariadb: raise CommandError(_('Not conbected to a MariaDB database server.')) + display_name = db.connection.display_name table_names = options.get('delete_table') log.info('Start') if options['uuid_columns']: + if 'uuid' != db.connection.data_types.get('UUIDField', ''): + raise CommandError(_( + f'The {display_name} database server does not support UUID columns.' + )) self.stdout.write('Time to update the columns!') - self.stdout.write('Tables to drop:') + self.stdout.write('Tables to delete:') pp( table_names ) # All done