diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2010-03-10 15:27:22 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2010-03-10 15:27:22 +0000 |
| commit | d312fa2a619633c45afd3cfdb90f325e2ecd9be9 (patch) | |
| tree | ca12a2525ba4829176371f5bc91a57b2981f945a /tests/regressiontests/multiple_database/tests.py | |
| parent | 2287426ba6d363e919f900027be907db3a30181e (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/tests.py')
| -rw-r--r-- | tests/regressiontests/multiple_database/tests.py | 33 |
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 |
