mirror of
https://github.com/django/django.git
synced 2025-10-23 21:59:11 +00:00
Fixed #1142 -- Added multiple database support.
This monster of a patch is the result of Alex Gaynor's 2009 Google Summer of Code project. Congratulations to Alex for a job well done. Big thanks also go to: * Justin Bronn for keeping GIS in line with the changes, * Karen Tracey and Jani Tiainen for their help testing Oracle support * Brett Hoerner, Jon Loyens, and Craig Kimmerer for their feedback. * Malcolm Treddinick for his guidance during the GSoC submission process. * Simon Willison for driving the original design process * Cal Henderson for complaining about ponies he wanted. ... and everyone else too numerous to mention that helped to bring this feature into fruition. git-svn-id: http://code.djangoproject.com/svn/django/trunk@11952 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -7,7 +7,7 @@ import pickle
|
||||
import sys
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
from django.db import models, DEFAULT_DB_ALIAS
|
||||
from django.db.models.query import Q, ITER_CHUNK_SIZE
|
||||
|
||||
# Python 2.3 doesn't have sorted()
|
||||
@@ -822,8 +822,8 @@ We can do slicing beyond what is currently in the result cache, too.
|
||||
|
||||
Bug #7045 -- extra tables used to crash SQL construction on the second use.
|
||||
>>> qs = Ranking.objects.extra(tables=['django_site'])
|
||||
>>> s = qs.query.as_sql()
|
||||
>>> s = qs.query.as_sql() # test passes if this doesn't raise an exception.
|
||||
>>> s = qs.query.get_compiler(qs.db).as_sql()
|
||||
>>> s = qs.query.get_compiler(qs.db).as_sql() # test passes if this doesn't raise an exception.
|
||||
|
||||
Bug #7098 -- Make sure semi-deprecated ordering by related models syntax still
|
||||
works.
|
||||
@@ -912,9 +912,9 @@ We should also be able to pickle things that use select_related(). The only
|
||||
tricky thing here is to ensure that we do the related selections properly after
|
||||
unpickling.
|
||||
>>> qs = Item.objects.select_related()
|
||||
>>> query = qs.query.as_sql()[0]
|
||||
>>> query = qs.query.get_compiler(qs.db).as_sql()[0]
|
||||
>>> query2 = pickle.loads(pickle.dumps(qs.query))
|
||||
>>> query2.as_sql()[0] == query
|
||||
>>> query2.get_compiler(qs.db).as_sql()[0] == query
|
||||
True
|
||||
|
||||
Check pickling of deferred-loading querysets
|
||||
@@ -1051,7 +1051,7 @@ sufficient that this query runs without error.
|
||||
Calling order_by() with no parameters removes any existing ordering on the
|
||||
model. But it should still be possible to add new ordering after that.
|
||||
>>> qs = Author.objects.order_by().order_by('name')
|
||||
>>> 'ORDER BY' in qs.query.as_sql()[0]
|
||||
>>> 'ORDER BY' in qs.query.get_compiler(qs.db).as_sql()[0]
|
||||
True
|
||||
|
||||
Incorrect SQL was being generated for certain types of exclude() queries that
|
||||
@@ -1085,7 +1085,8 @@ performance problems on backends like MySQL.
|
||||
|
||||
Nested queries should not evaluate the inner query as part of constructing the
|
||||
SQL (so we should see a nested query here, indicated by two "SELECT" calls).
|
||||
>>> Annotation.objects.filter(notes__in=Note.objects.filter(note="xyzzy")).query.as_sql()[0].count('SELECT')
|
||||
>>> qs = Annotation.objects.filter(notes__in=Note.objects.filter(note="xyzzy"))
|
||||
>>> qs.query.get_compiler(qs.db).as_sql()[0].count('SELECT')
|
||||
2
|
||||
|
||||
Bug #10181 -- Avoid raising an EmptyResultSet if an inner query is provably
|
||||
@@ -1222,20 +1223,20 @@ FieldError: Infinite loop caused by ordering.
|
||||
|
||||
|
||||
# In Oracle, we expect a null CharField to return u'' instead of None.
|
||||
if settings.DATABASE_ENGINE == "oracle":
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == "django.db.backends.oracle":
|
||||
__test__["API_TESTS"] = __test__["API_TESTS"].replace("<NONE_OR_EMPTY_UNICODE>", "u''")
|
||||
else:
|
||||
__test__["API_TESTS"] = __test__["API_TESTS"].replace("<NONE_OR_EMPTY_UNICODE>", "None")
|
||||
|
||||
|
||||
if settings.DATABASE_ENGINE == "mysql":
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == "django.db.backends.mysql":
|
||||
__test__["API_TESTS"] += """
|
||||
When grouping without specifying ordering, we add an explicit "ORDER BY NULL"
|
||||
portion in MySQL to prevent unnecessary sorting.
|
||||
|
||||
>>> query = Tag.objects.values_list('parent_id', flat=True).order_by().query
|
||||
>>> query.group_by = ['parent_id']
|
||||
>>> sql = query.as_sql()[0]
|
||||
>>> sql = query.get_compiler(DEFAULT_DB_ALIAS).as_sql()[0]
|
||||
>>> fragment = "ORDER BY "
|
||||
>>> pos = sql.find(fragment)
|
||||
>>> sql.find(fragment, pos + 1) == -1
|
||||
|
||||
Reference in New Issue
Block a user