summaryrefslogtreecommitdiff
path: root/tests/regressiontests/multiple_database
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2010-03-10 15:27:22 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2010-03-10 15:27:22 +0000
commitd312fa2a619633c45afd3cfdb90f325e2ecd9be9 (patch)
treeca12a2525ba4829176371f5bc91a57b2981f945a /tests/regressiontests/multiple_database
parent2287426ba6d363e919f900027be907db3a30181e (diff)
Fixed #12717 -- Corrected a problem with subqueries when using multidb routing. Thanks to Jeff Balogh for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12755 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/multiple_database')
-rw-r--r--tests/regressiontests/multiple_database/tests.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/regressiontests/multiple_database/tests.py b/tests/regressiontests/multiple_database/tests.py
index 81b6a5ffb9..540648f0e8 100644
--- a/tests/regressiontests/multiple_database/tests.py
+++ b/tests/regressiontests/multiple_database/tests.py
@@ -655,6 +655,19 @@ class QueryTestCase(TestCase):
# The editor instance should have a db state
self.assertEqual(book.editor._state.db, 'other')
+ def test_subquery(self):
+ """Make sure as_sql works with subqueries and master/slave."""
+ sub = Person.objects.using('other').filter(name='fff')
+ qs = Book.objects.filter(editor__in=sub)
+
+ # When you call __str__ on the query object, it doesn't know about using
+ # so it falls back to the default. If the subquery explicitly uses a
+ # different database, an error should be raised.
+ self.assertRaises(ValueError, str, qs.query)
+
+ # Evaluating the query shouldn't work, either
+ self.assertRaises(ValueError, list, qs)
+
class TestRouter(object):
# A test router. The behaviour is vaguely master/slave, but the
# databases aren't assumed to propagate changes.
@@ -1137,6 +1150,26 @@ class RouterTestCase(TestCase):
review3.content_object = dive
self.assertEquals(review3._state.db, 'default')
+ def test_subquery(self):
+ """Make sure as_sql works with subqueries and master/slave."""
+ # Create a book and author on the other database
+
+ mark = Person.objects.using('other').create(name="Mark Pilgrim")
+ dive = Book.objects.using('other').create(title="Dive into Python",
+ published=datetime.date(2009, 5, 4),
+ editor=mark)
+
+ sub = Person.objects.filter(name='Mark Pilgrim')
+ qs = Book.objects.filter(editor__in=sub)
+
+ # When you call __str__ on the query object, it doesn't know about using
+ # so it falls back to the default. Don't let routing instructions
+ # force the subquery to an incompatible database.
+ str(qs.query)
+
+ # If you evaluate the query, it should work, running on 'other'
+ self.assertEquals(list(qs.values_list('title', flat=True)), [u'Dive into Python'])
+
class AuthTestCase(TestCase):
multi_db = True