Loading django/core/management/sql.py +1 −1 Original line number Diff line number Diff line Loading @@ -36,7 +36,7 @@ def sql_create(app_config, style, connection): # We trim models from the current app so that the sqlreset command does not # generate invalid SQL (leaving models out of known_models is harmless, so # we can be conservative). app_models = app_config.get_models(include_auto_created=True) app_models = list(app_config.get_models(include_auto_created=True)) final_output = [] tables = connection.introspection.table_names() known_models = set(model for model in connection.introspection.installed_models(tables) if model not in app_models) Loading tests/commands_sql/tests.py +21 −5 Original line number Diff line number Diff line from __future__ import unicode_literals import re from django.apps import apps from django.core.management.color import no_style from django.core.management.sql import (sql_create, sql_delete, sql_indexes, Loading @@ -19,11 +21,25 @@ class SQLCommandsTestCase(TestCase): def test_sql_create(self): app_config = apps.get_app_config('commands_sql') output = sql_create(app_config, no_style(), connections[DEFAULT_DB_ALIAS]) create_tables = [o for o in output if o.startswith('CREATE TABLE')] self.assertEqual(len(create_tables), 3) # Lower so that Oracle's upper case tbl names wont break sql = create_tables[-1].lower() six.assertRegex(self, sql, r'^create table .commands_sql_book.*') tables = set() create_table_re = re.compile(r'^create table .(?P<table>[\w_]+).*', re.IGNORECASE) reference_re = re.compile(r'.* references .(?P<table>[\w_]+).*', re.IGNORECASE) for statement in output: create_table = create_table_re.match(statement) if create_table: tables.add(create_table.group('table')) continue reference = reference_re.match(statement) if reference: table = reference.group('table') self.assertIn( table, tables, "The table %s is referenced before its creation." % table ) self.assertEqual(tables, { 'commands_sql_comment', 'commands_sql_book', 'commands_sql_book_comments' }) def test_sql_delete(self): app_config = apps.get_app_config('commands_sql') Loading Loading
django/core/management/sql.py +1 −1 Original line number Diff line number Diff line Loading @@ -36,7 +36,7 @@ def sql_create(app_config, style, connection): # We trim models from the current app so that the sqlreset command does not # generate invalid SQL (leaving models out of known_models is harmless, so # we can be conservative). app_models = app_config.get_models(include_auto_created=True) app_models = list(app_config.get_models(include_auto_created=True)) final_output = [] tables = connection.introspection.table_names() known_models = set(model for model in connection.introspection.installed_models(tables) if model not in app_models) Loading
tests/commands_sql/tests.py +21 −5 Original line number Diff line number Diff line from __future__ import unicode_literals import re from django.apps import apps from django.core.management.color import no_style from django.core.management.sql import (sql_create, sql_delete, sql_indexes, Loading @@ -19,11 +21,25 @@ class SQLCommandsTestCase(TestCase): def test_sql_create(self): app_config = apps.get_app_config('commands_sql') output = sql_create(app_config, no_style(), connections[DEFAULT_DB_ALIAS]) create_tables = [o for o in output if o.startswith('CREATE TABLE')] self.assertEqual(len(create_tables), 3) # Lower so that Oracle's upper case tbl names wont break sql = create_tables[-1].lower() six.assertRegex(self, sql, r'^create table .commands_sql_book.*') tables = set() create_table_re = re.compile(r'^create table .(?P<table>[\w_]+).*', re.IGNORECASE) reference_re = re.compile(r'.* references .(?P<table>[\w_]+).*', re.IGNORECASE) for statement in output: create_table = create_table_re.match(statement) if create_table: tables.add(create_table.group('table')) continue reference = reference_re.match(statement) if reference: table = reference.group('table') self.assertIn( table, tables, "The table %s is referenced before its creation." % table ) self.assertEqual(tables, { 'commands_sql_comment', 'commands_sql_book', 'commands_sql_book_comments' }) def test_sql_delete(self): app_config = apps.get_app_config('commands_sql') Loading