diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-04-30 12:59:07 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-30 12:59:07 +0200 |
| commit | 1f643c28b5f2b039c47155692844dbae1cb091cd (patch) | |
| tree | 0bcdecef1a03a7e8fcf42148d2759c729d763344 | |
| parent | 54da6e2ac20bde80e0de9e35aa0c40ae1dd13943 (diff) | |
Fixed #32653 -- Made quoting names in the Oracle backend consistent with db_table.
| -rw-r--r-- | django/db/backends/oracle/operations.py | 2 | ||||
| -rw-r--r-- | tests/backends/oracle/tests.py | 11 |
2 files changed, 11 insertions, 2 deletions
diff --git a/django/db/backends/oracle/operations.py b/django/db/backends/oracle/operations.py index ae6bd432fb..d48c8dd868 100644 --- a/django/db/backends/oracle/operations.py +++ b/django/db/backends/oracle/operations.py @@ -334,7 +334,7 @@ END; # always defaults to uppercase. # We simplify things by making Oracle identifiers always uppercase. if not name.startswith('"') and not name.endswith('"'): - name = '"%s"' % truncate_name(name.upper(), self.max_name_length()) + name = '"%s"' % truncate_name(name, self.max_name_length()) # Oracle puts the query text into a (query % args) construct, so % signs # in names need to be escaped. The '%%' will be collapsed back to '%' at # that stage so we aren't really making the name longer here. diff --git a/tests/backends/oracle/tests.py b/tests/backends/oracle/tests.py index 85d45805e0..a50f38dbe2 100644 --- a/tests/backends/oracle/tests.py +++ b/tests/backends/oracle/tests.py @@ -4,7 +4,9 @@ from django.db import DatabaseError, connection from django.db.models import BooleanField from django.test import TransactionTestCase -from ..models import Square +from ..models import ( + Square, VeryLongModelNameZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ, +) @unittest.skipUnless(connection.vendor == 'oracle', 'Oracle tests') @@ -16,6 +18,13 @@ class Tests(unittest.TestCase): quoted_name = connection.ops.quote_name(name) self.assertEqual(quoted_name % (), name) + def test_quote_name_db_table(self): + model = VeryLongModelNameZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ + db_table = model._meta.db_table.upper() + self.assertEqual(f'"{db_table}"', connection.ops.quote_name( + 'backends_verylongmodelnamezzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz', + )) + def test_dbms_session(self): """A stored procedure can be called through a cursor wrapper.""" with connection.cursor() as cursor: |
