mirror of
https://github.com/django/django.git
synced 2025-07-06 18:59:13 +00:00
queryset-refactor: Querysets no longer need to be customised per-backend.
Instead, it's the Query class that is backend-dependent. So make that explicit in the code (code should refer to sql.Query and they will always get the right backend-specific class). This also fixes the main part of #6956, in that the various subclasses of Query automatically use any custom Query class. Fixed #6956. git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@7426 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
c934beea01
commit
1add6fb366
@ -16,7 +16,7 @@ ITER_CHUNK_SIZE = CHUNK_SIZE
|
|||||||
# Pull into this namespace for backwards compatibility
|
# Pull into this namespace for backwards compatibility
|
||||||
EmptyResultSet = sql.EmptyResultSet
|
EmptyResultSet = sql.EmptyResultSet
|
||||||
|
|
||||||
class _QuerySet(object):
|
class QuerySet(object):
|
||||||
"Represents a lazy database lookup for a set of objects"
|
"Represents a lazy database lookup for a set of objects"
|
||||||
def __init__(self, model=None, query=None):
|
def __init__(self, model=None, query=None):
|
||||||
self.model = model
|
self.model = model
|
||||||
@ -478,12 +478,6 @@ class _QuerySet(object):
|
|||||||
raise TypeError("Cannot merge querysets of different types ('%s' and '%s'."
|
raise TypeError("Cannot merge querysets of different types ('%s' and '%s'."
|
||||||
% (self.__class__.__name__, other.__class__.__name__))
|
% (self.__class__.__name__, other.__class__.__name__))
|
||||||
|
|
||||||
# Use the backend's QuerySet class if it defines one. Otherwise, use _QuerySet.
|
|
||||||
if connection.features.uses_custom_queryset:
|
|
||||||
QuerySet = connection.ops.query_set_class(_QuerySet)
|
|
||||||
else:
|
|
||||||
QuerySet = _QuerySet
|
|
||||||
|
|
||||||
class ValuesQuerySet(QuerySet):
|
class ValuesQuerySet(QuerySet):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(ValuesQuerySet, self).__init__(*args, **kwargs)
|
super(ValuesQuerySet, self).__init__(*args, **kwargs)
|
||||||
|
@ -13,6 +13,7 @@ from copy import deepcopy
|
|||||||
from django.utils.tree import Node
|
from django.utils.tree import Node
|
||||||
from django.utils.datastructures import SortedDict
|
from django.utils.datastructures import SortedDict
|
||||||
from django.dispatch import dispatcher
|
from django.dispatch import dispatcher
|
||||||
|
from django.db import connection
|
||||||
from django.db.models import signals
|
from django.db.models import signals
|
||||||
from django.db.models.sql.where import WhereNode, EverythingNode, AND, OR
|
from django.db.models.sql.where import WhereNode, EverythingNode, AND, OR
|
||||||
from django.db.models.sql.datastructures import Count
|
from django.db.models.sql.datastructures import Count
|
||||||
@ -1371,6 +1372,11 @@ class Query(object):
|
|||||||
return iter((lambda: cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)),
|
return iter((lambda: cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)),
|
||||||
self.connection.features.empty_fetchmany_value)
|
self.connection.features.empty_fetchmany_value)
|
||||||
|
|
||||||
|
# Use the backend's custom Query class if it defines one. Otherwise, use the
|
||||||
|
# default.
|
||||||
|
if connection.features.uses_custom_query_class:
|
||||||
|
Query = connection.ops.query_class(Query)
|
||||||
|
|
||||||
def get_order_dir(field, default='ASC'):
|
def get_order_dir(field, default='ASC'):
|
||||||
"""
|
"""
|
||||||
Returns the field name and direction for an order specification. For
|
Returns the field name and direction for an order specification. For
|
||||||
|
Loading…
x
Reference in New Issue
Block a user