mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +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 | # 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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user