for col in sql_util.find_columns(clauses.primaryjoin):
if localparent.mapped_table.c.contains_column(col):
context.primary_columns.append(col)
- else:
- context.secondary_columns.append(col)
if self.order_by is False and clauses.alias.default_order_by() is not None:
context.eager_order_by += clauses.alias.default_order_by()
})
mapper(User, users, properties={'addresses':relation(Address, lazy=False)})
- assert [User(id=7, addresses=[Address(id=1)])] == create_session().query(User).filter(User.id==7).options(eagerload('addresses')).all()
+ assert [User(id=7, addresses=[Address(id=1)])] == create_session().query(User).filter(User.id==7).all()
- assert [User(id=7, addresses=[Address(id=1)])] == create_session().query(User).limit(1).filter(User.id==7).options(eagerload('addresses')).all()
+ assert [User(id=7, addresses=[Address(id=1)])] == create_session().query(User).limit(1).filter(User.id==7).all()
+
+ sess = create_session()
+ u = sess.query(User).get(7)
+ def go():
+ assert u.addresses[0].user_id==7
+ # assert that the eager loader didn't have to affect 'user_id' here
+ # and that its still deferred
+ self.assert_sql_count(testbase.db, go, 1)
+
+ clear_mappers()
+
+ mapper(User, users, properties={'addresses':relation(Address, lazy=False)})
+ mapper(Address, addresses, properties={
+ 'user_id':deferred(addresses.c.user_id),
+ 'dingalings':relation(Dingaling, lazy=False)
+ })
+ mapper(Dingaling, dingalings, properties={
+ 'address_id':deferred(dingalings.c.address_id)
+ })
+ sess = create_session()
+ def go():
+ u = sess.query(User).limit(1).get(8)
+ assert User(id=8, addresses=[Address(id=2, dingalings=[Dingaling(id=1)]), Address(id=3), Address(id=4)]) == u
+ self.assert_sql_count(testbase.db, go, 1)
def test_many_to_many(self):
class Item(Base):pass
class Keyword(Base):pass
class Address(Base):pass
+class Dingaling(Base):pass
metadata = MetaData()
Column('user_id', None, ForeignKey('users.id')),
Column('email_address', String(50), nullable=False))
+dingalings = Table("dingalings", metadata,
+ Column('id', Integer, primary_key=True),
+ Column('address_id', None, ForeignKey('addresses.id')),
+ Column('data', String(30))
+ )
+
items = Table('items', metadata,
Column('id', Integer, primary_key=True),
Column('description', String(30), nullable=False)
dict(id = 4, user_id = 8, email_address = "ed@lala.com"),
dict(id = 5, user_id = 9, email_address = "fred@fred.com"),
)
+ dingalings.insert().execute(
+ dict(id=1, address_id=2, data='ding 1/2'),
+ dict(id=2, address_id=5, data='ding 2/5'),
+ )
orders.insert().execute(
dict(id = 1, user_id = 7, description = 'order 1', isopen=0, address_id=1),
dict(id = 2, user_id = 9, description = 'order 2', isopen=0, address_id=4),