1
0
mirror of https://github.com/django/django.git synced 2025-04-22 00:04:43 +00:00

Refs #34547 -- Removed DatabaseOperations.field_cast_sql() per deprecation timeline.

This commit is contained in:
Sarah Boyce 2024-12-12 16:42:20 +01:00
parent ba90b76c6e
commit 6b271ef21d
4 changed files with 2 additions and 63 deletions

View File

@ -1,7 +1,6 @@
import datetime
import decimal
import json
import warnings
from importlib import import_module
import sqlparse
@ -10,7 +9,6 @@ from django.conf import settings
from django.db import NotSupportedError, transaction
from django.db.models.expressions import Col
from django.utils import timezone
from django.utils.deprecation import RemovedInDjango60Warning
from django.utils.encoding import force_str
@ -214,23 +212,6 @@ class BaseDatabaseOperations:
"""
return cursor.fetchone()
def field_cast_sql(self, db_type, internal_type):
"""
Given a column type (e.g. 'BLOB', 'VARCHAR') and an internal type
(e.g. 'GenericIPAddressField'), return the SQL to cast it before using
it in a WHERE statement. The resulting string should contain a '%s'
placeholder for the column being searched against.
"""
warnings.warn(
(
"DatabaseOperations.field_cast_sql() is deprecated use "
"DatabaseOperations.lookup_cast() instead."
),
RemovedInDjango60Warning,
stacklevel=2,
)
return "%s"
def force_group_by(self):
"""
Return a GROUP BY clause to use with a HAVING clause when no grouping

View File

@ -1,9 +1,7 @@
import itertools
import math
import warnings
from django.core.exceptions import EmptyResultSet, FullResultSet
from django.db.backends.base.operations import BaseDatabaseOperations
from django.db.models.expressions import Case, ColPairs, Expression, Func, Value, When
from django.db.models.fields import (
BooleanField,
@ -15,7 +13,6 @@ from django.db.models.fields import (
)
from django.db.models.query_utils import RegisterLookupMixin
from django.utils.datastructures import OrderedSet
from django.utils.deprecation import RemovedInDjango60Warning
from django.utils.functional import cached_property
from django.utils.hashable import make_hashable
@ -224,22 +221,6 @@ class BuiltinLookup(Lookup):
def process_lhs(self, compiler, connection, lhs=None):
lhs_sql, params = super().process_lhs(compiler, connection, lhs)
field_internal_type = self.lhs.output_field.get_internal_type()
if (
hasattr(connection.ops.__class__, "field_cast_sql")
and connection.ops.__class__.field_cast_sql
is not BaseDatabaseOperations.field_cast_sql
):
warnings.warn(
(
"The usage of DatabaseOperations.field_cast_sql() is deprecated. "
"Implement DatabaseOperations.lookup_cast() instead."
),
RemovedInDjango60Warning,
)
db_type = self.lhs.output_field.db_type(connection=connection)
lhs_sql = (
connection.ops.field_cast_sql(db_type, field_internal_type) % lhs_sql
)
lhs_sql = (
connection.ops.lookup_cast(self.lookup_name, field_internal_type) % lhs_sql
)

View File

@ -260,6 +260,8 @@ to remove usage of these features.
* The ``DjangoDivFormRenderer`` and ``Jinja2DivFormRenderer`` transitional form
renderers are removed.
* ``BaseDatabaseOperations.field_cast_sql()`` is removed.
See :ref:`deprecated-features-5.1` for details on these changes, including how
to remove usage of these features.

View File

@ -1,12 +1,10 @@
import decimal
from unittest import mock
from django.core.management.color import no_style
from django.db import NotSupportedError, connection, transaction
from django.db.backends.base.operations import BaseDatabaseOperations
from django.db.models import DurationField
from django.db.models.expressions import Col
from django.db.models.lookups import Exact
from django.test import (
SimpleTestCase,
TestCase,
@ -15,7 +13,6 @@ from django.test import (
skipIfDBFeature,
)
from django.utils import timezone
from django.utils.deprecation import RemovedInDjango60Warning
from ..models import Author, Book
@ -224,25 +221,3 @@ class SqlFlushTests(TransactionTestCase):
self.assertEqual(author.pk, 1)
book = Book.objects.create(author=author)
self.assertEqual(book.pk, 1)
class DeprecationTests(TestCase):
def test_field_cast_sql_warning(self):
base_ops = BaseDatabaseOperations(connection=connection)
msg = (
"DatabaseOperations.field_cast_sql() is deprecated use "
"DatabaseOperations.lookup_cast() instead."
)
with self.assertWarnsMessage(RemovedInDjango60Warning, msg) as ctx:
base_ops.field_cast_sql("integer", "IntegerField")
self.assertEqual(ctx.filename, __file__)
def test_field_cast_sql_usage_warning(self):
compiler = Author.objects.all().query.get_compiler(connection.alias)
msg = (
"The usage of DatabaseOperations.field_cast_sql() is deprecated. Implement "
"DatabaseOperations.lookup_cast() instead."
)
with mock.patch.object(connection.ops.__class__, "field_cast_sql"):
with self.assertRaisesMessage(RemovedInDjango60Warning, msg):
Exact("name", "book__author__name").as_sql(compiler, connection)