Fixed #32653 -- Made quoting names in the Oracle backend consistent with db_table.
This commit is contained in:
parent
54da6e2ac2
commit
1f643c28b5
|
@ -334,7 +334,7 @@ END;
|
||||||
# always defaults to uppercase.
|
# always defaults to uppercase.
|
||||||
# We simplify things by making Oracle identifiers always uppercase.
|
# We simplify things by making Oracle identifiers always uppercase.
|
||||||
if not name.startswith('"') and not name.endswith('"'):
|
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
|
# 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
|
# 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.
|
# that stage so we aren't really making the name longer here.
|
||||||
|
|
|
@ -4,7 +4,9 @@ from django.db import DatabaseError, connection
|
||||||
from django.db.models import BooleanField
|
from django.db.models import BooleanField
|
||||||
from django.test import TransactionTestCase
|
from django.test import TransactionTestCase
|
||||||
|
|
||||||
from ..models import Square
|
from ..models import (
|
||||||
|
Square, VeryLongModelNameZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipUnless(connection.vendor == 'oracle', 'Oracle tests')
|
@unittest.skipUnless(connection.vendor == 'oracle', 'Oracle tests')
|
||||||
|
@ -16,6 +18,13 @@ class Tests(unittest.TestCase):
|
||||||
quoted_name = connection.ops.quote_name(name)
|
quoted_name = connection.ops.quote_name(name)
|
||||||
self.assertEqual(quoted_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):
|
def test_dbms_session(self):
|
||||||
"""A stored procedure can be called through a cursor wrapper."""
|
"""A stored procedure can be called through a cursor wrapper."""
|
||||||
with connection.cursor() as cursor:
|
with connection.cursor() as cursor:
|
||||||
|
|
Loading…
Reference in New Issue