Author: Alex
Date: 2009-12-20 20:38:38 -0600 (Sun, 20 Dec 2009)
New Revision: 11926

Modified:
   django/branches/soc2009/multidb/django/db/models/manager.py
   django/branches/soc2009/multidb/django/db/models/query.py
   django/branches/soc2009/multidb/django/db/models/query_utils.py
   django/branches/soc2009/multidb/django/db/models/sql/query.py
   
django/branches/soc2009/multidb/tests/regressiontests/multiple_database/tests.py
Log:
[soc2009/multidb] Correct the handling of raw and defered fields with multi-db.

Modified: django/branches/soc2009/multidb/django/db/models/manager.py
===================================================================
--- django/branches/soc2009/multidb/django/db/models/manager.py 2009-12-21 
02:01:24 UTC (rev 11925)
+++ django/branches/soc2009/multidb/django/db/models/manager.py 2009-12-21 
02:38:38 UTC (rev 11926)
@@ -200,6 +200,7 @@
         return self.get_query_set()._update(values, **kwargs)
 
     def raw(self, query, params=None, *args, **kwargs):
+        kwargs["using"] = self.db
         return RawQuerySet(model=self.model, query=query, params=params, 
*args, **kwargs)
 
 class ManagerDescriptor(object):

Modified: django/branches/soc2009/multidb/django/db/models/query.py
===================================================================
--- django/branches/soc2009/multidb/django/db/models/query.py   2009-12-21 
02:01:24 UTC (rev 11925)
+++ django/branches/soc2009/multidb/django/db/models/query.py   2009-12-21 
02:38:38 UTC (rev 11926)
@@ -1154,9 +1154,11 @@
     Provides an iterator which converts the results of raw SQL queries into
     annotated model instances.
     """
-    def __init__(self, query, model=None, query_obj=None, params=None, 
translations=None):
+    def __init__(self, query, model=None, query_obj=None, params=None,
+        translations=None, using=None):
         self.model = model
-        self.query = query_obj or sql.RawQuery(sql=query, 
connection=connection, params=params)
+        self.using = using
+        self.query = query_obj or sql.RawQuery(sql=query, 
connection=connections[using], params=params)
         self.params = params or ()
         self.translations = translations or {}
 
@@ -1230,6 +1232,8 @@
 
         for field, value in annotations:
             setattr(instance, field, value)
+        
+        instance._state.db = self.using
 
         return instance
 

Modified: django/branches/soc2009/multidb/django/db/models/query_utils.py
===================================================================
--- django/branches/soc2009/multidb/django/db/models/query_utils.py     
2009-12-21 02:01:24 UTC (rev 11925)
+++ django/branches/soc2009/multidb/django/db/models/query_utils.py     
2009-12-21 02:38:38 UTC (rev 11926)
@@ -187,7 +187,7 @@
         cls = self.model_ref()
         data = instance.__dict__
         if data.get(self.field_name, self) is self:
-            data[self.field_name] = 
cls._base_manager.filter(pk=instance.pk).values_list(self.field_name, 
flat=True).get()
+            data[self.field_name] = 
cls._base_manager.filter(pk=instance.pk).values_list(self.field_name, 
flat=True).using(instance._state.db).get()
         return data[self.field_name]
 
     def __set__(self, instance, value):

Modified: django/branches/soc2009/multidb/django/db/models/sql/query.py
===================================================================
--- django/branches/soc2009/multidb/django/db/models/sql/query.py       
2009-12-21 02:01:24 UTC (rev 11925)
+++ django/branches/soc2009/multidb/django/db/models/sql/query.py       
2009-12-21 02:38:38 UTC (rev 11926)
@@ -11,7 +11,7 @@
 from django.utils.tree import Node
 from django.utils.datastructures import SortedDict
 from django.utils.encoding import force_unicode
-from django.db import connection, connections, DEFAULT_DB_ALIAS
+from django.db import connections, DEFAULT_DB_ALIAS
 from django.db.models import signals
 from django.db.models.fields import FieldDoesNotExist
 from django.db.models.query_utils import select_related_descend, InvalidQuery

Modified: 
django/branches/soc2009/multidb/tests/regressiontests/multiple_database/tests.py
===================================================================
--- 
django/branches/soc2009/multidb/tests/regressiontests/multiple_database/tests.py
    2009-12-21 02:01:24 UTC (rev 11925)
+++ 
django/branches/soc2009/multidb/tests/regressiontests/multiple_database/tests.py
    2009-12-21 02:38:38 UTC (rev 11926)
@@ -619,6 +619,13 @@
 
         self.assertEquals(learn.get_next_by_published().title, "Dive into 
Python")
         self.assertEquals(dive.get_previous_by_published().title, "Learning 
Python")
+    
+    def test_raw(self):
+        "test the raw() method across databases"
+        dive = Book.objects.using('other').create(title="Dive into Python",
+            published=datetime.date(2009, 5, 4))
+        val = Book.objects.db_manager("other").raw('SELECT id FROM 
"multiple_database_book"')
+        self.assertEqual(map(lambda o: o.pk, val), [dive.pk])
 
 
 class UserProfileTestCase(TestCase):

--

You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.


Reply via email to