mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +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:
		| @@ -16,7 +16,7 @@ ITER_CHUNK_SIZE = CHUNK_SIZE | ||||
| # Pull into this namespace for backwards compatibility | ||||
| EmptyResultSet = sql.EmptyResultSet | ||||
|  | ||||
| class _QuerySet(object): | ||||
| class QuerySet(object): | ||||
|     "Represents a lazy database lookup for a set of objects" | ||||
|     def __init__(self, model=None, query=None): | ||||
|         self.model = model | ||||
| @@ -478,12 +478,6 @@ class _QuerySet(object): | ||||
|             raise TypeError("Cannot merge querysets of different types ('%s' and '%s'." | ||||
|                     % (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): | ||||
|     def __init__(self, *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.datastructures import SortedDict | ||||
| from django.dispatch import dispatcher | ||||
| from django.db import connection | ||||
| from django.db.models import signals | ||||
| from django.db.models.sql.where import WhereNode, EverythingNode, AND, OR | ||||
| from django.db.models.sql.datastructures import Count | ||||
| @@ -1371,6 +1372,11 @@ class Query(object): | ||||
|         return iter((lambda: cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)), | ||||
|                 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'): | ||||
|     """ | ||||
|     Returns the field name and direction for an order specification. For | ||||
|   | ||||
		Reference in New Issue
	
	Block a user