[Sqlalchemy-tickets] [sqlalchemy] #2903: auto-aliasing for cls->joined-inh only considers the previ
Brought to you by:
zzzeek
|
From: sqlalchemy <mi...@zz...> - 2014-01-02 21:41:30
|
#2903: auto-aliasing for cls->joined-inh only considers the previous class
---------------------+------------------------------------
Reporter: zzzeek | Owner: zzzeek
Type: defect | Status: new
Priority: highest | Milestone: 0.9.xx
Component: orm | Severity: major - 1-3 hours
Keywords: | Progress State: in progress
---------------------+------------------------------------
I thought the auto-aliasing from query(B).join(B.cs) if C were joined-inh
was removed. but it's not. so now it only takes into account the
immediate joinpoint, and fails in a case like this:
{{{
#!python
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class A(Base):
__tablename__ = 'a'
id = Column(Integer, primary_key=True)
class B(A):
__tablename__ = 'b'
id = Column(Integer, ForeignKey('a.id'), primary_key=True)
c_id = Column(Integer, ForeignKey('c.id'))
c = relationship("C", foreign_keys=c_id)
class C(A):
__tablename__ = 'c'
id = Column(Integer, ForeignKey('a.id'), primary_key=True)
d_id = Column(Integer, ForeignKey('d.id'))
d = relationship("D", foreign_keys=d_id)
class D(A):
__tablename__ = 'd'
id = Column(Integer, ForeignKey('a.id'), primary_key=True)
e_id = Column(Integer, ForeignKey('e.id'))
e = relationship("E", foreign_keys=e_id)
class E(A):
__tablename__ = 'e'
id = Column(Integer, ForeignKey('a.id'), primary_key=True)
f_id = Column(Integer, ForeignKey('f.id'))
f = relationship("F", foreign_keys=f_id)
class F(A):
__tablename__ = 'f'
id = Column(Integer, ForeignKey('a.id'), primary_key=True)
e = create_engine("postgresql://scott:tiger@localhost/test", echo=True)
Base.metadata.create_all(e)
s = Session(e)
s.query(B).join("c", "d", "e", "f").all()
}}}
--
Ticket URL: <http://www.sqlalchemy.org/trac/ticket/2903>
sqlalchemy <http://www.sqlalchemy.org/>
The Database Toolkit for Python
|