- Extra checks added to ensure explicit
primaryjoin/secondaryjoin are ClauseElement
instances, to prevent more confusing errors later
- on.
+ on. [ticket:1087]
- Improved mapper() check for non-class classes.
[ticket:1236]
# interact with Query in the same way as the original Table-bound Column objects
for attr in ('primaryjoin', 'secondaryjoin'):
val = getattr(self, attr)
- if val:
+ if val is not None:
util.assert_arg_type(val, sql.ClauseElement, attr)
setattr(self, attr, _orm_deannotate(val))
c2 = relation(C1, primaryjoin=C1.id)
self.assertRaises(sa.exc.ArgumentError, compile_mappers)
-
+
+ def test_clauseelement_pj_false(self):
+ from sqlalchemy.ext.declarative import declarative_base
+ Base = declarative_base()
+ class C1(Base):
+ __tablename__ = 'c1'
+ id = Column('id', Integer, primary_key=True)
+ class C2(Base):
+ __tablename__ = 'c2'
+ id = Column('id', Integer, primary_key=True)
+ c1id = Column('c1id', Integer, ForeignKey('c1.id'))
+ c2 = relation(C1, primaryjoin="x"=="y")
+
+ self.assertRaises(sa.exc.ArgumentError, compile_mappers)
+
def test_fk_error_raised(self):
m = MetaData()