mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #24560 -- Added a --dry-run mode to the createcachetable command.
This commit is contained in:
@@ -22,21 +22,25 @@ class Command(BaseCommand):
|
||||
default=DEFAULT_DB_ALIAS,
|
||||
help='Nominates a database onto which the cache tables will be '
|
||||
'installed. Defaults to the "default" database.')
|
||||
parser.add_argument('--dry-run', action='store_true', dest='dry_run',
|
||||
help='Does not create the table, just prints the SQL that would '
|
||||
'be run.')
|
||||
|
||||
def handle(self, *tablenames, **options):
|
||||
db = options.get('database')
|
||||
self.verbosity = int(options.get('verbosity'))
|
||||
dry_run = options.get('dry_run')
|
||||
if len(tablenames):
|
||||
# Legacy behavior, tablename specified as argument
|
||||
for tablename in tablenames:
|
||||
self.create_table(db, tablename)
|
||||
self.create_table(db, tablename, dry_run)
|
||||
else:
|
||||
for cache_alias in settings.CACHES:
|
||||
cache = caches[cache_alias]
|
||||
if isinstance(cache, BaseDatabaseCache):
|
||||
self.create_table(db, cache._table)
|
||||
self.create_table(db, cache._table, dry_run)
|
||||
|
||||
def create_table(self, database, tablename):
|
||||
def create_table(self, database, tablename, dry_run):
|
||||
cache = BaseDatabaseCache(tablename, {})
|
||||
if not router.allow_migrate_model(database, cache.cache_model_class):
|
||||
return
|
||||
@@ -74,11 +78,19 @@ class Command(BaseCommand):
|
||||
full_statement.append(' %s%s' % (line, ',' if i < len(table_output) - 1 else ''))
|
||||
full_statement.append(');')
|
||||
|
||||
full_statement = "\n".join(full_statement)
|
||||
|
||||
if dry_run:
|
||||
self.stdout.write(full_statement)
|
||||
for statement in index_output:
|
||||
self.stdout.write(statement)
|
||||
return
|
||||
|
||||
with transaction.atomic(using=database,
|
||||
savepoint=connection.features.can_rollback_ddl):
|
||||
with connection.cursor() as curs:
|
||||
try:
|
||||
curs.execute("\n".join(full_statement))
|
||||
curs.execute(full_statement)
|
||||
except DatabaseError as e:
|
||||
raise CommandError(
|
||||
"Cache table '%s' could not be created.\nThe error was: %s." %
|
||||
|
||||
Reference in New Issue
Block a user