]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- fix bug due to regression from #2793, make sure we only go to load
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 11 Oct 2013 20:41:52 +0000 (16:41 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 11 Oct 2013 20:41:52 +0000 (16:41 -0400)
scalar attributes here and not relationships, else we get an error if there's no
actual scalars to load

lib/sqlalchemy/orm/persistence.py
lib/sqlalchemy/orm/state.py
test/orm/test_unitofwork.py

index ccdd6e81e10c818e03b2cda2a631875d2ab95b71..13747be8a20ee4506405ce053067deede096a261 100644 (file)
@@ -728,8 +728,8 @@ def _finalize_insert_update_commands(base_mapper, uowtransaction,
         # it isn't expired.
         toload_now = []
 
-        if base_mapper.eager_defaults and state.unloaded:
-            toload_now.extend(state.unloaded)
+        if base_mapper.eager_defaults:
+            toload_now.extend(state._unloaded_non_object)
         elif mapper.version_id_col is not None and \
             mapper.version_id_generator is False:
             prop = mapper._columntoproperty[mapper.version_id_col]
index 35305dc7967323f751c607c93aa0439ea0bb74ee..2c947a7acfe15387ea2e9678e621ef320f1ff4a1 100644 (file)
@@ -392,6 +392,15 @@ class InstanceState(interfaces._InspectionAttr):
                     difference(self.committed_state).\
                     difference(self.dict)
 
+    @property
+    def _unloaded_non_object(self):
+        return self.unloaded.difference(self._uses_objects)
+
+    @property
+    def _uses_objects(self):
+        return (attr for attr in self.manager
+                    if self.manager[attr].impl.uses_objects)
+
     @property
     def expired_attributes(self):
         """Return the set of keys which are 'expired' to be loaded by
index 3679884dc5fb591aa5d218fee0ffcceb23b8ec24..a0f96838fdacde80c956dcf8522b3f426d15ef4f 100644 (file)
@@ -854,9 +854,13 @@ class DefaultTest(fixtures.MappedTest):
         hohoval, default_t, Hoho = (self.other.hohoval,
                                 self.tables.default_t,
                                 self.classes.Hoho)
+        Secondary = self.classes.Secondary
 
-        mapper(Hoho, default_t, eager_defaults=True)
+        mapper(Hoho, default_t, eager_defaults=True, properties={
+                "sec": relationship(Secondary)
+            })
 
+        mapper(Secondary, self.tables.secondary_table)
         h1 = Hoho()
 
         session = create_session()
@@ -869,6 +873,14 @@ class DefaultTest(fixtures.MappedTest):
 
         self.sql_count_(0, lambda: eq_(h1.hoho, hohoval))
 
+        # no actual eager defaults, make sure error isn't raised
+        h2 = Hoho(hoho='fas', counter=5)
+        session.add(h2)
+        session.flush()
+        eq_(h2.hoho, 'fas')
+        eq_(h2.counter, 5)
+
+
     def test_insert_nopostfetch(self):
         default_t, Hoho = self.tables.default_t, self.classes.Hoho