no longer referenced items from the session as they were
present in a list of items to be processed, typically
during session.expunge_all() and dependent methods.
+
+- ext
+ - Class-bound attributes sent as arguments to
+ relation()'s remote_side and foreign_keys parameters
+ are now accepted, allowing them to be used with declarative.
- mysql
- Quoting of MSEnum values for use in CREATE TABLE is now
for attr in ('order_by', 'primaryjoin', 'secondaryjoin', 'secondary', '_foreign_keys', 'remote_side'):
if callable(getattr(self, attr)):
setattr(self, attr, getattr(self, attr)())
-
- self._foreign_keys = util.to_set(self._foreign_keys)
- self.remote_side = util.to_set(self.remote_side)
+
+ self._foreign_keys = set(expression._literal_as_column(x) for x in util.to_set(self._foreign_keys))
+ self.remote_side = set(expression._literal_as_column(x) for x in util.to_set(self.remote_side))
if not self.parent.concrete:
for inheriting in self.parent.iterate_to_root():
self.assertEquals(sess.query(User).filter(User.name == 'ed').one(),
User(name='ed', addresses=[Address(email='xyz'), Address(email='def'), Address(email='abc')])
)
-
+
+ def test_uncompiled_attributes_in_relation(self):
+ class Address(Base, ComparableEntity):
+ __tablename__ = 'addresses'
+ id = Column(Integer, primary_key=True)
+ email = Column(String(50))
+ user_id = Column(Integer) # note no foreign key
+
+ class User(Base, ComparableEntity):
+ __tablename__ = 'users'
+ id = Column(Integer, primary_key=True)
+ name = Column(String(50))
+ addresses = relation("Address", order_by=Address.email,
+ foreign_keys=Address.user_id, remote_side=Address.user_id,
+ primaryjoin=id==Address.user_id,
+ )
+
+ Base.metadata.create_all()
+
+ sess = create_session()
+ u1 = User(name='ed', addresses=[Address(email='abc'), Address(email='xyz'), Address(email='def')])
+ sess.add(u1)
+ sess.flush()
+ sess.clear()
+ self.assertEquals(sess.query(User).filter(User.name == 'ed').one(),
+ User(name='ed', addresses=[Address(email='abc'), Address(email='def'), Address(email='xyz')])
+ )
def test_nice_dependency_error(self):
class User(Base):