diff options
| author | Simon Charette <charette.s@gmail.com> | 2017-11-11 19:17:20 -0500 |
|---|---|---|
| committer | Simon Charette <charette.s@gmail.com> | 2017-11-14 22:06:30 -0500 |
| commit | a35ab95ed4eec5c62fa19bdc69ecfe0eff3e1fca (patch) | |
| tree | de4cba97ae2ee5cbf65d5669d0f06a7b3f481fbb /tests | |
| parent | afcde50497983ec48020600345367e161f6ff9c3 (diff) | |
[1.11.x] Fixed #28792 -- Fixed index name truncation of namespaced tables.
Refs #27458, #27843.
Thanks Tim and Mariusz for the review.
Backport of ee85ef8315db839e5723dea19d8b971420a2ebb4 from master
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/backends/test_utils.py | 8 | ||||
| -rw-r--r-- | tests/schema/tests.py | 25 |
2 files changed, 32 insertions, 1 deletions
diff --git a/tests/backends/test_utils.py b/tests/backends/test_utils.py index 47720f7c92..6fac407a6e 100644 --- a/tests/backends/test_utils.py +++ b/tests/backends/test_utils.py @@ -1,5 +1,5 @@ from django.core.exceptions import ImproperlyConfigured -from django.db.backends.utils import truncate_name +from django.db.backends.utils import split_identifier, truncate_name from django.db.utils import load_backend from django.test import SimpleTestCase from django.utils import six @@ -25,3 +25,9 @@ class TestLoadBackend(SimpleTestCase): self.assertEqual(truncate_name('username"."some_table', 10), 'username"."some_table') self.assertEqual(truncate_name('username"."some_long_table', 10), 'username"."some_la38a') self.assertEqual(truncate_name('username"."some_long_table', 10, 3), 'username"."some_loa38') + + def test_split_identifier(self): + self.assertEqual(split_identifier('some_table'), ('', 'some_table')) + self.assertEqual(split_identifier('"some_table"'), ('', 'some_table')) + self.assertEqual(split_identifier('namespace"."some_table'), ('namespace', 'some_table')) + self.assertEqual(split_identifier('"namespace"."some_table"'), ('namespace', 'some_table')) diff --git a/tests/schema/tests.py b/tests/schema/tests.py index 671e1234ff..8e868dfb0e 100644 --- a/tests/schema/tests.py +++ b/tests/schema/tests.py @@ -2267,6 +2267,31 @@ class SchemaTests(TransactionTestCase): cast_function=lambda x: x.time(), ) + @isolate_apps('schema') + def test_namespaced_db_table_create_index_name(self): + """ + Table names are stripped of their namespace/schema before being used to + generate index names. + """ + with connection.schema_editor() as editor: + max_name_length = connection.ops.max_name_length() or 200 + namespace = 'n' * max_name_length + table_name = 't' * max_name_length + + class TableName(Model): + class Meta: + app_label = 'schema' + db_table = table_name + + class NameSpacedTableName(Model): + class Meta: + app_label = 'schema' + db_table = '"%s"."%s"' % (namespace, table_name) + self.assertEqual( + editor._create_index_name(TableName, []), + editor._create_index_name(NameSpacedTableName, []), + ) + @unittest.skipUnless(connection.vendor == 'oracle', 'Oracle specific db_table syntax') def test_creation_with_db_table_double_quotes(self): oracle_user = connection.creation._test_database_user() |
