diff --git a/django/db/models/query_utils.py b/django/db/models/query_utils.py index 189fb4fa44..a9abf8d025 100644 --- a/django/db/models/query_utils.py +++ b/django/db/models/query_utils.py @@ -30,20 +30,6 @@ def subclasses(cls): yield from subclasses(subclass) -class QueryWrapper: - """ - A type that indicates the contents are an SQL fragment and the associate - parameters. Can be used to pass opaque data to a where-clause, for example. - """ - contains_aggregate = False - - def __init__(self, sql, params): - self.data = sql, list(params) - - def as_sql(self, compiler=None, connection=None): - return self.data - - class Q(tree.Node): """ Encapsulate filters as objects that can then be combined logically (using diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py index 638813333d..b3d0e0ac2d 100644 --- a/django/db/models/sql/compiler.py +++ b/django/db/models/sql/compiler.py @@ -7,9 +7,7 @@ from django.core.exceptions import EmptyResultSet, FieldError from django.db.models.constants import LOOKUP_SEP from django.db.models.expressions import OrderBy, Random, RawSQL, Ref, Value from django.db.models.functions import Cast -from django.db.models.query_utils import ( - Q, QueryWrapper, select_related_descend, -) +from django.db.models.query_utils import Q, select_related_descend from django.db.models.sql.constants import ( CURSOR, GET_ITERATOR_CHUNK_SIZE, MULTI, NO_RESULTS, ORDER_DIR, SINGLE, ) @@ -1139,7 +1137,7 @@ class SQLCompiler: lhs_sql, lhs_params = self.compile(select_col) rhs = '%s.%s' % (qn(alias), qn2(columns[index])) self.query.where.add( - QueryWrapper('%s = %s' % (lhs_sql, rhs), lhs_params), 'AND') + RawSQL('%s = %s' % (lhs_sql, rhs), lhs_params), 'AND') sql, params = self.as_sql() return 'EXISTS (%s)' % sql, params