]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed bug whereby if __eq__() was
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 9 Sep 2011 19:51:40 +0000 (15:51 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 9 Sep 2011 19:51:40 +0000 (15:51 -0400)
redefined, a relationship many-to-one lazyload
would hit the __eq__() and fail.  [ticket:2260]
Does not apply to 0.6.9.

CHANGES
lib/sqlalchemy/orm/attributes.py
test/ext/test_sqlsoup.py
test/orm/test_mapper.py

diff --git a/CHANGES b/CHANGES
index 62267025d9818419c575018cd8d241f1afb8078a..644c152c4e4dbc8222f16ffd7edd3ea46570604f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -34,6 +34,11 @@ CHANGES
     on a new mapper would establish a backref on the
     first mapper.
 
+  - Fixed bug whereby if __eq__() was
+    redefined, a relationship many-to-one lazyload
+    would hit the __eq__() and fail.  [ticket:2260]
+    Does not apply to 0.6.9.
+
 -sql
   - Fixed bug regarding calculation of "from" list 
     for a select() element.  The "from" calc is now
index a24348c8606b83942ea360dbae44c414a64c0235..42fdf7e7f82fc420f30f7f3d65d4a673a7ba7e09 100644 (file)
@@ -421,7 +421,7 @@ class AttributeImpl(object):
                 else:
                     value = ATTR_EMPTY
 
-                if value in (PASSIVE_NO_RESULT, NEVER_SET):
+                if value is PASSIVE_NO_RESULT or value is NEVER_SET:
                     return value
                 elif value is ATTR_WAS_SET:
                     try:
index 88601b5cfb06fa8ce03aa64bff8564d20411cf1a..09e7535b2cc781a5732a498adf78a1f3e89d5d94 100644 (file)
@@ -279,6 +279,12 @@ class SQLSoupTest(fixtures.TestBase):
         db.users.relate('loans', db.loans, order_by=db.loans.loan_date,
                         cascade='all, delete-orphan')
 
+    def test_relate_m2o(self):
+        db = sqlsoup.SqlSoup(engine)
+        db.loans.relate('user', db.users)
+        u1 = db.users.filter(db.users.c.name=='Joe Student').one()
+        eq_(db.loans.first().user, u1)
+
     def test_explicit_session(self):
         Session = scoped_session(sessionmaker())
         db = sqlsoup.SqlSoup(engine, session=Session)
index ba477e8e6d9daa7e86bd8f60a69fd6bf374204cd..ce729ed6bfc05a0d958404ee9d2efa215b8e4ec6 100644 (file)
@@ -690,6 +690,28 @@ class MapperTest(_fixtures.FixtureTest):
         s.add(A())
         s.commit()
 
+    def test_we_dont_call_eq(self):
+        class NoEqAllowed(object):
+            def __eq__(self, other):
+                raise Exception("nope")
+
+        addresses, users = self.tables.addresses, self.tables.users
+        Address = self.classes.Address
+
+        mapper(NoEqAllowed, users, properties={
+            'addresses':relationship(Address, backref='user')
+        })
+        mapper(Address, addresses)
+
+        u1 = NoEqAllowed()
+        u1.name = "some name"
+        u1.addresses = [Address(id=12, email_address='a1')]
+        s = Session(testing.db)
+        s.add(u1)
+        s.commit()
+
+        a1 = s.query(Address).filter_by(id=12).one()
+        assert a1.user is u1
 
     def test_mapping_to_join_raises(self):
         """Test implicit merging of two cols raises."""